请选择 进入手机版 | 继续访问电脑版

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

STM32H747双核的HSEM运行FreeRtos系统会卡死

[复制链接]
C^ 提问时间:2022-4-22 09:53 / 未解决

我用STM32H747的双核HSEM,CM4内核给CM7内核发送HSEM中断,目前的现象是这样的

1 .CM4跑裸机,CM7跑裸机,CM7能正常响应中断并处理

2.CM4跑裸机,Cm7跑FreeRtos,CM7在中断中使用SemaphoreGiveFromISR或任务二值信号量这种信号量时,程序就会卡死在在configASSERT( pxQueue );中,去掉SemaphoreGiveFromISR就正常。

3。怀疑是FreeRtos问题,有做了实验,使用了按键中断,中断优先级和HSEM一样,都是6,在中断可以里使用SemaphoreGiveFromISR或任务二值信号量,不会卡死。

FREERTOS中的优先级数值设定的参数configMAX_SYSCALL_INTERUPT_PRORITY是默认值5

我又看了下,信号量的值是0,因此死在了断言函数中,但不明白为什么信号量时0

请问这是什么问题?

收藏 评论1 发布时间:2022-4-22 09:53

举报

1个回答
C^ 回答时间:2022-4-22 10:39:26

问题解决了,不是FreeRtos的问题,也不是中断优先级的问题。HSEM的中断我是参考例程做的。

一开始就会用HAL_HSEM_FastTake(HSEM_ID_0); HAL_HSEM_Release(HSEM_ID_0,0);这两条语句来唤醒CPU2,这个时候如果你开了HSEM1中断,就会进入中断。如果你这时候的FreeRtos的信号量和任务还没有创建,此时进入中断后就会出错。调整下顺序,将HAL_HSEM_FastTake(HSEM_ID_0); HAL_HSEM_Release(HSEM_ID_0,0);这2条语句放在创建信号量后和任务调度前面则正常

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版