单片机工程经验 - 时间片

单片机时间片调度:实现多任务并行与优化
本文详细介绍了单片机中如何利用时间片实现多任务的调度。从简单的顺序执行到通过最大公约数优化任务间隔,再到引入硬件定时器避免程序执行时间带来的误差。同时,提出了一个简易的时间片框架,将计数放在中断中,程序放在主循环,以确保时间片准确且不影响其他中断。最后,讨论了时间片选择的重要性,强调其必须大于程序执行时间以防止中断冲突。

单片机工程经验 - 时间片

时间片

时间片很好理解,就是把一个任务分成若干个片段,每过一个时间节点就执行一个片段。在无操作系统的情况下,时间片可以非常有效的完成多个任务。它的本质是定时器的复用。

顺序执行

我们来考虑最简单的情况,一盏灯不断闪烁。最简单的方法就是先点亮一盏灯,等待500ms后熄灭,再等待500ms后点亮,如此往复不断循环,大多数的单片机教程里也是这么写的,因为这样很容易理解。

void mian()
{
   
   
	while(1)
	{
   
   
		open_led();
		delay(500);
		close_led();
		delay(500);
	}
}

这里的delay通常使用的是for循环的方法,因为单片机每次执行语句都需要一个时钟周期的时间,只要算好delay的时间需要多少个时间周期就可以准确的进行延时。

但是这里有个问题,因为在delay中需要一直执行空语句,它会一直霸占MCU,其他代码无法执行,多任务就无法进行。

多任务

如果此时我们需要一盏灯亮灭500ms,另一盏灯亮灭300ms该怎么实现?

其实很简单,我们先找到500和300的最大公约数,也就是100,然后只要delay一次就将计数值加一,这样只要知道计数值是不是就能知道过去了多少时间呢。

void mian()
{
   
   
	static unsigned int tick = 0
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝忧云枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值