你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

freertos,串口接收数据后如何发送给任务?

[复制链接]
any012 提问时间:2017-1-17 15:49 /
阅读主题, 点击返回1楼
收藏 1 评论20 发布时间:2017-1-17 15:49
20个回答
海迹天涯 回答时间:2017-1-18 08:37:52
学习了
中山无雪 回答时间:2017-1-18 11:30:06
any012 发表于 2017-1-17 17:00
接收用的中断方式,没法放在任务里吧?
使用信号量的话,我担心任务还没处理完数据,又有新的串口中断来 ...

全局变量确实存在可能覆盖的问题,解决的方法是接收端口选的速率低一点,发送端口选的速率高一些,这样就基本可以避免覆盖的问题了。

再就是可以自己定义一个循环数组(其实也就是一个队列了),使用信号量进行控制,还需要加上Mutex。

第三种就是选用队列了,队列的类型可以是uint8_t,也可以是char,其实这两种类型在内部的定义中是一样的,再有RTOS的环境下肯定是优选队列方式,省心!别人做好的系统中已经对数据的存取安全做好了,不需要自己在做控制(其实RTOS对对存取安全的控制也是使用信号量及Mutex控制的,和自己做循环队列的道理一样)。
假若可能存储的数据量很大且变化很大时才选用动态分配内存,假若不是这样寻则静态分配即可,在Freertos中选用heap2.c即可,定义一个静态数组,然后将静态数组和队列绑定就可以了
Dylan疾风闪电 回答时间:2017-1-18 12:35:51
如果只是学习的话,使用邮箱就足够了。它占用的资源也很少。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

any012 回答时间:2017-1-19 12:37:23
Dylan疾风闪电 发表于 2017-1-18 12:35
如果只是学习的话,使用邮箱就足够了。它占用的资源也很少。

刚看了邮箱,有些疑问。
串口接收完一帧数据后保存在一个数组里,邮箱将数组的指针发送给任务。任务通过邮箱获取到这个指针,然后怎么处理这个指针呢?
在任务里再建个数据,通过指针将数据一个一个的复制到这个数组里?这样的话,复制过程中,串口中断更新原数组怎么办?
Dylan疾风闪电 回答时间:2017-1-19 19:19:23
any012 发表于 2017-1-19 12:37
刚看了邮箱,有些疑问。
串口接收完一帧数据后保存在一个数组里,邮箱将数组的指针发送给任务。任务通过 ...

OSMboxPost()如果邮箱满的话会返回 错误状态的, 所以在你更新数组时可以通过 该状态来作判断的。
都会存在互斥的,不用担心。
any012 回答时间:2017-1-20 08:52:57
Dylan疾风闪电 发表于 2017-1-19 19:19
OSMboxPost()如果邮箱满的话会返回 错误状态的, 所以在你更新数组时可以通过 该状态来作判断的。
都会存 ...

用的freertos,邮箱只能有一个数据吧。
我通过邮箱发送的是指针而不是数组本身。即使邮箱被任务获取了,也不能说明任务已经复制完这个数组吧?
zbber 回答时间:2017-1-20 09:18:54
用malloc申请一片内存,保存数据,然后将地址传递给消息队列,在线程里拿到数据后,释放就OK了
木十化 回答时间:2018-3-6 17:54:29
zhangxu56726 发表于 2017-1-17 16:45
用malloc申请一片内存,保存数据,然后将地址传递给消息队列,在线程里拿到数据后,释放就OK了 ...

我也是这么干的,但是担心任务中出队的时候会被串口中断打断,在任务出队的时候需要将串口中断关闭吗?
然后任务出队的时候需要中断出队api吗?
zhangxu56726 回答时间:2018-3-6 17:56:24
木十化 发表于 2018-3-6 17:54
我也是这么干的,但是担心任务中出队的时候会被串口中断打断,在任务出队的时候需要将串口中断关闭吗?
...

不用,出队列,是先进先出,难道你的队列,就只能存放一个成员?
wdliming-222461 回答时间:2019-8-14 14:23:13
中山无雪 发表于 2017-1-18 11:30
全局变量确实存在可能覆盖的问题,解决的方法是接收端口选的速率低一点,发送端口选的速率高一些,这样就 ...

你好,请问一下,用队列的话,我认为在任务中接收数据,那这个任务只能用于接收了,如果添加无限等待的阻塞时间的话,这样一来,这个任务就功能很单一了。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版