cloud_r9yf 发表于 2024-4-23 21:17:08

stm32f429+freertos+fatfs读写sd卡卡死在configASSERT( pxUnblockedTCB )

用stm32f429+freertos通过串口采集传感器数据然后用fatfs写入sd卡,两个采集传感器任务一个写sd卡,采集到传感器数据后置信号量给写sd卡任务,当只开启一个传感器采集任务和一个写sd卡任务时程序正常采集及写sd卡,当开启两个传感器任务时,程序卡死在xTaskRemoveFromEventList( const List_t * const pxEventList )的configASSERT( pxUnblockedTCB );,求大佬帮助十分感谢!!!

eric2013 发表于 2024-4-23 21:28:00

configASSERT( pxUnblockedTCB )断言失败,说明这个TCB任务控制句柄失效了,也就是你的程序应该有错误操作。

然后说你的这个程序实现,你这个是串口采集,采集速度远远低于SD卡写入速度,放在一个任务处理即可。多个任务完没必要。

cloud_r9yf 发表于 2024-4-24 10:00:39

好的好的,我程序整体用到了就是freertos+fatfs然后串口采集那边移植了咱们的modbus协议栈,因为是第一次写freertos程序想问一下fatfs和串口modbus那边有什么操作是不允许被打断的么,比如读写sd卡或者收发串口的时候需要进行一些关闭打开中断的操作么,十分感谢!!

cloud_r9yf 发表于 2024-4-24 13:58:15

还有一个情况是这样在读sd卡的时候,有时候需要连续的去读sd卡,但是会造成读取失败f_read返回失败,所以想加临界区保护一下就加了taskENTER_CRITICAL();和taskEXIT_CRITICAL();,但是加了之后发现会卡死在 vListInsert 函数里面的for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext )

cloud_r9yf 发表于 2024-4-24 16:00:13

硬汉哥,还想问一下我configASSERT( pxUnblockedTCB )断言失败,您说程序有错误操作,具体是指什么样的操作呢,我找了我的程序没有发现什么明显错误的地方呀

cloud_r9yf 发表于 2024-4-24 19:23:37

程序还会正常跑一段时间后卡死在configASSERT( pxUnblockedTCB );进调试看了一下是在xQueueGiveFromISR这个函数里面调用的时候卡死的,在中断中用到的freertos函数只有在一个定时器中断里用到,这个定时器中断的优先级还是5没有超范围,主要程序好像是随机卡死在configASSERT( pxUnblockedTCB )上电后会正常跑起来但是不知道什么时候就卡死在configASSERT( pxUnblockedTCB )这里了

cloud_r9yf 发表于 2024-4-24 19:30:56

而且卡死在configASSERT( pxUnblockedTCB )时间还不一定有时候正常运行很久才卡死有时候上电没过多久就就卡死

eric2013 发表于 2024-4-25 09:13:49

cloud_r9yf 发表于 2024-4-24 19:23
程序还会正常跑一段时间后卡死在configASSERT( pxUnblockedTCB );进调试看了一下是在xQueueGiveFromISR这个 ...
发你的代码看下。

yangweikang 发表于 2024-4-25 09:46:57

我昨天也遇到了这个问题,你现在用的freertos是哪个版本

cloud_r9yf 发表于 2024-4-27 18:02:01

我调用了看每个任务栈的剩余空间后发现是,有一个采集任务的任务栈设置的太小了,于是把栈调大后就没有这个问题了,然后发现连续读sd卡失败是因为和同优先级的任务调度了,在用f_mount挂载后任务被切换后回来就不能正常进行读写了

cloud_r9yf 发表于 2024-4-27 18:04:31

yangweikang 发表于 2024-4-25 09:46
我昨天也遇到了这个问题,你现在用的freertos是哪个版本

我用的就是cubemx生成的,应该是cmsis_v2?
页: [1]
查看完整版本: stm32f429+freertos+fatfs读写sd卡卡死在configASSERT( pxUnblockedTCB )