【UCOSIII内核学习】
UCOSIII中将已经就绪的任务放到任务就绪表里:优先级映射表和就绪任务列表
在优先级映射表中,bit31代表优先级0,因为这样通过计算前导零CLZ来找到最高优
先级任务。

在就绪任务列表中,通过数组OSRdyList[]来管理相同的或者不同的优先级下的各个
任务,譬如OSRdyList[4]就是管理优先级4下面的各个任务,这些任务间通过OSTCB
控制块的前后指针连接,形成链表。

UCOSIII自带的五个系统任务,空闲任务,时钟节拍任务,统计任务,定时任务,
中断服务管理任务。

UCOSIII任务调度:可剥夺型调度(任务级调度器和中断级调度器),时间片轮转调
度(调度在多个任务拥有相同的优先级下,可以设置单个时间片长度,也可以设置跳
过本次时间片调度)。

任务API
OSTaskDel()虽然允许用户自己来删除不想运行的任务,但是还是应该避免
这种操作,因为若任务A占有信号量X,删除A后,不释放X,则其他任务会因为无法得
到X而出现奇怪的情况。

OSTaskSuspend()和OSTaskResume()可以多次使用,但是次数要匹配才可以使得
一个任务成功从挂起中恢复。

【内部任务】
FreeRTOS中优先级0最悠闲,UCOS中MAX-1最悠闲
空闲任务优先级为MAX-1,优先级可以直接设计成 0~MAX-1

时钟节拍任务是为了跟踪正在延时的任务,任务优先级要略高(紧急)一些,
以及在指定时间内等待某个内核对象的任务。通过post让等待任务就绪,用于
任务同步。

统计任务用来统计CPU使用率和任务堆栈使用情况

定时任务
任务优先级默认为2。在OSInit()中调用OS_TmrInit()来创建定时任务。

中断服务管理函数,优先级最高,为0。负责“延迟”在中断中调用系
统post服务函数的行为。避免了在中断中做“把任务从等待列表中删除”
,“把任务放入就绪表”等耗时行为。(注:ucos通过关闭中断和任务
调度器上锁两种方式管理临界区代码)

空闲任务钩子函数hook,其中切记不能调用任何会使得钩子函数进入等待态的代码,
因为那样CPU就会无所事事。

【中断管理和时间管理】
直接发布和延迟发布:

直接发布模式下,UCOS通过关闭中断来保护临界段
延迟发布模式下,UCOS通过锁定任务调度器来保护临界段
延迟发布模式可以有效降低关闭中断的时间。
在临界段中,有两种保护代码不受干扰的方式,关闭中断和给任务调度器上锁

延时函数有 相对延时,周期延时,绝对延时
相对延时就是简单延时
在绝对延时中,任务总是按照一定的频率阻塞和唤醒,因为延时和唤醒都被定死了

【软件定时器】
在创建软件定时器的时候,周期延时中,dly是第一次带延迟的延时时间,period是
后面的周期延时值,理论上dly应该比period大才对。(其实也不一定,谁大谁小都
可以)
case OS_TMR_STATE_STOPPED:                          
     if (p_tmr->Opt == OS_OPT_TMR_PERIODIC) 
{
                 if (p_tmr->Dly == 0u) 
{
                     remain = p_tmr->Period;
                } else 
{
                         remain = p_tmr->Dly;
                        }
         } else 
{
                    remain = p_tmr->Dly;
                 }
//dly就是周期定时的第一次带有延迟的延时值,以后都是period定时值
在软件定时的回调函数中,不允许产生使得回调函数进入堵塞或者被删除。

【任务内嵌信号量】就是FreeRTOS的任务通知TaskNotification

【同时等待多个内核对象】
UCOSlll只支持同时等待多个信号量和消息队列

