OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 18121|回复: 14

求助!如何用stm32实现多进程并行?

[复制链接]

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
发表于 2014-8-8 16:58:36 | 显示全部楼层 |阅读模式
5金钱
问:
在stm32裸机程序中,举个简单的例子,比如主循环有三个函数,一个是处理LCD显示,一个是无线通信,一个是按键处理。如果无线通讯程序中需要delay十几秒,那LCD显示就会有问题,而且按键检测也会不灵,说这个例子主要就是想说delay暂用cpu不释放,或者用定时器来延时时,这个cpu控制问题,使得顺序处理几个任务时对那些实时响应的要求高的任务就得不到效果,如果用操作系统的话肯定没有这个问题,因为delay的时候,任务是把cpu使用权释放掉的,不用操作系统的话,这个问题怎么解决,谁能提供下经验或者方法?
答:
事件驱动 + 状态机处理 + 按键部分(扫描或者中断)  不用上操作系统也能完成

专业的说法: 非阻塞方式的软件设计

具体设计方法: 事件驱动+状态机处理.
说得更明白一些: delay 改成定时器触发事件.

例子:
很想给你个例程,不过这只是个编程方法和解题思路.
呵呵, 举个最简单的例吧, 下面是个定时中断函数, 给软定时器 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;
   }
   .....             // 其他的任务类似
}
 
以上是我在网上找到跟我类似的问题,我现在也是需要执行几个函数
这是我的main函数
[mw_shl_code=c,true]RCC_Configuration(); Init_Config(); SysTick_Init(); LED1(ON); while(1) { count = TIM3->CNT;//获取计数值 num = count/4;//倍频4,除以4得到正确的脉冲数 Control(num); if(Uart1_rev_flag == 0x01) { Uart1_rev_flag = 0x00;//接收一帧数据标志清零 ParseRecieve();//数据帧处理函数 GPIO_ResetBits(GPIOA,GPIO_Pin_0);//485接收使能,关闭发送使能 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//允许接收中断 } } }[/mw_shl_code]


1. 不停的读取TIM3->CNT,根据得到的数值控制GPIO引脚信号,即执行Control(num)
2.同时我需要进行485通信将读取到的num值传给触摸屏,让其在触摸屏上动态显示

现在的问题就是我的通信影响了我的Control(num)函数,要去除这种影响该怎么做?
如何不停的读取TIM3->CNT然后进行处理能跟通信不干扰?上面是我在网上看到别人的问题,跟我的类似,但是我没理解
事件驱动 + 状态机处理 + 按键部分(扫描或者中断)  不用上操作系统也能完成

专业的说法: 非阻塞方式的软件设计

具体设计方法: 事件驱动+状态机处理.
说得更明白一些: delay 改成定时器触发事件.

这个思想?
还有下面这个代码,是怎么实现相互不干扰的?
[mw_shl_code=c,true]很想给你个例程,不过这只是个编程方法和解题思路. 呵呵, 举个最简单的例吧, 下面是个定时中断函数, 给软定时器 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; } ..... // 其他的任务类似 }[/mw_shl_code]

电子人生!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2014-8-8 17:02:41 | 显示全部楼层
說明你還沒學會使用定時器。。。
目前在玩STM32,BBB,RPi
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-11-21
在线时间
1 小时
发表于 2014-8-8 23:57:58 | 显示全部楼层
求学习!帮顶!!!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2014-8-9 08:34:52 | 显示全部楼层
回复【2楼】w0rmis20:
---------------------------------
来解释一下啊?求详解!!!
电子人生!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2014-8-9 08:43:19 | 显示全部楼层
我的问题跟上面那个问题类似,但是不全相同!哪位懂的来解释一下吧,详细一点的!
电子人生!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2014-8-9 08:51:35 | 显示全部楼层
[mw_shl_code=c,true]void main(void) { while(1) { num = TIM3->CNT;//获得编码器的计数值,编码器是在不停旋转 的,所以num一直在改变 Contorl(num);//通过获取到的num值来控制对应的GPIO if(Uart1_rev_flag == 0x01) { Uart1_rev_flag = 0x00;//接收一帧数据标志清零 ParseRecieve();//数据帧处理函数 GPIO_ResetBits(GPIOA,GPIO_Pin_0);//485接收使能,关闭发送使能 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//允许接收中断 } } }//同时,我的stm32会不停的接收到触摸屏发出的数据帧进行响应回发,采用的是串口中断处理,在接受中断接受数据帧,通过定时器来判断一帧数据是否接受完毕,然后进行帧解析ParseRecieve();回发数据! 现在出现的问题就是我在让编码器高速旋转的时候,只要是进行通信,就会影响到我的Contorl(num)函数,即影响了我的GPIO控制;如果不通信或者通信的次数较少,影响就没有或者几乎没有!谁能告诉我这是什么原因啊![/mw_shl_code]

电子人生!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2014-8-9 08:53:58 | 显示全部楼层
我的问题跟上面的还是有点区别的,我是在想该如何处理,让  《通信》与   《轮询获得num值控制GPIO》相互不影响
电子人生!
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2014-8-9 09:39:00 | 显示全部楼层
在线求帮助!
电子人生!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-9 23:13:17 | 显示全部楼层
帮顶....
建议直接学OS了,真调度.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

29

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3083
金钱
3083
注册时间
2014-7-19
在线时间
413 小时
 楼主| 发表于 2014-8-10 09:45:02 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
不知道怎么移植OS啊,好不容易才把程序写出来的。
话说原子哥什么时候推出F4的开发板啊,还有A8系列的,如果辅助资料跟例程都好,而且各种实验对胃口,我第一个买啊!
电子人生!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-10 23:39:07 | 显示全部楼层
回复【10楼】翱翔云端的鸟:
---------------------------------
F4的板子在设计中,预计10月份开卖.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-10-21
在线时间
0 小时
发表于 2014-10-23 10:29:58 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
 现在有STM32F4的开发板吗?
回复

使用道具 举报

5

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2011-9-24
在线时间
9 小时
发表于 2014-10-23 16:15:35 | 显示全部楼层
其实带操作系统也不是并行的,单CPU怎么可能并行。
回复

使用道具 举报

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
发表于 2014-10-26 17:24:18 | 显示全部楼层
干嘛不试试实时操作系统呢?
光圈电子科技 晓航 多多 啾儿 实验室
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-26 23:11:14 | 显示全部楼层
回复【12楼】morrifis:
---------------------------------
11.4号有。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-26 15:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表