单片机多任务处理方案

[复制链接]
8711|26
手机看帖
扫描二维码
随时随地手机跟帖
Clovee|  楼主 | 2019-11-11 19:55 | 显示全部楼层 |阅读模式
单片机多任务处理方案

      单片机只有一个CPU,一次只能执行一条指令,要处理多任务,相当于多个任务同时执行,只有靠分时。
  如果没有实时操作系统,自己做多任务处理很难的。
  如果是采集通信数据处理输入输出这样的常规任务,可以采用中断方式,中断服务程序处理实时任务,分析计算等任务放入主程序中。
  多任务协调,可用状态自动机模型处理。
  普通单片机内部只有一个核,只能顺序执行指令,同一时刻不能并行执行多条指令。
  所谓的多任务,也是分时执行实现的。只是任务切换的非常快,人感觉不满任务的切换,像同时执行一样。
  单片机要执行多任务,可以使用中断的方式,也可以使用操作系统,目前有一些适用于单片机的小型操作系统。
  单个核心不可能真正同时处理两个任务。一般来说,单片机主要是处理外设中断,产生中断的时候,主循环是停止执行的,实际上是分时处理。如果要处理多个任务,最简单的是用实时系统RTOS,创建多个任务即可,还可以定义优先级。如果要做到真正意义上的同时处理,就要用多核芯片。裸机系统可用片内定时器产生中断来切换任务。

  首先、单片机多任务处理方案有哪些?
  1、采用实时操作系统rtos
  也是我们所说的实时操作系统,rtos本身已经实现了多任务调度算法,我们不在关心如何调度的问题,我们只需要根据rtos的api来创建多任务即可。常见的rtos有freertos,uc/OS,华为liteOS,t-thread等等。
  2、采用有限状态机(State Machine)
  也可通过一幅简单的示意图(也叫「状态转移图」)表示出来:
o4YBAF1uGZSAUymCAABqsPQjJVc115_副本.jpg
  在单片机程序设计中,如果一个系统需要处理一系列连续发生的任务,或在不同的模式下对输入进行不同的处理,常常使用有限状态机实现。例如测量、监测、控制等控制逻辑型应用。
  其次、如何选择单片机多任务调度方案
  和rtos相比,状态机占用的系统资源少,省去了系统调度定时器,没有rtos占用的内存也少了,但是需要程序人员来完成多任务调度。
  从上面可以看出,如果单片机资源很有限,多任务逻辑又比较简单,建议选择状态机方法。如果多任务很复杂,功能比较多,单片机功能比较强,rtos占用的资源可以忽略不计,那就可以考虑采用rtos来完成。采用rtos可以比较容易的实现模块化设计。但是rtos需要注意的是多任务间的优先级和多任务间的通信问题。
pIYBAF1uGfaAPYpQAADoJnSe-p0855_副本.jpg

 


使用特权

评论回复
wooda| | 2019-11-12 17:55 | 显示全部楼层
嗯,很好的入门,
状态机形式实现的有一个叫cocoOS的,可以参考下.虽然有些限制,但发展的还算成熟.

另外microchip 的xc8库里面有个LONGJMP/SETJMP语句,感觉可以用来开发成比较强的RTOS系统.

使用特权

评论回复
mintspring| | 2019-11-14 00:17 | 显示全部楼层
非常不错的一种方法。

使用特权

评论回复
aspoke| | 2019-11-21 15:15 | 显示全部楼层
可以将不同任务放在定时器中断里  

使用特权

评论回复
232321122| | 2019-11-21 15:15 | 显示全部楼层
做一个任务比较合适   

使用特权

评论回复
ghuca| | 2019-11-21 15:15 | 显示全部楼层
单片机无法实现多线程任务   

使用特权

评论回复
soodesyt| | 2019-11-21 15:16 | 显示全部楼层
只能分时处理多任务   

使用特权

评论回复
mnynt121| | 2019-11-21 15:16 | 显示全部楼层
写一个操作系统   

使用特权

评论回复
plsbackup| | 2019-11-21 15:17 | 显示全部楼层
定时器做节拍,在定时中断里面搞个标志位   

使用特权

评论回复
kmzuaz| | 2019-11-21 15:17 | 显示全部楼层
如何实现多任务一起运行?   

使用特权

评论回复
qiufengsd| | 2019-11-21 15:17 | 显示全部楼层
比较广泛的有freeRTOS、ucLinux、uCOS-II等等   

使用特权

评论回复
quickman| | 2019-11-21 15:18 | 显示全部楼层
μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核  

使用特权

评论回复
jstgotodo| | 2019-11-21 15:18 | 显示全部楼层
跑系统的单片机可以更有效地支持多任务   

使用特权

评论回复
qiufengsd| | 2019-11-21 15:18 | 显示全部楼层
uCOS-II相对比较简单   

使用特权

评论回复
aspoke| | 2019-11-21 15:19 | 显示全部楼层
到定时器中断里来处理   

使用特权

评论回复
kmzuaz| | 2019-11-21 15:19 | 显示全部楼层
支不支持多任务操作系统?   

使用特权

评论回复
232321122| | 2019-11-21 15:19 | 显示全部楼层
多任务会力不从心   

使用特权

评论回复
plsbackup| | 2019-11-21 15:19 | 显示全部楼层
,在死循环里面通过判断标志位看是否执行当前程序  

使用特权

评论回复
ghuca| | 2019-11-21 15:19 | 显示全部楼层
只能实现单线程。   

使用特权

评论回复
mnynt121| | 2019-11-21 15:19 | 显示全部楼层
就用ucos吧 开源   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

708

主题

1032

帖子

2

粉丝