《基于嵌入式实时操作系统的编程技术》笔记清单:第九章时间管理

《基于嵌入式实时操作系统的编程技术》笔记清单:第三章任务划分.
《基于嵌入式实时操作系统的编程技术》笔记清单:第四章任务设计.
《基于嵌入式实时操作系统的编程技术》笔记清单:第五章中断服务程序设计.
《基于嵌入式实时操作系统的编程技术》笔记清单:第六章行为同步.
《基于嵌入式实时操作系统的编程技术》笔记清单:第七章资源同步.
《基于嵌入式实时操作系统的编程技术》笔记清单:第八章数据通信.
《基于嵌入式实时操作系统的编程技术》笔记清单:第九章时间管理.
《基于嵌入式实时操作系统的编程技术》笔记清单:第十章采集任务设计.

前言

实时操作系统提供了若干时间管理服务函数,可以满足任务在运行过程中对时间管理的需要。在使用时间管理服务函数时,必须十分清楚一个事实:时间管理服务函数以系统节拍为处理单位,实际效果时间与希望时间是有误差的,最坏的情况下误差接近一个系统节拍。因此,时间管理服务函数只能在对时间精度不高的场合,或者时间间隔较长的场合。

本章笔记清单

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.题外话

短视频、短微博,信息碎片化,把人们的思维模式、思维形式和关注点都切断在几十秒甚至十几秒当中,长期如此“训练”,思维模式、视野会越来越局限在片段,缺乏处理复杂事物长链逻辑线的能力。容易纠缠、执着在细节里,丧失对事物全局的把握、整体的观照。往往“只见树木,不见森林”。

——转自水木然学社公众号文章《短视频流行背后:人类正在批量生产精神病!》

猜你喜欢

转载自blog.csdn.net/weixin_38956024/article/details/107294411