UCOSiii 杂谈【1】

news/2024/11/7 22:47:22/
【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只支持同时等待多个信号量和消息队列

http://www.ppmy.cn/news/147243.html

相关文章

Vector Scope

下面以PicoScope 6403E-034为例说明 1.Scope 硬件结构介绍 前面板: 最多支持捕获2路CAN/CANFD/FlexRay总线,或者4路LIN总线 后面板: Scope Bus Probe 300 Mhz 2.Option Scope使用条件 前提条件1:购买CANoe/CANalyzer Option Sc…

UCOS

第一篇 UCOS介绍 第一篇 UCOS介绍 这个大家都知道。呵呵。考虑到咱们学习的完整性还是在这里唠叨一下。让大家再熟悉一下。高手们忍耐一下吧! uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核&#xf…

UC/OS-III 信号量

信号量 一、信号量二、二值信号量2.1 、二值信号量的应用场景2.2、二值信号量的运作机制 三、计数信号量3.1、计数信号量的运作机制 四、信号量创建流程五、信号量接口函数1、创建信号量函数 OSSemCreate()2、信号量删除函数 OSSemDel()3、信号量释放函数 OSSemPost()4、信号量…

UCOS-III

一、UCOSIII 简介 UCOSIII 是一个可裁剪、可固化、可剥夺的多任务系统,没有任务数目的限制,是 UCOS 的第三代内核,UCOSIII 有以下几个重要的特性: 可剥夺多任务管理:UCOSIII 和 UCOSII 一样都属于可剥夺的多任务内核…

手机通讯原理的工作原理

一、手机的工作原理: 一般来说,我们普通用户只要学会如何使用好手机就可以了,对于其具体的工作原理不必仔细深究;然而在使用手机的过程中,由于各种因素的影响,手机不可避免地要出现故障&#xff0c…

UCOSII

文章目录 UCOSII提出者是什么开发及特性 UCOSII结构UCOSII并发 泉水 UCOSII 提出者 UCOSII的前身是UCOS,最早出自于1992 年美国嵌入式系统专家Jean J.Labrosse 在《嵌入式系统编程》杂志的5月和6月刊上刊登的文章连载,并把UCOS 的源码发布在该杂志的 …

剑指 Offer 17. 打印从1到最大的n位数解题思路

文章目录 题目解题思路 题目 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n 1 输出: [1,2,3,4,5,6,7,8,9] 说明: 用返回一个整数列表来代替打印 n 为正…

如何将Linux命令默认的提示结果不显示或者不输出?以及在脚本中如何替代Ctrl + C等关闭命令的终端窗口?

一、问题描述: 当我们想要获取命令的输出结果时,有时候命令会带出一些默认的提示信息输出到屏幕上,如何过滤掉这个提示信息呢? 例如,telnet命令退出时会默认提示“Connection closed by foreign host.” 例如&#x…