OpenEdv-开源电子网

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

UCOSii如何用于串口通讯?

[复制链接]

33

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2014-1-24
在线时间
102 小时
发表于 2014-6-25 15:34:49 | 显示全部楼层 |阅读模式
5金钱
比如,串口发送过来一帧数据,底层要如何去响应它?是要
if(串口数据)
{
    OSTaskCreate(......);
    ......
}
else if......
还是?
没有UCOSii实战经验,烦请各位能给个思路,谢谢了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-6-25 20:19:30 | 显示全部楼层
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

33

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2014-1-24
在线时间
102 小时
 楼主| 发表于 2014-6-26 17:42:45 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
就是串口通讯有N多条指令,不跑系统裸奔时接收到一帧数据后,在主函数while大循环里去一一识别就OK。请问哈这样的模式怎么用于UCOSii?
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-6-26 22:37:16 | 显示全部楼层
回复【3楼】北方的马克思:
---------------------------------
那就用UCOS的队列吧
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-6-26 23:34:27 | 显示全部楼层
邮箱/队列事件驱动,接收到一个包,把数据结构指针发给任务。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-6-19
在线时间
0 小时
发表于 2014-7-16 10:49:47 | 显示全部楼层
楼主问题解决了没,我也有些地方不明白想请教下呢、
www.eshome.me 我们的嵌入式之家。
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2014-8-3 14:37:00 | 显示全部楼层
关于串口的相应问题,LZ可以考虑使用uCOS的消息或者消息列队这种内核对象,先创建一个处理串口数据的任务ComTask,一个消息对象,ComTask里调用等待消息的函数,然后被系统挂起(你可以设置等待时限,若超时就加入就绪列队,这依赖于你的配置参数,也可以设置为一直等待),当串口数据到来时,在串口的中断处理函数里调用发送消息的函数(具体是什么请君参考uCOS的手册,我也忘了这个函数怎么写的),然后操作系统会做内部处理寻找看哪个或者哪些任务在等待该消息,并将那些任务标记为就绪任务,然后操作系统执行任务调度,若此时ComTask为当前最优先的任务,那么它将接管CPU,然后你就可以处理收到的串口数据了
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2014-8-3 14:40:45 | 显示全部楼层
回复【7楼】kassandra:
---------------------------------
欢迎使用uCOS III,支持直接向任务发送消息,而不需要单独创建消息对象,这是uCOS II 所没有的新特性,同时uCOS III 还支持多任务同优先级方式,此时采用时间轮片的调度方式处理同优先级任务的调度
回复

使用道具 举报

33

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2014-1-24
在线时间
102 小时
 楼主| 发表于 2014-8-9 00:13:26 | 显示全部楼层
回复【7楼】kassandra:
---------------------------------
非常感谢解答,比如
void LEDR_Task(void *pdata)
{
INT8U err;                        
    pdata = pdata;                     
while(1)
{
OSMboxPend(SeMbox,0,&err);                                          
GPIO_WriteBit(GPIOA, GPIO_Pin_8, (BitAction) (1-(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_8))));
        OSTimeDly(100);         
}
}
类似这个任务,while里面等待消息成功后只能运行一次,也就是PA8只能翻转一次。我想做的效果是,例如 接收到1,一直翻转,接收到0停止翻转,这种情况怎么处理啊?
回复

使用道具 举报

1

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-7-1
在线时间
0 小时
发表于 2014-9-11 14:20:26 | 显示全部楼层
回复【9楼】北方的马克思:
---------------------------------
翻转LED可以单独形成一个任务,串口中断接收到数据后通过挂起LED任务和解挂LED任务实现
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 10:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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