从应用程序设计的角度来看,uC/OS-II 的任务就是一个用户编写的 C 函数和与之相关
联的一些数据结构而构成的一个实体。把一个大型任务分解成多个小任务﹐然后在计算机中
通过运行这些小任务﹐最终达到完成大任务的目的。
在 uC/OS-II 中,与上述那些小任务对应的程序实体就叫做“任务”(实质上是一个线程),
uC/OS-II 就是一个能对这些小任务的运行进行管理和调度的多任务操作系统。
1.任务的切换
在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境),当需要中止当
前任务时﹐则把任务对应的虚拟处理器复制到内存,再把另一个需要运行的任务的虚拟处理
器复制到实际处理器中﹐,当需要运行某个任务时就把该任务的虚拟处理器复制到实际处理
器中﹐由操作系统的调度器按某种规则来进行这两个复制工作﹐也就是说﹐任务的切换是
任务运行环境的切换。
2 任务的构成
要建立一个概念︰具有控制块的程序才是一个可以被系统所运行的任务。程序代码、私
有堆栈(用以保护运行环境)、任务控制块是任务的三要件。任务控制块提供了运行环境的
存储位置。其实﹐程序切换的关键是把程序的私有堆栈指针赋予处理器的堆栈指针 SP ,实质
上系统是通过 SP 的切换来实现程序的切换的。
3.虚拟处理器
虚拟处理器应该存储的主要信息︰
(1)程序的断点地址(PC)
(2)任务堆栈指针(SP)
(3)程序状态字寄存器(PSW)
(4)通用寄存器内容
(5)函数调用信息(已存在于堆栈)
这些内容通常保存在任务堆栈中﹐这些内容也常叫做任务的上下文﹐另外再用一个数
据结构保存任务堆栈指针(SP) ,这个数据结构叫做任务控制块(提供私有堆栈也是虚拟处
理器的位置﹐任务控制块是不是像我们人在一个国家中的身份证﹖(其实﹐系统中的所有资
源都应该有身份证),它除了保存任务堆栈指针之外还要负责保存任务其他信息。任务控制
块是由操作系统另行构造的一个数据结构,每个任务都有一个任务控制块。
4.任务的运行流程
首先获得任务的任务控制块﹐然后处理器的 SP 等于任务控制块中保存的 SP,接着恢复
待运行的任务的运行环境﹐最后令处理器的 PC 等于任务堆栈中的断点地址任务的三个状态
任务一共有三个状态﹐分别如下︰
休眠状态︰任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的
睡眠状态
就绪状态︰系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记﹐这时任
务的状态叫做就绪状态
运行状态︰处于就绪状态的任务如果经调度器判断获得了 CPU 的使用权﹐则任务就进
入运行状态
等待状态∶正在运行的任务﹐需要等待一段时间或需要等待一个事件发生再运行时﹐该
任务就会把 CPU 的使用权让给别的任务而使任务进入等待状态
5.任务控制块(任务在系统中的身份证)
一个任务的任务控制块的主要作用就是保存该任务的虚拟处理器的堆栈指针寄存器 SP。 其实﹐随着任务管理工作的复杂性的提高﹐它还应该保存一些其他信息。
由于系统存在着多个任务﹐于是系统如何来识别并管理一个任务就是一个需要解决的问题。
识别一个任务的最直接的办法是为每一个任务起一个名称。由于 uC/OS-II 中的任务都有一
个惟一的优先级别﹐因此 uC/OS-II 是用任务的优先级来作为任务的标识的。所以﹐任务控
制块还要来保存该任务的优先级别。
另外﹐前面也谈到,一个任务在不同的时刻还处于不同的状态﹐显然﹐记录了任务状态的数
据也应该保存到任务控制块中
基于上述原因﹐系统必须为每个任务创建一个保存与该任务有关的相关信息的数据结
构﹐这个数据结构就叫做该任务的任务控制块(TCB)。 

关于uC/OS-II 概述相关推荐

  1. UART0串口编程(四):UART0串口编程之在UC/OS—II中遭遇的危机

    UART0串口编程之在UC/OS-II中遭遇的危机 一.潜在的危机 1.在uc/os操作系统中设计串口编程时,由于ISR和多个任务并发执行,情况比较复杂.尤其是接收状态为被动状态时,只能靠串行口中断来 ...

  2. Lab 6:uC/OS II

    为什么80%的码农都做不了架构师?>>>    目标: 移植uC/OS II到RPi上,实现两个任务的调度.这两个任务能轮流点亮LED,并通过串口发送消息表明自己正在运行 具体步骤: ...

  3. uc/OS II——多任务设计

    uc/OS II--多任务设计 (1)设计 开始任务 [1]/声明 开始任务 任务块 static OS_STK App_TaskStartStk[APP_TASK_START_STK_SIZE]; ...

  4. linux串口互斥,UART0串口编程之在UC/OS—II中遭遇的危机

    一.潜在的危机 1.在uc/os操作系统中设计串口编程时,由于ISR和多个任务并发执行,情况比较复杂.尤其是接收状态为被动状态时,只能靠串行口中断来接收数据. 2.在进行串行通信时,双方遵循相同的通信 ...

  5. 【嵌入式系统—实时操作系统】uC/OS II源码的官网下载

    要下载源码为:STM32F107-uC/OS-II源码包 Micrium官网的下载地址:Micrium_uC-Eval-STM32F107_uCOS-II 怎么找? 到官网的产品专区目录入口查找STM ...

  6. 【 uC/OS II 】uC/OS II 源代码阅读(os_task.c)任务管理

    前言 这个任务管理源代码,是整个系统最核心的部分,也是最难的部分,多看几遍吧.其中的核心结构体是: typedef struct os_tcb {OS_STK *OSTCBStkPtr; /* Poi ...

  7. uc os ii与linux,uC/OS-II嵌入式实时操作系统的几大特点

    uC/OS-II嵌入式实时操作系统的几大特点 出处:网络 发布于:2018-09-12 14:46:03 uC/OS-II的特点 1.uC/OS-II是由Labrosse先生编写的一个开放式内核,主要 ...

  8. UC/OS II 消息邮箱

    消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了"消息"的特定数据结构.如果该指针为空,说明 ...

  9. 【 uC/OS II 】uC/OS II 源代码阅读(os_mbox.c)消息邮箱

    前言 关于消息邮箱,是一个消息邮箱里面,只能存储一条消息.核心结构体如下: #if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0u) typedef s ...

  10. UC/OS II 任务管理(4)之任务创建

    任务的创建函数 ucosii之前的版本都只支持64个任务,但是V2.90版本支持的任务数量达到了256. 用法和原理都差不多.我这里就只介绍任务数不大于64的情况.当任务大于64的时候,只需要配置相关 ...

最新文章

  1. 每日一皮:如何用一句话让领导和同事都尴尬至极?
  2. 【sprinb-boot】@ComponentScan 使用
  3. 【PAT甲级 素数判断 进制转换】1015 Reversible Primes (20 分) Java版 4/4通过
  4. c语言如何监控网卡信息,查看网卡信息及状态和网卡日志信息
  5. const的理解、const指针、指向const的指针
  6. 霍邱一中2021高考成绩查询入口,2021六安高考成绩查询系统
  7. 虚控件在GUI编程中的应用
  8. 光时域反射仪 光通信工程TFN F7 OTDR 测试耗损必备
  9. Photoshop插件-删除中间调通道蒙板-脚本开发-PS插件
  10. mysql group by 命令_MySQL常用命令(八)--GROUP BY、HAVING、SELECT子句的顺序
  11. 从欧盟与韩国实践看智慧城市的开放式治理创新模式
  12. android11.0 12.0Launcher3禁止拖拽app图标到第一屏
  13. 百度阿里网易大疆等大小厂前端校招面筋
  14. Missing instance name in instantiation of '*'.
  15. 导出CAD文件的几种方法
  16. python 中文字符转换
  17. 机器学习之逐次下降法(机器学习算法原理与实践)郑捷 (P159-p163)
  18. Arduino 语法、函数使用、最常用函数、arduino教程、arduino笔记、参考手册
  19. nbu客户端卸载_NBU卸载(Linux环境)
  20. 3.12 杭电复试题2014

热门文章

  1. 【C语言】重要函数atoi的使用
  2. css3动态测试网址
  3. 数据分析---Fama-French三因子模型
  4. LeetCode43------两数相乘
  5. ubuntu 软件管理
  6. C语言自定义函数的调用
  7. [论文阅读] Action Semantics Network: Considering the Effects of Actions in Multiagent System
  8. 告别BIOS EFI时代来临
  9. 3GPP TS 29244-g30 中英文对照 | 5.4.14 Deferred PDR activation and deactivation
  10. JAVA interrupt、interrupted和isInterrupted的区别