目的
学习和理解实时操作系统
声明
习题答案是笔者基于相关书籍和网上内容自己理解的,有不对或疑问的地方大家一起沟通
硬件平台
Arm-CortexM3内核
四. uC/OS-II的系统时钟是如何实现的?在时钟节拍服务中做了什么工作?
Q1:首先需要一个硬件定时器,产生定时节拍信号,其作为系统时钟。每个信号发生时,会在定时中断中运行一次时钟节拍服务程序。
Q2:
① 记录节拍数
② 遍历任务控制块(除了空闲任务)后,对应任务的延时变量自减1
③ 任务延时时间到,清挂起状态(信号量,邮箱,队列,互斥信号量,事件标记);同时将将该 任务控制块对应状态设置为运行态
注:
最终目的:了解每个任务的延时状态,使得其中到达延时时限的任务处于就绪态
五. 如何在中断程序中激活一个任务
通过设置一个全局变量使得该任务和中断处理函数关联起来即可
六.说明延时函数OSTimeDly与OSTimeDlyHMSM的区别
相同点:
① 二者都是延时函数,可以实现任务的延时需求,实现任务释放CPU资源的需求等。
② 设置延时节拍数据,使得该任务退出就绪态
③ 都可以通过在其它任务中调用OSTimeDlyResume函数进行终止延时
不同点:
前者延时但是时钟节拍;后者是ms。使用后者的时候,需要将输入的时间转换成时钟节拍数。