OpenEdv-开源电子网

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

FreeRTOS 创建消息队列问题

[复制链接]

5

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2018-5-28
在线时间
32 小时
发表于 2018-7-22 20:56:09 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 jishuaihu 于 2018-7-22 21:01 编辑

刚开始学习FreeRTOS,用的是STM32F103RCT6,目前创建了三个任务,运行指示灯、按键、显示。其中显示任务里是暂时还没有具体的代码,按键任务准备使用队列传递按键值。现在的问题是这样的,如果我不创建按键队列,则运行指示灯任务可以正常运行,每0.5s闪烁一次。但是如果创建按键队列的话,任务运行就不正常了(队列可以创建成功),仿真发现指针一直停留在这个函数prvCheckTasksWaitingTermination(),或者是这个函数的前一级函数,即static portTASK_FUNCTION( prvIdleTask, pvParameters );这个好像是空闲任务吧?另外补充一下,复位后每个任务后执行一遍
附件是代码,请各位前辈给指导一下。看看问题出在什么地方。
STM32F103RCT6_FreeRTOS.zip (8.37 MB, 下载次数: 69)

最佳答案

查看完整内容[请看2#楼]

问题已经定位了。但是不明白为什么。 在我的任务函数里有这么一句 err = xQueueSend(Key_Queue,&KeyBuf,portMAX_DELAY); //发送队列,一直等待 如果有消息就发送,并且是一直等待。但是我还没有写消息队列接收的函数。但是依然有一个问题不明白。这种带任务切换的等待应该不会有类似裸跑的那种死循环吧,就算一直等待也应该有任务切换吧?为什么别的任务执行不了呢?我设置的按键任务的优先级是比运行指示灯任务优先级要低的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2018-5-28
在线时间
32 小时
 楼主| 发表于 2018-7-22 20:56:10 | 显示全部楼层
问题已经定位了。但是不明白为什么。
在我的任务函数里有这么一句
err = xQueueSend(Key_Queue,&KeyBuf,portMAX_DELAY); //发送队列,一直等待
如果有消息就发送,并且是一直等待。但是我还没有写消息队列接收的函数。但是依然有一个问题不明白。这种带任务切换的等待应该不会有类似裸跑的那种死循环吧,就算一直等待也应该有任务切换吧?为什么别的任务执行不了呢?我设置的按键任务的优先级是比运行指示灯任务优先级要低的。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-7-23 01:35:13 | 显示全部楼层
帮顶
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2076
金钱
2076
注册时间
2014-12-19
在线时间
709 小时
发表于 2018-7-24 13:56:46 | 显示全部楼层
你的按键任务优先级要高于指示灯
回复

使用道具 举报

5

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2018-5-28
在线时间
32 小时
 楼主| 发表于 2018-7-24 15:23:49 | 显示全部楼层
lvehe 发表于 2018-7-24 13:56
你的按键任务优先级要高于指示灯

谢谢,可是为什么呢?
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2076
金钱
2076
注册时间
2014-12-19
在线时间
709 小时
发表于 2018-7-24 16:02:21 | 显示全部楼层
jishuaihu 发表于 2018-7-24 15:23
谢谢,可是为什么呢?

数字越小,优先级越低,感觉你弄反了。
回复

使用道具 举报

5

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2018-5-28
在线时间
32 小时
 楼主| 发表于 2018-7-25 10:09:51 | 显示全部楼层
lvehe 发表于 2018-7-24 16:02
数字越小,优先级越低,感觉你弄反了。

数字越小,优先级越低。这个我是知道的。但是不管优先级怎么样,按键任务的while(1)里面是有延时的,10ms的时间,这个时间足够去执行别的任务了吧。可是总是在执行空闲任务。这一点儿我不明白。
有时间的话能不能跑一下我的代码给看看问题所在啊。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 23:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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