查看: 1308|回复: 5

uCOSii 学习心得及体会 [复制链接]

积分
337
帖子
57
发表于 2018-4-24 15:16:56 |显示全部楼层
关键词: 软件


1、首先大家可以看看任哲的《嵌入式实时操作系统uCOS-II原理及应用》  
这本书非常适合初学者学习 uCOS-ii

2、   请问:空闲任务和统计任务是否建立任务控制块呢?

任务块链表中是否存在空闲任务和统计任务的任务控制块呢?如果没有的话,操作系统如何调度呢?

标准答案:
在uCOS/ii内核中,调用OSInit()函数中会首先创建空闲任务,同时当用户“允许”统计任务时,也会接着创建统计任务。

因此任务块链表中存在空闲任务和统计任务的任务控制块。

3、   请问:为什么有了正在使用任务控制块链表OSTCBList和空闲任务控制块链表OSTCBFreeList,还要再定义OSTCBPrioTbl[]呢?

  标准答案:

数组OSTCBPrioTbl[]是以任务号为索引,里面保存的任务0到最大任务的任务控制块(TCB)的首地址,据此可以通过任务优先级号(任务号)快速找到当前任务在任务控制块中的首指针,而不必到任务控制块链表中一步一步的查找,加快访问时间。加快任务切换时间。      

4、   uCOS/II中,能够引起任务调度的系统函数有哪些?

         (1)、OSStart() uCOS/II启动
         (2)、OSTaskSuspend()挂起任务
         (3)、OSTaskResume()恢复任务
          OSTimeDly()/OSTimeDlyHMSM()、等待一个事件的发生(包括OSSemPend(), OSMutexPend, OSFlagPend, OSMboxPend(), OSQPend(),

5、   请问:既然有了任务就绪表INT8U OSRdyTbl[64],为什么还要再定义

INT8U  OSRdyGrp[8]呢?这样做的好处是什么?

标准答案:
OSRdyTbl[64]是任务就绪表,当表中 元素的值=1时,表示 任务处于就绪状态。 例如: OSRdyTbl[0]= 1,则表示:任务级别号=0的任务处于就绪状态,可以被调度器立即置于“运行态”。

为了节省查找时间(如果让操作系统每次查找处于就绪状态的最高优先级别的任务时,都从下标0开始查找,有点太浪费时间了),因此又专门定义了一个数组OSRdyGrp[8]。

其中:

(1)、OSRdyGrp[0]对应OSRdyTb[0]~OSRdyTbl[7]

(2)、OSRdyGrp[1]对应OSRdyTb[8]~OSRdyTbl[15]

(3)、OSRdyGrp[2]对应OSRdyTb[16]~OSRdyTbl[23]

这样,每次查找就绪表中最高优先级别的任务,就可以这样查找,首先查找依次从OSRdyGrp[0]~OSRdyGrp[7]开始查找不等于0的项,假如OSRdyGrp[1] >=1,则表示任务号8到任务号15有级别最高的就绪任务。

最终查找范围从0-64缩小到8-15。最终节省了查找时间。

  6、 请问:任务调度的核心是什么?

  标准答案:
在多任务操作系统中,命令CPU中止当前正在运行的任务转而去运行另外一个任务的工作叫做任务切换。

任务调度主要完成两个工作:   
(1)、在任务就绪表中查找具有最高优先级别的就绪任务。
(2)、实现任务切换

说的更明白一些,就是将找到的的最高优先级别的任务的“任务号”---> “当前任务的任务号OSPrioCur”;从OSTCBPrioTbl[]取出最高优先级别任务的任务控制块首地址---> “当前任务的任务控制块指针OSTCBCur”
       最后调用OS_TASK_SW()完成现场切换(即将CPU的寄存器信息保存到当前正运行任务的私栈中,然后从待运行的高优先级别的任务私栈中弹出原先保存寄存器信息到CPU)。


//-----------------------------------
     OSPrioCur 是全局变量,用于保存当前正在运行任务的任务号
     OSTCBCur是全局变量,用于指向当前正在运行任务的任务控制块首地址。


7、任务切换的关键:其实是堆栈的切换。

切换时:
            (1)、第一步:将当前CPU的SP寄存器的值保存到“待中止任务”的任务控制块中。即保存到结构体OS_TCB的OSTCBStkPtr成员中。   
            (2)、第二步:从“待运行任务”的任务控制块的OSTCBStkPtr成员中取出待运行任务的堆栈指针,然后送给CPU的SP寄存器。

信盈达靠技术打天下
以下课程可免费试听C语言电子PCBSTM32LinuxFPGA、JAVA、安卓等。
想学习的你和我联系预约就可以免费听课了。
余工Q 二八五九七八零二零三

xyd嵌入式 (离线)
积分
345
帖子
64
发表于 2018-5-13 17:27:38 |显示全部楼层
想要更快速的做相关的从开发的工作的话,更快的提升薪资参加一个嵌入式系统培训班是

不错的哦
高薪高起点就业
南京上海中心5月份新班火热预约中咨询Q2859780203
xyd嵌入式 (离线)
积分
345
帖子
64
发表于 2018-5-15 17:37:56 |显示全部楼层
学技术就找余老师
xyd嵌入式 (离线)
积分
345
帖子
64
发表于 2018-5-16 18:13:05 |显示全部楼层
目前嵌入式技术涉及到生活的方方面面,也是未来发展的趋势和潮流,有想要提升学习技术的同学联系余老师咨询啦
xyd521 (离线)
积分
536
帖子
168
发表于 2018-5-26 15:55:15 |显示全部楼层
xyd521 (离线)
积分
536
帖子
168
发表于 2018-5-29 15:04:10 |显示全部楼层


嵌入式技术核心课程:
第一阶段:C语言高级编程+项目;
第二阶段:ARM-Cortex-M4+项目;
第三阶段:Linux高级驱动+项目;
第四阶段:linux下C++.QT+项目
第五阶段:就业:长三角+珠三角
嵌入式系统就业班核心技术课程,高薪高起点就业做技术开发
更多咨询Q28~59~78~02~03
您需要登录后才可以发表评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
回顶部