在单片机上利用一个定时器和二行代码轻轻松松实现多任务的运行(基于时间片)

本文介绍了如何在STM32单片机上使用滴答定时器和时间片机制实现多任务运行。通过初始化定时器、定义全局计数变量和中断处理,结合宏定义来判断任务执行时机。这种方法适用于任务运行时间较短且不包含延时的情况,对于更复杂的任务,可以考虑引入操作系统。
摘要由CSDN通过智能技术生成

因为我常用的是stm32F4系列单片机,所以采用其滴答定时器作为时基定时器(如果你使用的单片机是别款,只要单片机上有个定时器都可以,另外也得有中断处理函数)(另外如果用的是stm32等单片机,片上具有滴答定时器,可以省掉1、2步骤,在HAL库下直接用HAL_GetTick()代替GetCount()即可,其他类似)

1.首先初始化定时器,本人一般设置定时时间为1ms,这个可以是具体情况而定。

2.定义一个全局变量,假设命名为Count,并初始化为0;然后再定时器相关的中断处理函数中进行Count++。

static long long Count = 0;
//定时器初始化,并设定定时时间和中断使能
void TimInit(){
    ...
}
//其相关的中断处理函数
void InterHandle(void){
    ....
    Count ++;
}
//防止外界修改Count
long long GetCount(void){
    return Count;
}

3.在相关的头文件里定义俩个宏,第一行代码中的(num)表示任务上一次的运行时刻,然后通过全局的时钟数减去上一次的运行时刻,再与设定好的时间(ms)进行比较,如果大于等于则表示时间已到可以进行此任务,否则不能进行。当可以进行该任务时,会有num=GetCount()的动作,表示得到当前时间,方便下次判断下次进此任务。举个例子:现在12点整,定个明天12点整的闹钟,每天循环,然后它会显示还有24个小时,然后等它到每天12点就响,也就是进闹钟任

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值