打印
[STC单片机]

一起讨论单片机的多任务,以stc12c5a60s2为例。

[复制链接]
楼主: cellagent
手机看帖
扫描二维码
随时随地手机跟帖
21
cellagent|  楼主 | 2013-10-29 20:13 | 只看该作者 回帖奖励 |倒序浏览
unciauncia 发表于 2013-10-29 19:58
51貌似有个简单的RTX操作系统,你可以试试,不知道能不能符合要求

谢谢你的回复,长知识了。我稍微百度了一下,RTX是小型实时操作系统。我现在还不打算加入操作系统,我想用尽可能多的中断或者查询来解决多任务的问题。

使用特权

评论回复
22
jiabin1024| | 2013-10-30 09:45 | 只看该作者
你这个没必要搞个OS的,控制对象也不是很多,上OS反而搞复杂了。

使用特权

评论回复
23
chenferrari| | 2013-10-30 10:16 | 只看该作者
也没必要用OS吧?流程安排的合理,也是可以做到的。

使用特权

评论回复
24
cellagent|  楼主 | 2013-10-30 10:29 | 只看该作者
jiabin1024 发表于 2013-10-30 09:45
你这个没必要搞个OS的,控制对象也不是很多,上OS反而搞复杂了。

对,我也认为上OS变复杂了。:)

使用特权

评论回复
25
cellagent|  楼主 | 2013-10-30 10:34 | 只看该作者
chenferrari 发表于 2013-10-30 10:16
也没必要用OS吧?流程安排的合理,也是可以做到的。

是的,没必要用OS的。关键是流程安排的合理。程序的先后、主次,哪些是被动的,哪些是主动的,这些都安排得当的话,项目就没问题了。可以说说你的流程安排吗?

使用特权

评论回复
26
ayb_ice| | 2013-10-30 10:35 | 只看该作者
早说了,多任务=多调用

使用特权

评论回复
27
cellagent|  楼主 | 2013-10-30 10:37 | 只看该作者
ayb_ice 发表于 2013-10-30 10:35
早说了,多任务=多调用

嗯。:)

使用特权

评论回复
28
hunter727| | 2013-10-30 11:26 | 只看该作者
这个是个学习的好帖子

使用特权

评论回复
29
cellagent|  楼主 | 2013-10-30 11:39 | 只看该作者
hunter727 发表于 2013-10-30 11:26
这个是个学习的好帖子

:),一起讨论。

使用特权

评论回复
30
bingmcu| | 2013-10-30 16:48 | 只看该作者
用时间片足够了,关键是确定好各个模块的信号的优先顺序,重要的信号在中断处理。

使用特权

评论回复
31
cellagent|  楼主 | 2013-10-31 08:11 | 只看该作者
bingmcu 发表于 2013-10-30 16:48
用时间片足够了,关键是确定好各个模块的信号的优先顺序,重要的信号在中断处理。 ...

是的。:)

使用特权

评论回复
32
outstanding| | 2013-10-31 08:34 | 只看该作者
:lol 用OS  用高级单片机

使用特权

评论回复
33
cellagent|  楼主 | 2013-10-31 08:51 | 只看该作者
outstanding 发表于 2013-10-31 08:34
用OS  用高级单片机

有高级单片机推荐吗?

使用特权

评论回复
34
fcyxy| | 2013-10-31 11:34 | 只看该作者
多任务,我是用时间变量,在函数出口加一句变量++,我这方法对吗?

使用特权

评论回复
35
chenferrari| | 2013-10-31 15:19 | 只看该作者
cellagent 发表于 2013-10-30 10:34
是的,没必要用OS的。关键是流程安排的合理。程序的先后、主次,哪些是被动的,哪些是主动的,这些都安排 ...

电源模块就不说了,传感器的,像温度,湿度等,不会快速变化(骤变)的,可以用定时器或main中轮询的方式进行访问。无线通讯肯定是串口中断的形式了,然后在中断中设置标志位,可以在main中再执行。执行模块和存储模块也是只有在通讯时下发命令或温湿度达到之后才开始执行的,也可以在main中进行。这样,你的main平时也就只是在查询标志位而已,有哪个标志位置位,就执行哪个动作。这样是否符合你的要求?

使用特权

评论回复
36
cellagent|  楼主 | 2013-10-31 16:21 | 只看该作者
fcyxy 发表于 2013-10-31 11:34
多任务,我是用时间变量,在函数出口加一句变量++,我这方法对吗?

我认为行,当变量>N时,程序跳转。

使用特权

评论回复
37
cellagent|  楼主 | 2013-10-31 16:25 | 只看该作者
chenferrari 发表于 2013-10-31 15:19
电源模块就不说了,传感器的,像温度,湿度等,不会快速变化(骤变)的,可以用定时器或main中轮询的方式进 ...

传感器是用轮询方式,我的无线通信是用单片机IO口模拟的,发送使用的定时器1,接收使用外部中断和定时器0。我也想把程序设计成你那样,但具体实现的时候遇到了麻烦。就拿无线来说,主端是集收发于一体的,发送完后要接收从端的反馈,如果没有反馈就一直发送。我现在卡在这里了。

使用特权

评论回复
38
cellagent|  楼主 | 2013-10-31 16:29 | 只看该作者
发现了一种好的方式,考虑加入软件复位。加入语句 IAP_CONTR=0x20; 整个系统都复位了。灵活的使用可能会收到意想不到的效果。

使用特权

评论回复
39
chenferrari| | 2013-11-1 11:30 | 只看该作者
cellagent 发表于 2013-10-31 16:25
传感器是用轮询方式,我的无线通信是用单片机IO口模拟的,发送使用的定时器1,接收使用外部中断和定时器0 ...

那你的无线模块是单工的还是双工的?如果是双工的,那就只需要等待接收中断就好了,然后设定比如发3次,没有应答,说明网络有问题,或别的情况,这时候就不要再发了。主机端就进行下一个任务去了,就不要卡在这里,要是网络本身就有问题,你这就没法工作了。

使用特权

评论回复
40
cellagent|  楼主 | 2013-11-7 11:23 | 只看该作者
chenferrari 发表于 2013-11-1 11:30
那你的无线模块是单工的还是双工的?如果是双工的,那就只需要等待接收中断就好了,然后设定比如发3次, ...

抱歉这么久才回复。单端我接了一个315M RF发射头和接收头,它们只负责发射和接收无线电波,编解码都是单片机通过软件模拟的,不知道是单工还是双工。一对一时,我想实现主发从收--从反馈主确认,就完成了一次通信。如果主没收到反馈就一直发。在单端进行收发切换时遇到了问题,虽然将收发各自放在中断程序中,发或者收完后已关中断,但是在实测时,并不如理想中的那样:从机在发反馈时还能够收到!此时已关收的中断,理应不会收到信息。后来我用继电器强制进行切换,问题大致解决了。加入了继电器,就没那么灵活,类似于要手动切换。

使用特权

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

本版积分规则