一、关于ucos

几个 UCOSII 相关的概念需要大家了解一下。任务优先级,任务堆栈,任务控制块,任务就绪表和任务调度器。
任务优先级,这个概念比较好理解, ucos 中,每个任务都有唯一的一个优先级。优先级是任务的唯一标识。在 UCOSII 中,使用 CPU 的时候,优先级高(数值小)的任务比优先级低的任务具有优先使用权,即任务就绪表中总是优先级最高的任务获得 CPU 使用权,只有高优先级的任务让出 CPU 使用权(比如延时)时,低优先级的任务才能获得 CPU 使用权。 UCOSII 不支持多个任务优先级相同,也就是每个任务的优先级必须不一样。

任务堆栈,就是存储器中的连续存储空间。为了满足任务切换和响应中断时保存 CPU 寄存器中的内容以及任务调用其他函数时的需要,每个任务都有自己的堆栈。在创建任务的时候,任务堆栈是任务创建的一个重要入口参数。

任务控制块 OS_TCB,用来记录任务堆栈指针,任务当前状态以及任务优先级等任务属性。
UCOSII 的任何任务都是通过任务控制块(TCB)的东西来控制的,一旦任务创建了,任务控制块 OS_TCB 就会被赋值。每个任务管理块有 3 个最重要的参数:1,任务函数指针; 2,任务堆栈指针; 3,任务优先级;任务控制块就是任务在系统里面的身份证(UCOSII 通过优先级识别任务),任务控制块我们就不再详细介绍了,详细介绍请参考任哲老师的《嵌入式实时操作系统 UCOSII 原理及应用》一书第二章。

任务就绪表, 简而言之就是用来记录系统中所有处于就绪状态的任务。它是一个位图,系统中每个任务都在这个位图中占据一个进制位,该位置的状态(1 或者 0)就表示任务是否处于就绪状态。

任务调度 的作用一是在任务就绪表中查找优先级最高的就绪任务,二是实现任务的切换。比如说,当一个任务释放 cpu 控制权后,进行一次任务调度,这个时候任务调度器首先要去任务就绪表查询优先级最高的就绪任务,查到之后,进行一次任务切换,转而去执行下一个任务。关于任务调度的详细介绍,请参考《嵌入式实时操作系统 UCOSII 原理及应用》一书第三章相关内容。UCOSII 的每个任务都是一个死循环。
每个任务都处在以下 5 种状态之一的状态下,这 5种状态是:睡眠状态、 就绪状态、 运行状态、 等待状态(等待某一事件发生)和中断服务状态。
睡眠状态,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态。
就绪状态,系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,任务已经准备好了,但由于该任务的优先级比正在运行的任务的优先级低, 还暂时不能运行,这时任务的状态叫做就绪状态。
运行状态,该任务获得 CPU 使用权,并正在运行中,此时的任务状态叫做运行状态。
等待状态,正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把 CPU 的使用权让给别的任务而使任务进入等待状态。
中断服务状态,一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态。
UCOSII 任务的 5 个状态转换关系如图 56.1.2 所示:

二、关于ucosii和ucosiii

1、 可剥夺多任务管理:
都是属于可剥夺的多任务内核,总是执行当前就绪的最高优先级任务;

2、同优先级任务的时间片轮转调度:
UCOSII任务优先级必须不一致,高优先级的任务就是先被执行,UCOSSII允许一个任务优先级被多个任务使用,当这个优先级处于最高就绪态的时候,UCOSIII就会轮流调度处于这个优先级的所有任务,让每个任务运行一段由用户指定的时间长度,叫做时间片;

3、极短的关中断时间:
UCOSIII可以采用锁定内核调度的方式而不是关中断的方式来保护临界代码,这样就可以将关中断的时间降到最低,似的UCOSIII能够非常迅速的响应中断请求

4、任务数据不受限制:
UCOSII 早期版本只支持 64 个任务,但是从 2.80 版本开始,支持任务数提高到 255 个。 UCOSII 保留了最高4 个优先级和最低 4 个优先级的总共 8 个任务,用于拓展使用,实际上, UCOSII 一般只占用了最低 2 个优先级,分别用于空闲任务(倒数第一)和统计任务(倒数第二),所以剩下给我们使用的任务最多可达 255-2=253 个(V2.91)。

UCOSIII本身是没有任务数据限制的,但是从实际的应用者角度考虑,任务数据会受到CPU所使用的存贮空间的限制,包含代码空间和数据空间

