单片机软件开发,实时系统和分时多任务,看完就懂

本文详细介绍了单片机软件开发中基于时间片的分时多任务管理,包括任务结构体定义、任务管理函数、定时器中断以及主循环中的任务调度。通过实例代码展示了如何实现任务的创建、统计运行时间和资源有效利用,适合初学者和入门开发者学习。
摘要由CSDN通过智能技术生成

单片机软件开发,实时系统和分时多任务,看完你就懂了

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///d4d59dcad53281ddc59cd64297f0fead.png

说明:

作者本人虽然岁数不小,但却是初入此行的新人,此篇文章只适合正在学习的准程序员,或初入行业的新人。当然如果有大牛路过,欢迎指点。

单片机软件开发,如果不用实时系统的话,那么“基于时间片的分时多任务”一定是会用到的。“时间片的分时多任务”看似简单,其实还是有几个方面需要注意的,以下我就根据自己的了解和实际应用经验来讲解一下相关代码。虽然我没有把完整的代码贴出来,但以下的代码块都是从实际的应用中摘出来的。意思就是贴出的代码块都是经过实际验证的。

一。首先简单介绍一下“基于时间片的分时多任务”。顾名思义“时间片”就是把单片机执行的函数或任务,按划定的时间片来执行。比如一个工程有按键,有触摸屏通讯,有LED运行指示。可以把他们三个分别当成3个任务,并且每个任务的运行间隔时间也可以自定义。比如按键扫描一般 10ms执行一次就行了。通讯 20ms执行一次。运行指示可以 250ms执行一次。这样就在一个主循环里有了3个任务,而且每个任务执行的时间间隔都不一样,可以充分利用CPU硬件资源,让CPU的资源尽量少浪费在无用的循环里。

那么这个时间是依据什么来的呢?我们一般是用一个定时器,每1ms中断一次,也就是产生一个任务节拍。(下文提到的所有任务节拍都是1ms)每次中断都有一个或多个全局变量加1,根据这个全局变量的值我们就可以知道任务延时情况。

/*==================================更改分割线=======================================之前这篇笔记写得有些杂乱,我自己都看不下去。在这五一小长假的最后一天我就收拾起自己的懒散,重新认真编辑一次,其中的代码部分也是优化过了的。任务除了基本的分时运行功能外,还可以在运行中暂停或恢复某个任务,以及统计某个任务的运行时间,以ms为单位。*/

进入正题!!!

一。介绍任务。

//代码文件 task.h#define TASK_MAX 10u //最大任务数量#define TASK_BEAT_MS 1u //任务节拍时间(ms)#define TASK_BATE_MAX (u32)40050 //最大任务节拍//任务函数类型typedefvoid(*TASK)(void*p_arg);

//任务结构体typedefstruct{

s8id;//任务IDu8RunTime;//任务运行时间统计(1统计0不统计)TASKTaskAddr;//任务函数地址void*p_arg;//任务参数vu32TaskBeat;//任务节拍u32TaskDelay;//延迟节拍}TaskStruct;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值