OpenEdv-开源电子网

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

FreeRTOS卡在空闲任务,无法调度,产生假死现象

[复制链接]

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
发表于 2018-10-11 17:47:17 | 显示全部楼层 |阅读模式
1金钱
利用freeRTOS编写了一个 测试CAN接收、发送大数据 的程序,现利用上位机向单片机发送一个300k的文件,每次发送到280k左右程序就 "死机"了,Debug看了一下是进入static portTASK_FUNCTION( prvIdleTask, pvParameters )(此函数位于tasks.c),卡在if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )  该语句。条件不满足,无法调用 taskYIELD()函数,任务无法调度,产生假死现象。


有遇到类似问题的吗?指导一下。 说一下产生这样问题的可能原因就好,我可以自己有方向性的查找,谢谢!!!!!!!

最佳答案

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

问题解决了。问题原因:内存不足。 查找问题方式:根据Debug,程序为进入HardFault,应该不是堆栈溢出的问题;其次猜测可能是内存不足的问题,然后新建了一个任务间断查询实时系统剩余内存量。未进行CAN数据接收发送时,内存的剩余量在一定范围波动;进行CAN数据接收发送时,内存的剩余量随时间增加而减少;上面现象说明有内存没有及时释放出来。然后我就随这条路找,发现我每次回上位机报文的缓存申请了内存,在发送完毕后忘记回 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2018-10-11 17:47:18 | 显示全部楼层
问题解决了。问题原因:内存不足。 查找问题方式:根据Debug,程序为进入HardFault,应该不是堆栈溢出的问题;其次猜测可能是内存不足的问题,然后新建了一个任务间断查询实时系统剩余内存量。未进行CAN数据接收发送时,内存的剩余量在一定范围波动;进行CAN数据接收发送时,内存的剩余量随时间增加而减少;上面现象说明有内存没有及时释放出来。然后我就随这条路找,发现我每次回上位机报文的缓存申请了内存,在发送完毕后忘记回收了。修改之后,没有发生上面的问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-10-12 02:01:52 | 显示全部楼层
帮顶
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2018-10-12 08:58:34 | 显示全部楼层
程序里有其他任务和空闲任务优先级相同?
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2018-10-12 14:22:14 | 显示全部楼层
HCHDaLeiGe 发表于 2018-10-12 08:58
程序里有其他任务和空闲任务优先级相同?

没有的,空闲任务默认优先级,其他任务的优先级及软件定时器的优先级均高于空闲任务。
真的很奇怪,每次单片机接收一定的数据(还都一样)就产生这样的现象,这可以确定是软件的问题,但是一时半会我还没有查找出来。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-5-12
在线时间
5 小时
发表于 2022-1-12 19:28:59 | 显示全部楼层
我也是同样问题,也没有解决,我没有进HardFault,我就是两个小灯闪烁的任务,不能切换目前也是卡在了同样的位置o(╥﹏╥)o
回复

使用道具 举报

13

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
749
金钱
749
注册时间
2020-6-24
在线时间
311 小时
发表于 2022-1-14 08:25:00 | 显示全部楼层
dqytxdd 发表于 2022-1-12 19:28
我也是同样问题,也没有解决,我没有进HardFault,我就是两个小灯闪烁的任务,不能切换目前也是卡在了同样 ...

      FreeRTOS经常有任务的堆栈溢出,如果使用IAR for ARM,直接打开FreeRTOS-OpenRTOS调试插件就能看到各个任务的堆栈使用情况,溢出的话剩余堆栈为0,把对应任务的堆栈值改大一点就好了。堆栈的问题比较讨厌,设置大了费内存,一般单片机的内存都不富裕,经不起浪费,设置小了就会出现堆栈溢出死机!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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