久芯网

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

avatar C^ 提问时间: 2023-07-31 22:07:45 / 未解决

我用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个回答
  • avatar C^
    回答时间: 2023-07-31 22:33:34

    问题解决了,不是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条语句放在创建信号量后和任务调度前面则正常

会员中心 微信客服
客服
回到顶部