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

freertos,串口和任务通过邮箱通讯,结果任务反应很慢。

[复制链接]
any012 提问时间:2017-1-19 16:25 /
悬赏10ST金币已解决
初学freertos。用的cube生成的freertos工程,单片机型号位stm32f103vbt6。

建了三个人物,一个是串口任务,一个是LED每秒翻转一次,一个是空任务。

串口接收用的是DMA+空闲中断,将接收数组的指针,通过邮箱发送给任务。
任务通过邮箱得到接收数组的指针,然后逐个复制到任务里建立的数组,再通过串口发送出去。

现在结果是上位机发送数据大概七八秒后才收到返回来的数据。太慢了。

用stlink调试,断点设在发送邮箱处,很快就能停到断点处。
然后将断点改在接收邮箱处和串口发送处,结果没有在接收邮箱的断点停,而是过了七八秒后停在了串口发送处。

QQ图片20170119162440.png


最佳答案

查看完整内容

个人认为,数据接收任务不需要延时函数,有个消息邮箱就行,有消息就接收,没消息就等待
收藏 1 评论14 发布时间:2017-1-19 16:25

举报

14个回答
黑皮男 回答时间:2017-1-19 16:25:10
个人认为,数据接收任务不需要延时函数,有个消息邮箱就行,有消息就接收,没消息就等待

点评

正解。  发表于 2017-1-20 12:58
这种看法是对的  发表于 2017-1-19 21:27

评分

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

查看全部评分

奏奏奏 回答时间:2017-1-19 16:39:01
建议改用消息队列,只要将队列数改为1实质上就是邮箱了

评分

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

查看全部评分

any012 回答时间:2017-1-19 16:40:55
我的问题找到了。
任务延时设的时间太长了。
QQ图片20170119164006.png
any012 回答时间:2017-1-19 17:01:12
奏奏奏 发表于 2017-1-19 16:39
建议改用消息队列,只要将队列数改为1实质上就是邮箱了

额,那么我这里如果改成消息队列的话,需要将队列数改为1吗?如果需要改为1,那和现在的情况有什么区别?
Dylan疾风闪电 回答时间:2017-1-19 19:36:05
使用HAL_XXX_DMA后,需要在回调函数中 置完成标志的。

评分

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

查看全部评分

watershade 回答时间:2017-1-19 21:32:47
我的做法类似楼上你的osDelay具体是为什么。你既然用idle中断,那么你是如何将数据传送到邮箱的。

我的做法是这样的:我用邮箱和内存池结合的方法。邮箱传送的是地址和长度,消息池是储存的数据。然后有消息就等待的线程就工作。

评分

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

查看全部评分

队长shiwo 回答时间:2017-1-20 12:45:45
来学习学习
路鸣雨 回答时间:2017-1-20 13:18:41
背景挺赞啊~
帅的像头牛 回答时间:2017-1-20 14:35:50
楼主用的什么开发环境
12下一页

所属标签

相似问题

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