打印
[STM32]

求教如何不带操作系统,实行多个任务呢!

[复制链接]
5070|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a868247|  楼主 | 2014-5-21 09:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
呆板书生| | 2014-5-21 09:26 | 只看该作者
非阻塞函数

使用特权

评论回复
板凳
ayb_ice| | 2014-5-21 09:43 | 只看该作者
本帖最后由 ayb_ice 于 2014-5-21 09:45 编辑

while(1)
{
   task1();
   task2();
   ...
}

任务必须尽快处理,如果处理时间较长(根据实时性需要定义),函数内部自己分片处理,必须尽快返回

使用特权

评论回复
地板
keer_zu| | 2014-5-21 09:53 | 只看该作者
*用一个时钟中断(或者类似sys_tick),通过函数指针轮流执行不同TASK_fucntion,
*时间片用完后如何洗牌全看你的意图了,
*当然这样做的前提是你必须在中断某个任务执行时候把它的执行环境做个保存,以便重新执行的时候还能恢复到原来的地方。
*如果再此基础上你利用一个更高优先级的中断参与进来,你应该可以设计出一个抢占式的效果,以保证实时性任务的处理。

使用特权

评论回复
5
keer_zu| | 2014-5-21 10:02 | 只看该作者
这样看来关键两个地方是:
1.调度策略(如何洗牌)
2.保存任务断点(能正确恢复环境)

前者可以简单处理,轮流,没有优先级,这个最简单。
后者参照类似UCOS这样简单的小系统,看它如何保存堆栈。

这样一个多任务的环境就具备了。
其实算是一个简单内核了。
实现起来也未必麻烦。

使用特权

评论回复
6
nbldelnan| | 2014-5-21 10:03 | 只看该作者
多核处理

使用特权

评论回复
7
keer_zu| | 2014-5-21 10:10 | 只看该作者
多核处理可以实现多任务,但是成本和复杂度增加了。
楼主的意图其实不需要真正的多任务完全可以的。
解决办法如下:
1.串口接收用中断,优先级最高,做一个接收缓冲区,收到数据后只管写入缓冲,不做任何处理,尽快从中断返回。
2.按键可以扫描也可以中断,优先级一定要低于串口。
3.显示部分放在中断外边,还有刚才讲到的接收到的数据的处理也放在中断外面(在中断外读接收缓冲区,并处理之)。

不知道这样讲楼主是否明白。

使用特权

评论回复
8
aozima| | 2014-5-21 11:24 | 只看该作者
在RTOS普遍使用的今天,用OS是上选。

使用特权

评论回复
9
a868247|  楼主 | 2014-5-21 23:42 | 只看该作者
keer_zu 发表于 2014-5-21 10:02
这样看来关键两个地方是:
1.调度策略(如何洗牌)
2.保存任务断点(能正确恢复环境)

这个调度策略咋应用呢!能再详细说明下?

使用特权

评论回复
10
keer_zu| | 2014-5-22 07:07 | 只看该作者
a868247 发表于 2014-5-21 23:42
这个调度策略咋应用呢!能再详细说明下?

时间片轮转,但是你这个应用没必要这么麻烦,按照我7楼的建议完全可以了。你这个对并发性要求不高没有太多只能通过并发性的任务即可处理,实时性也没特别要求,串口接收用中断即可。

使用特权

评论回复
11
keer_zu| | 2014-5-22 07:07 | 只看该作者
a868247 发表于 2014-5-21 23:42
这个调度策略咋应用呢!能再详细说明下?

时间片轮转,但是你这个应用没必要这么麻烦,按照我7楼的建议完全可以了。你这个对并发性要求不高没有太多只能通过并发性的任务即可处理,实时性也没特别要求,串口接收用中断即可。

使用特权

评论回复
12
wacke| | 2014-5-22 08:18 | 只看该作者
前后台,和上系统一样的

使用特权

评论回复
13
mcu5i51| | 2014-5-22 08:44 | 只看该作者
通LS,前后台,很简单;
首先你要从学校或书本上的"面向试题"模式跳出来;好像有一个帖子是说这个的
是在21,还是***哪里就不记得啦,
学会自己做个简易的框架,面向工程或实际问题,
人家说,第一步要学会释放CPU

使用特权

评论回复
14
hobbye501| | 2014-5-22 09:02 | 只看该作者
时间片 分时复用

使用特权

评论回复
15
guangbiao| | 2014-5-22 09:29 | 只看该作者
nbldelnan 发表于 2014-5-21 10:03
多核处理

这才是最佳答案。。。:lol

使用特权

评论回复
16
玄德| | 2014-5-22 10:14 | 只看该作者

打印机

每个字分解成若干行,
一排字同时开打,一次完成所有字的一行。

流水线,也是这过程。



使用特权

评论回复
17
a868247|  楼主 | 2014-5-22 10:28 | 只看该作者
keer_zu 发表于 2014-5-22 07:07
时间片轮转,但是你这个应用没必要这么麻烦,按照我7楼的建议完全可以了。你这个对并发性要求不高没有太 ...

你的意思我也差不多明白!但我这边还有6个定时器捕获,频率差不多6K!这个跟串口的冲突应该比较大!

使用特权

评论回复
18
xuyaqi| | 2014-5-22 16:08 | 只看该作者
用简单中断即可完成,不需要操作系统

使用特权

评论回复
19
coody| | 2014-5-22 16:13 | 只看该作者
最简单的,状态机。。。。

使用特权

评论回复
20
xuyaqi| | 2014-5-22 16:16 | 只看该作者
如果实时要求非常高操作系统也无能为力,操作系统实时的本质也是中断,只好多cpu并行处理。

使用特权

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

本版积分规则

6

主题

97

帖子

1

粉丝