单片机程序架构(一)时间片轮询

时间片轮询方法


方法一:

void TimerX_handler(void)
{
    ms_cnt++;
}
初始化设置该定时器x毫秒中断一次,即ms_cnt作为一个毫秒计时器。

main(void)
{
    while(1)
    {
         if(ms_cnt%x==0)
         {
             task1();
         }
         if(ms_cnt%y==0)
         {
             task2();
         }
    }
}
主循环中,每隔x毫秒执行一次task1,每隔y毫秒执行一次task2。




方法二:


typedef _TASK_STRUCT
{
<span style="white-space:pre">	</span>u32 time_cnt;
<span style="white-space:pre">	</span>u8 run_flag;
}TASK;


TASK task1 = {x,0};
TASK task2 = {y,0};
定义任务结构体,每隔x时间置位task1执行标志位task1.run_flag,在main loop中扫描并执行;同理task2。

void TimerX_handler(void)
{
	if(task1.run_flag == 0)
		{
			task1.time_cnt--;
		}
	if(task1.time_cnt == 0)
		{
			task1.run_flag = 1;
			task1.time_cnt = x;
		}

	if(task2.run_flag == 0)
		{
			task2.time_cnt--;
		}
	if(task2.time_cnt == 0)
		{
			task2.run_flag = 1;
			task2.time_cnt = y;
		}	
}

void main(void)
{
	while(1)
		{
			if(task1.run_flag == 1)
				{
					task1();
					task1.run_flag = 0;
				}
		
			if(task2.run_flag == 1)
				{
					task2();
					task2.run_flag = 0;
				}
		}
}


(附:待完善)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值