打印

stm32裸机程序中如何实现多进程并行方式

[复制链接]
8582|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w6850916|  楼主 | 2013-5-20 11:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在stm32裸机程序中,举个简单的例子,比如主循环有三个函数,一个是处理LCD显示,一个是无线通信,一个是按键处理。如果无线通讯程序中需要delay十几秒,那LCD显示就会有问题,而且按键检测也会不灵,说这个例子主要就是想说delay暂用cpu不释放,或者用定时器来延时时,这个cp控制问题,使得顺序处理几个任务时对那些实时响应的要求高的任务就得不到效果,如果用操作系统的话肯定没有这个问题,因为delay的时候,任务是把cpu使用权释放掉的,不用操作系统的话,这个问题怎么解决,谁能提供下经验或者方法?
沙发
IJK| | 2013-5-20 12:14 | 只看该作者
不用操作系统的话,就用状态机即可。在主循环里面,定期调用三个函数,无线通讯程序中需要delay十几秒,相关函数查询到delay没有完成就直接返回,就行了。

使用特权

评论回复
板凳
airwill| | 2013-5-20 16:43 | 只看该作者
很简单:
专业的说法: 非阻塞方式的软件设计
具体设计方法: 事件驱动+状态机处理.
说得更明白一些: delay 改成定时器触发事件.

使用特权

评论回复
地板
outstanding| | 2013-5-20 16:53 | 只看该作者
事件驱动 + 状态机处理 + 按键部分(扫描或者中断)  不用上操作系统也能完成

使用特权

评论回复
5
杨爱林林| | 2013-5-20 17:00 | 只看该作者
状态机状态机

使用特权

评论回复
6
w6850916|  楼主 | 2013-5-24 14:34 | 只看该作者
airwill 发表于 2013-5-20 16:43
很简单:
专业的说法: 非阻塞方式的软件设计
具体设计方法: 事件驱动+状态机处理.

版主能给个例程看看吗?

使用特权

评论回复
7
airwill| | 2013-5-24 15:06 | 只看该作者
本帖最后由 airwill 于 2013-5-24 15:08 编辑

很想给你个例程,不过这只是个编程方法和解题思路.
呵呵, 举个最简单的例吧, 下面是个定时中断函数, 给软定时器 Timer 计时.

void timer(void) {
int x=sizeof(Timer);
do
if(Timer[--x])  Timer[x]--;       // 软定时器计时
while (x>=0);
}

然后是
main(){
...
   if (Timer[0] ==0) { // 定时结束
     LcdDisplay();  
          Timer[0] = LCD_TIMER;
   }
   .....             // 其他的任务类似
}

使用特权

评论回复
8
w6850916|  楼主 | 2013-6-7 16:11 | 只看该作者
airwill 发表于 2013-5-24 15:06
很想给你个例程,不过这只是个编程方法和解题思路.
呵呵, 举个最简单的例吧, 下面是个定时中断函数, 给软定 ...

谢谢点播,搞定了,这段时间没登陆,立马给分结贴,哈哈哈

使用特权

评论回复
9
trumpxp| | 2013-6-7 19:03 | 只看该作者
应该是状态机的设置问题  个人的见解   顶一个

使用特权

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

本版积分规则

13

主题

126

帖子

5

粉丝