UCOSiii 杂谈【1】相关推荐

  1. 【杂谈】GAN最成功的3个商业化落地领域,你是否了解过?

    2015年的时候笔者开始关注GAN,公众号早期的文章中就有GAN的综述,这些年GAN的相关研究也是持续井喷.这一次咱们学术上的研究撇开不讲,这么多年过去了,GAN有哪些最成功的商业化落地领域? 图像生 ...

  2. 「杂谈」同学聚会最悲哀的事情

    「杂谈」同学聚会最悲哀的事情 大学毕业至今近乎20年了,期间参加过几次规模或大或小的同学聚会,有高中同学会聚会,初中同学聚会,也有大学同学聚会.这些同学聚会上,笔者发现其实体验都还很不错,基本没有发现 ...

  3. 「杂谈」计算机视觉人脸图像的十几个大的应用方向,你懂了几分?

    2020-02-16 13:45:50 文/编辑 | 言有三 人脸图像属于最早被研究的一类图像,也是计算机视觉领域中应用最广泛的一类图像,可以说掌握好人脸算法,基本就玩转了计算机视觉领域.在经历了几十 ...

  4. 杂篇-从整理文件发起的杂谈[-File-]

    有些东西很简单,简单到你不想去想,比如:为什么天是蓝的?--局限物语 零.前言 说一下本篇的初衷: coder盘作为工作盘有点乱,想整理一下 也想寻求一个方便管理工程的点子,既然File类玩的滚瓜烂熟 ...

  5. 基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程(转)...

    源:基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程 转载于:https://www.cnblogs.com/LittleTig ...

  6. Android杂谈---获取手机屏幕大小

    Android杂谈---获取手机屏幕大小 SurfaceView简单例子 玩转Android---UI篇---ZoomControls放大缩小图片 更多相关推荐 这里总结下android中关于手机屏幕 ...

  7. 【杂谈】野生在左 科班在右——数据结构学习誓师贴

    [杂谈]野生在左 科班在右--数据结构学习誓师贴 一. 科班 Vs 野生 这个老生常谈的问题让很多野生码农觉得不公平,在一次次面试中因为学历和那些工作中根本就用不到的知识虐的一脸懵逼,然后除了抱怨什么 ...

  8. 数据库内核杂谈 - 一小时实现一个基本功能的数据库

    我们摒弃直接介绍数据库内核各个模块的思路,而是从应用开发者的角度出发,来看实现一个数据库需要哪些基本功能,然后把这些功能细分成最小的模块再手把手一起实现. 对与应用开发者而言,一个数据库需要哪些必要的 ...

  9. Effective C++ --8 定制new和delete 9杂谈讨论

    上一篇Effective C++ --7 模板与泛型编程 Effective C++ --8 定制new和delete 49.了解new-handler的行为 (1)set_new_handler允许 ...

最新文章

  1. centos mysql安装_mysql yum源安装
  2. Bonjour/Zeroconf with Arduino
  3. cmd - 使用curl命令的注意点
  4. WinForm 清空界面控件值的小技巧
  5. 【机器学习】opencv-摄像头中的人脸采集
  6. LeetCode 1353. 最多可以参加的会议数目(排序+贪心,优先队列,难)
  7. 开课吧的python的证书_Python在生活中的几个实用场景,简直太厉害了
  8. 数三角形(51Nod-2497)
  9. 《天天数学》连载32:二月一日
  10. tomcat可以直接起jar吗_天津买房可以直接落户吗
  11. 计算机语言缩写 dos,dos是什么意思 dos缩写中英全称是什么
  12. java毕业设计学生学习评价系统Mybatis+系统+数据库+调试部署
  13. GIS系列专题(3):缓冲区算法对比研究(Buffer Algorithm),类似刀具补偿
  14. FileInputStream.read()返回int类型原因
  15. Flink部署——Debugging(开发实用,建议收藏)
  16. VIJOS-P1152 肥猫的游戏
  17. vue中浏览器全屏和退出全屏
  18. shell脚本获取cpu、内存、磁盘使用率
  19. 操作系统底层工作原理
  20. 学习笔记(28):MATLAB基础入门课程-乘方运算

热门文章

  1. 创业不要找这些人合作
  2. 在list集合指定位置添加元素
  3. 从程序员到项目经理:不要试图和下属做朋友
  4. linux查看服务端口号命令
  5. 1.(2)数据结构之链表的定义,链表和数组的区别
  6. 测试Istio 1.6 Service Mesh引入虚拟机Workload (笔记与感悟)
  7. 关于谷歌浏览器无法卸载或无法更新的解决办法
  8. Laravel Excel文件模板导出
  9. uniApp录音后上传音频
  10. 高手进阶必读:Linux内核的同步机制