张天承
单片机可以按分时、顺序、中断的方法处理多个任务
程序是非常抽象的,程序质量的好与差直接影响到运行的效果。我们用单片机设计电子产品时,同时运行多个任务是很正常的。单片机是按顺序执行指令的,所以,主程序也是按着顺序从头到底的运行的。以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)
在单片机程序设计中,如果一个系统需要处理一系列连续发生的任务,或在不同的模式下对输入进行不同的处理,常常使用有限状态机实现。例如测量、监测、控制等控制逻辑型应用。
其次、如何选择单片机多任务调度方案
和rtos相比,状态机占用的系统资源少,省去了系统调度定时器,没有rtos占用的内存也少了,但是需要程序人员来完成多任务调度。
从上面可以看出,如果单片机资源很有限,多任务逻辑又比较简单,建议选择状态机方法。如果多任务很复杂,功能比较多,单片机功能比较强,rtos占用的资源可以忽略不计,那就可以考虑采用rtos来完成。采用rtos可以比较容易的实现模块化设计。但是rtos需要注意的是多任务间的优先级和多任务间的通信问题。
最后、单片机多任务如何选择?
对于大部分编程来说其实一般的状态机就够了,小编也曾经十分推崇rtos,但是到后来发现,其实越是逻辑简单,程序越是容易编写,出错的概率越小。大道至简,小编现在大部分程序都是裸奔了,当然小编自创的异步编程也是相当的便利。你是如何处理单片机多任务的呢,欢迎留言讨论!
跟我学单片机
单片机遇到需要同时处理多个任务的时候怎么办?这个时候就需要用到中断系统了。中断是处理多任务操作的首选。
当你在根据任务要求规划单片机程序设计时,需要规划好哪些任务需要优先处理,哪些可以次要处理,分配中断优先级即可。
单片机是单个核心(包括一个运算器、一个控制器)的一种芯片,执行指令是顺序执行,一个指令一个指令的读取计算执行,他不可能同时处理其他指令。所以说单片机的多任务处理就是指的中断处理。
任务处理程序根据中断产生的优先级按高到低依次处理不同的任务,完成相应的动作或功能,以达到我们所需要的功能。
由于单片机的处理速度很快,所以执行中断任务的速度也是很快完成的,这样看起来就好像是同时处理多任务了,所有的功能都实现了。
工控电子爱好者
单片机只有一个CPU,一次只能执行一条指令,要处理多任务,相当于多个任务同时执行,只有靠分时。
如果没有实时操作系统,自己做多任务处理很难的。
如果是采集通信数据处理输入输出这样的常规任务,可以采用中断方式,中断服务程序处理实时任务,分析计算等任务放入主程序中。
多任务协调,可用状态自动机模型处理。
散居猎人
1、如果任务不是很多的业务场景,可以通过搭建一个简单的时间片调度框架来处理。比如一个任务采集adc数据、一个任务处理数据,一个任务串口通信。你可以用一个定时器设定时间,每个任务分配一个固定的时间片,比如2ms,运行完毕就跳转到下一个任务运行,不断循环,大概思路就这样,比较简单的场景足以应付了,如果需要详细的设计过程可以关注我,我的文章会详细讲解如何设计这样一个系统。
2、对于场景比较复杂的情况,例如需要任务间不断交换数据,就需要使用嵌入式操作系统了,单片机上用的多的无非是FreeRTOS、uCos等等,这几个操作系统大同小异,想要学习的同样可以看我之前的文章。
编程镇魔司
普通单片机内部只有一个核,只能顺序执行指令,同一时刻不能并行执行多条指令。
所谓的多任务,也是分时执行实现的。只是任务切换的非常快,人感觉不满任务的切换,像同时执行一样。
单片机要执行多任务,可以使用中断的方式,也可以使用操作系统,目前有一些适用于单片机的小型操作系统。
新能源BMS
跑RTOS
Addfh
单片机程序,一个基本的写法就是要人为构建时序。一般就是拿一个定时器以1ms或者5ms或者10ms持续中断,在中断里面进行计数,每个任务都配一个计数器,然后回主程序判断。这样程序才会写的仅仅有条。实时性高的用中断。
准备吃饭
上rtos,每个任务专心做自己的,不用考虑时间片轮转,rtos帮你调度。自己写累死了,大程序不能放中端服务里,任务多了需要手工设置时间片,麻烦死了。
野人帮帮主
单片机那么便宜,多弄几个,全都跑while(1)[呲牙]