《基于嵌入式实时操作系统的编程技术》笔记清单:第九章时间管理
《基于嵌入式实时操作系统的编程技术》笔记清单:第三章任务划分.
《基于嵌入式实时操作系统的编程技术》笔记清单:第四章任务设计.
《基于嵌入式实时操作系统的编程技术》笔记清单:第五章中断服务程序设计.
《基于嵌入式实时操作系统的编程技术》笔记清单:第六章行为同步.
《基于嵌入式实时操作系统的编程技术》笔记清单:第七章资源同步.
《基于嵌入式实时操作系统的编程技术》笔记清单:第八章数据通信.
《基于嵌入式实时操作系统的编程技术》笔记清单:第九章时间管理.
《基于嵌入式实时操作系统的编程技术》笔记清单:第十章采集任务设计.
前言
实时操作系统提供了若干时间管理服务函数,可以满足任务在运行过程中对时间管理的需要。在使用时间管理服务函数时,必须十分清楚一个事实:时间管理服务函数以系统节拍为处理单位,实际效果时间与希望时间是有误差的,最坏的情况下误差接近一个系统节拍。因此,时间管理服务函数只能在对时间精度不高的场合,或者时间间隔较长的场合。
本章笔记清单
1. 时间管理服务函数特点
1)以系统节拍为处理单位;
2)最坏情况下,误差接近一个系统节拍;
3)应用于对时间精度不高,或时间间隔较长的场合。
2. 时间服务函数用于控制任务的执行周期
void Mytask(void *pdata)
{
while(1)
{
任务实体代码;
调用系统延时函数;
}
}
3.时间服务函数用于控制任务的运行节奏
void Mytask(void *pdata)
{
while(1)
{
获取时间函数;
第一部分操作代码;
延时;
第二部分操作代码;
延时;
第三部分操作代码;
....
}
}
4. 状态查询
while(1){
...
for( ; ; ){
关中断;
temp = count;
开中断;
if(temp 不小于10?) break;
OSTimeDly(1);
}
...
}
1)在查询过程中插入延时函数,不断地将PCU交出来,供其它任务使用。
2)等待按键释放,也是查询操作。
3)只需要某种状态的出现不能主动触发信号,就采用查询方法获取信息。
4)相邻两次查询之间的间隔可根据查询精度决定,查询对象变化快,两次查询的时间间隔就越短。
5)如果某种状态必然在短时间(微妙级)发生,不必插入延时。(如:等待A/D转换)
5. 终止周期性任务
1)用超时参数终止周期性任务;
void Mytask(void *pdata)
{
...
while(1)
{
任务实体;
OSSemPend(Key_semp, 20, &err); //等待20周期为20个时钟节拍(即任务周期)
if (err == OS_NO_ERR) break; //如果成功获得键盘信号量,则退出循环
}
OSTaskDel(OS_PRIO_SLEF); //删除自身任务
}
//成功获取键盘信号量,则退出循环。
2)场合:生成一个采样收集任务。采样收集任务,循环查询按键是否释放信号量,直到按键释放了信号,任务才算完成,最后删除任务采集任务。
3)调用“有超时限制得等待信号量(或消息)”的系统函数可以实现双重目的,在没有按时获得信号量(或消息)时,起到控制运行周期的作用(与OSTimeDly()效果相同);当成功获得信号量(或消息)时,可以及时退出循环,终止周期性任务。
6.题外话
短视频、短微博,信息碎片化,把人们的思维模式、思维形式和关注点都切断在几十秒甚至十几秒当中,长期如此“训练”,思维模式、视野会越来越局限在片段,缺乏处理复杂事物长链逻辑线的能力。容易纠缠、执着在细节里,丧失对事物全局的把握、整体的观照。往往“只见树木,不见森林”。
——转自水木然学社公众号文章《短视频流行背后:人类正在批量生产精神病!》
本文地址:https://blog.csdn.net/weixin_38956024/article/details/107294411