nu-lb-nuc140板子 ucosii 2.86 源码分析(四)

μCOS定时器与任务调度详解
本文深入探讨μCOS实时操作系统中定时器tick和idle任务的工作机制,包括任务优先级设置、任务调度流程及OSRunning标志的含义。通过解析OSInit()和OSStart()函数,阐述了OS_TaskIdle()任务的创建过程,以及如何利用OSRdyGrp和OSRdyTbl[]确定最高优先级任务。

参考书籍:
<嵌入式实时操作系统μC OS原理与实践 [卢有亮编著].pdf> page47

关于 定时器 tick 和 idle任务

任务第1次运行过程中,
先运行 Task1,然后切换到 Task2 ,然后切换到Task3.
这个时候3个任务都在 OSTimeDly中,这个时候,进入idle任务。
来了 tick中断之后,若干次tick中断之后,Task1首先从Dly休眠中唤醒。
在这里插入图片描述

IDLE TASK

void OS_TaskIdle (void *p_arg)
在这里插入图片描述
在这里插入图片描述

OSRunning 什么时候设置为1的 ?

首先执行:OSInit( )

然后执行:OSStart( )
在OSStart( ) 中 调用 OSStartHighRdy()
在如下代码的地方,设置OSRunning =1
在这里插入图片描述

OS_TaskIdle()任务是什么时候创建的 ?

OSInit()函数中,
在这里插入图片描述

任务结构体:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

OSTCBTbl[ ] 解析
#define OS_MAX_TASKS             20    /* Max. number of tasks in your application, MUST be >= 2       */
OS_EXT  OS_TCB            OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS];   /* Table of TCBs                  */

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

OSTimeTick[ ] 解析

在这里插入图片描述

OSRdyGrp 和 OSRdyTbl[ ]

OSTCBList 链表中的任务是 当前系统中 存在的任务块,这个任务可能是休眠的,等待信号的,等状态。

OSRdyGrp 任务准备运行组
OSRdyTbl[ ] 任务准备运行表

#define OS_LOWEST_PRIO           63    /* Defines the lowest priority that can be assigned ...         */

#if OS_LOWEST_PRIO <= 63
OS_EXT  INT8U             OSRdyGrp;                        /* Ready list group                         */
OS_EXT  INT8U             OSRdyTbl[OS_RDY_TBL_SIZE];       /* Table of tasks which are ready to run    */
#endif

#if OS_LOWEST_PRIO <= 63
#define  OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1)   /* Size of event table                         */
#define  OS_RDY_TBL_SIZE   ((OS_LOWEST_PRIO) / 8 + 1)   /* Size of ready table                         */
#endif

在OS_TCBInit( )中:
在这里插入图片描述
优先级数字 0 到63 ,
按照8个一组排列。0 – 7 是第0组,8 – 15 是第1组,16 — 23 是第2组。
具体的编号是:
x表示组内的某个成员,取值为0–7 ----- 对应的是 OSRdyTbl[]某个成员的某个位
Y表示属于某个组,取值是 63/8 ---- 对应的是 OSRdyGrp 某个位

比如 优先级13,对应的 x = 5 y=1,表示他是第1组的,第5个成员。
在这里插入图片描述
在这里插入图片描述
就绪的任务,在OSRdyTbl[ ]某个成员的某个位,设置为1.
在这里插入图片描述
在这里插入图片描述

如何查找最高优先级的任务?

在这里插入图片描述
在这里插入图片描述

    INT8U   y;
    y             = OSUnMapTbl[OSRdyGrp];
    OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);

在这里插入图片描述
在这里插入图片描述
oSUnMapTbl[256]这个数组的作用是确定。
从0到255,这256个数字,用二进制表示的时候,从bit0 到bit7,哪一位最先是1。
比如:

0 : 0000 0000 : bit 0
1:0000 0001 :bit 0
2:0000 0010 :bit 1
3: 0000 0011 : bit 0
4: 0000 0100 :bit 2
5: 0000 0101 : bit 0
6: 0000 0110 : bit 1
7: 0000 0111 : bit 0
8: 0000 1000 : bit 3
… …
252: 1111 1100 : bit 2
253: 1111 1101 : bit 0
254: 1111 1110 : bit 1
255: 1111 1111 : bit 0

在这里插入图片描述
优先级是 按照 位的顺序 递增的

数字越小 ,优先级越大。

(稍后补充)

## 软件功能详细介绍 1. **文本片段管理**:可以添加、编辑、删除常用文本片段,方便快速调用 2. **分组管理**:支持创建多个分组,不同类型的文本片段可以分类存储 3. **热键绑定**:为每个文本片段绑定自定义热键,实现一键粘贴 4. **窗口置顶**:支持窗口置顶功能,方便在其他应用程序上直接使用 5. **自动隐藏**:可以设置自动隐藏,减少桌面占用空间 6. **数据持久化**:所有配置和文本片段会自动保存,下次启动时自动加载 ## 软件使用技巧说明 1. **快速添加文本**:在文本输入框中输入内容后,点击"添加内容"按钮即可快速添加 2. **批量管理**:可以同时编辑多个文本片段,提高管理效率 3. **热键冲突处理**:如果设置的热键与系统或其他软件冲突,会自动提示 4. **分组切换**:使用分组按钮可以快速切换不同类别的文本片段 5. **文本格式化**:支持在文本片段中使用换行符和制表符等格式 ## 软件操作方法指南 1. **启动软件**:双击"大飞哥软件自习室——快捷粘贴工具.exe"文件即可启动 2. **添加文本片段**: - 在主界面的文本输入框中输入要保存的内容 - 点击"添加内容"按钮 - 在弹出的对话框中设置热键和分组 - 点击"确定"保存 3. **使用热键粘贴**: - 确保软件处于运行状态 - 在需要粘贴的位置按下设置的热键 - 文本片段会自动粘贴到当前位置 4. **编辑文本片段**: - 选中要编辑的文本片段 - 点击"编辑"按钮 - 修改内容或热键设置 - 点击"确定"保存修改 5. **删除文本片段**: - 选中要删除的文本片段 - 点击"删除"按钮 - 在确认对话框中点击"确定"即可删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值