21ic电子技术开发论坛

标题: stm32裸机程序中如何实现多进程并行方式 [打印本页]

作者: w6850916    时间: 2013-5-20 11:38
标题: stm32裸机程序中如何实现多进程并行方式
在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
事件驱动 + 状态机处理 + 按键部分(扫描或者中断)  不用上操作系统也能完成

作者: 杨爱林林    时间: 2013-5-20 17:00
状态机状态机

作者: w6850916    时间: 2013-5-24 14:34
airwill 发表于 2013-5-20 16:43
很简单:
专业的说法: 非阻塞方式的软件设计
具体设计方法: 事件驱动+状态机处理.

版主能给个例程看看吗?

作者: 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;
   }
   .....             // 其他的任务类似
}

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

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

作者: trumpxp    时间: 2013-6-7 19:03
应该是状态机的设置问题  个人的见解   顶一个





欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/)