5、优先级数量不受限制,UCOSIII支持无限多的任务优先级


三、

STM32---ucosii和ucosiii相关推荐

  1. stm32 ucosii消息队列 串口_正点原子STM32F407探索者开发板资料连载第六十三章 UCOSII 实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weix ...

  2. OSTaskCreate()函数(UCOSII与UCOSIII的对比)

    UCOSII的用法 OSTaskCreate()函数原型:INT8U OSTaskCreate(void(*task)(void *pd),void *pdata,OS_STK *ptos,INT8U ...

  3. stm32 ucosii消息队列 串口_STM32F1的UART4串口配置

    注意是UART4,不是USART4 在stm32中UART和USART是不相同的 USART是通用同步/异步串行接收/发送器 UART是通用异步收发传输器 简单区分同步和异步就是看通信时需不需要对外提 ...

  4. STM32 UCOSII移植

    一.准备 我们需要UCOSII源码以及基本工程模板. 二.移植步骤 在工程模板下新建UCOSII文件夹,并在下面创建CONFIG.CORE及PORT文件夹. 把UCOSII中Source中除os_cf ...

  5. STM32开发 -- UCOSII移植

    一.UCOS简介 之前讲过一部分UCOSII,参看:STM32开发 – UCOSII 但是讲的有点糙了,现在参看正点原子的STM32F4 UCOS开发手册 V3.0,重点看一下UCOSII和UCOSI ...

  6. 基于STM32的UCOSIII入门教学(一)第1讲 RTOS背景知识简介

    border="0" width="363" height="333" src="//music.163.com/outchain ...

  7. RTOS之uCOS-II源码下载及源码目录结构、常见的RTOS!

    RTOS有众多种,用得最火的是FreeRTOS,因为它即使用于商业途径,也是开源免费的:其次是就是uCOS-II和uCOS-III.uCOS-II用于商业途径是需要付费的,但是对于学习研究却是免费的. ...

  8. STM32工作笔记0014---认识emWin图形设计框架

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 emWin.ucGUI.STemWin三者之间的关系: 1.三者都是Segger 公司的产品. 2 ...

  9. 【stm32】delay详解

    1 首先看函数: 1.1 当使用ucos时才有以下部分: 主要实现宏定义与基本函数定义. #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定义了,说明要支持OS了 ...

  10. STM32一键连接JQ8400-FLJQ8900语音模块程序分析

    最近优化了一个项目    需要使用 语音模块     于是采用了JQ8400 语音模块 具体的数据手册  淘宝卖家提供 主要的是一线数据发送的协议格式     由于前期使用了RT-Thread  给自 ...

最新文章

  1. 谷歌I/O大会3月对开发者开放
  2. ABAP屏幕上显示LIST的三种方法
  3. Java线程面试题 Top 50
  4. html5 content type,Content-Type一览
  5. 良好的开端是成功的第一步———构建程序
  6. 网页编码utf8 gb2312 gbk的区别
  7. Splay Tree伸展树
  8. MySQL系列教程(五)
  9. java不足位数补0
  10. 微信iOS卡顿监控系统
  11. 复变函数与积分变换---复数
  12. 分享轨迹平滑算法之滑动平均平滑(Moving Average, MA)MATLAB代码
  13. 开发者实践:为了“网课”不痛苦,在校生做出了自己在线教育系统
  14. python 海康威视ipc抓图
  15. 今日金融词汇--- 技术面分析
  16. aliyun-oss-01
  17. 《电力系统自动化》课程教学大纲
  18. Android 好看的搜索界面,大赞Animation
  19. Flex 4 皮肤设计资料
  20. ASJ系列智能电力继电器

热门文章

  1. lc电路在计算机中应用,LC电路的基础知识介绍
  2. 多因素分析模型解决方法_选择模型方法的8个决定因素
  3. modbus调试团结_教学团结? 为教育者免费提供丰富的课程资源
  4. Sql Server 时间格式转换
  5. cmd命令行中文显示乱码解决办法
  6. 最惨大学生,大学四年,啥也不会
  7. 《小强升职记》读后感
  8. MySQL:偏移量为 0x000000000ae000 的位置执行 读取 期间,操作系统已经向 SQL Server 返回了错误 21(设备未就绪。)。
  9. Java写文件的方式-二进制文件
  10. 赢在测试2:中国软件测试专家访谈录