单片机遇到需要同时处理的多个任务怎么办?

张天承


单片机可以按分时、顺序、中断的方法处理多个任务

程序是非常抽象的,程序质量的好与差直接影响到运行的效果。我们用单片机设计电子产品时,同时运行多个任务是很正常的。单片机是按顺序执行指令的,所以,主程序也是按着顺序从头到底的运行的。以C语言写的单片机程序为例,一般以main()作为主函数,利用while(1)不断循环要执行的任务程序。在实时性要求不同的应用场合,顺序运行就可以了,实时性要求很高的任务一般用中断来处理,如果想平衡各个任务的运行时间,可以分时处理。

中断处理实时性高任务

中断可以理解为中途打断,比如你正在工作,突然领导来电话了,当你认为领导电话比较重要的时候,就可以先保存正在进行的工作进度,接听领导电话,然后再接着你的工作。单片机程序也是一样的。高优级的任务可以设置为中断,比如按键输入中断或者串口接收中断。以串口接收中断为例,假如单片机配置了串口接收中断,当串口接收到数据时,主程序就会被打断,保护现场数据后马上跳到串口接收中断程序,串口接收中断程序处理完成后,再返回主程序接着运行。

分时处理多个任务

可以用分时的方案平衡各个任务的处理时间,比如,我们可以引入一个计数器i,假如有5个任务,可以让i在0~4之不断循环,当i=0时执行任务1,当i=1时执行任务2,当i=3时执行任务4,当i=4时执行任务5就可以了。

当然,你还可以用定时器中断做一个计时器,0~1ms时运行任务1,1~2ms时运行任务2,2~3ms时运行任务3,3~4ms时运行任务4,4~5ms时运行任务5。如果有更高的要求的话,还要以用到嵌入式操作系统了,比如FreeRTOS、uCos。

欢迎关注@电子产品设计方案,一起享受分享与学习的乐趣!关注我,成为朋友,一起交流一起学习

  • 记得点赞和评论哦!非常感谢!

电子产品设计方案


首先、单片机多任务处理方案有哪些?

1、采用实时操作系统rtos

也是我们所说的实时操作系统,rtos本身已经实现了多任务调度算法,我们不在关心如何调度的问题,我们只需要根据rtos的api来创建多任务即可。常见的rtos有freertos,uc/OS,华为liteOS,t-thread等等。

2、采用有限状态机(State Machine)

根据维基百科上的定义,有限状态机(finite-state machine, FSM,简称状态机)是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。为了理解这句话,假设自己还有三天就要考试,这时候就要进入紧张的备考状态,将空闲时间用在复习上。但是,为了保证足够的精力,小睡一会儿也是十分有必要的。那么,什么时候复习,什么时候睡觉呢?可以这样描述:
在复习的时候:
如果 感到瞌睡,则 睡觉
如果 没有感觉到瞌睡,则 继续复习
在小睡的时候:
如果 感觉不再瞌睡,则 开始复习
如果 感觉依旧瞌睡,则 继续睡觉
也可通过一幅简单的示意图(也叫「状态转移图」)表示出来:

在单片机程序设计中,如果一个系统需要处理一系列连续发生的任务,或在不同的模式下对输入进行不同的处理,常常使用有限状态机实现。例如测量、监测、控制等控制逻辑型应用。

其次、如何选择单片机多任务调度方案

和rtos相比,状态机占用的系统资源少,省去了系统调度定时器,没有rtos占用的内存也少了,但是需要程序人员来完成多任务调度。

从上面可以看出,如果单片机资源很有限,多任务逻辑又比较简单,建议选择状态机方法。如果多任务很复杂,功能比较多,单片机功能比较强,rtos占用的资源可以忽略不计,那就可以考虑采用rtos来完成。采用rtos可以比较容易的实现模块化设计。但是rtos需要注意的是多任务间的优先级和多任务间的通信问题。

最后、单片机多任务如何选择?

对于大部分编程来说其实一般的状态机就够了,小编也曾经十分推崇rtos,但是到后来发现,其实越是逻辑简单,程序越是容易编写,出错的概率越小。大道至简,小编现在大部分程序都是裸奔了,当然小编自创的异步编程也是相当的便利。你是如何处理单片机多任务的呢,欢迎留言讨论!


跟我学单片机


单片机遇到需要同时处理多个任务的时候怎么办?这个时候就需要用到中断系统了。中断是处理多任务操作的首选。

当你在根据任务要求规划单片机程序设计时,需要规划好哪些任务需要优先处理,哪些可以次要处理,分配中断优先级即可。



单片机是单个核心(包括一个运算器、一个控制器)的一种芯片,执行指令是顺序执行,一个指令一个指令的读取计算执行,他不可能同时处理其他指令。所以说单片机的多任务处理就是指的中断处理。

任务处理程序根据中断产生的优先级按高到低依次处理不同的任务,完成相应的动作或功能,以达到我们所需要的功能。



由于单片机的处理速度很快,所以执行中断任务的速度也是很快完成的,这样看起来就好像是同时处理多任务了,所有的功能都实现了。


工控电子爱好者


单片机只有一个CPU,一次只能执行一条指令,要处理多任务,相当于多个任务同时执行,只有靠分时。

如果没有实时操作系统,自己做多任务处理很难的。

如果是采集通信数据处理输入输出这样的常规任务,可以采用中断方式,中断服务程序处理实时任务,分析计算等任务放入主程序中。

多任务协调,可用状态自动机模型处理。


散居猎人


1、如果任务不是很多的业务场景,可以通过搭建一个简单的时间片调度框架来处理。比如一个任务采集adc数据、一个任务处理数据,一个任务串口通信。你可以用一个定时器设定时间,每个任务分配一个固定的时间片,比如2ms,运行完毕就跳转到下一个任务运行,不断循环,大概思路就这样,比较简单的场景足以应付了,如果需要详细的设计过程可以关注我,我的文章会详细讲解如何设计这样一个系统。

2、对于场景比较复杂的情况,例如需要任务间不断交换数据,就需要使用嵌入式操作系统了,单片机上用的多的无非是FreeRTOS、uCos等等,这几个操作系统大同小异,想要学习的同样可以看我之前的文章。


编程镇魔司


普通单片机内部只有一个核,只能顺序执行指令,同一时刻不能并行执行多条指令。

所谓的多任务,也是分时执行实现的。只是任务切换的非常快,人感觉不满任务的切换,像同时执行一样。

单片机要执行多任务,可以使用中断的方式,也可以使用操作系统,目前有一些适用于单片机的小型操作系统。


新能源BMS


跑RTOS


Addfh


单片机程序,一个基本的写法就是要人为构建时序。一般就是拿一个定时器以1ms或者5ms或者10ms持续中断,在中断里面进行计数,每个任务都配一个计数器,然后回主程序判断。这样程序才会写的仅仅有条。实时性高的用中断。


准备吃饭


上rtos,每个任务专心做自己的,不用考虑时间片轮转,rtos帮你调度。自己写累死了,大程序不能放中端服务里,任务多了需要手工设置时间片,麻烦死了。


野人帮帮主


单片机那么便宜,多弄几个,全都跑while(1)[呲牙]


分享到:


相關文章: