ST意法半导体
直播中

张玉兰

7年用户 1365经验值
私信 关注
[问答]

如果没有configASSERT(0)的调试器,则无法检测ASSERT触发器怎么处理?

我请求增强文件 FreeRTOSConfig.h。我观察到 STM32CubeMX 将该文件添加到任何使用 FreeRTOS 版本 10.2.1(带有 CMSIS 版本 2)的 STM32H7 项目。
https://github.com/STMicroelectronics/STM32CubeH7/blob/beced99ac090fece04d1e0eb6648b8075e156c6c/P​​rojects/STM32H743I-EVAL/Demonstrations/STemWin/Config/FreeRTOSConfig.h#L121
在模板文件中:
https://github.com/STMicroelectronics/STM32CubeH7/blob/beced99ac090fece04d1e0eb6648b8075e156c6c/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOSConfig_template.h#L149
在代码执行期间,如果
  • configASSERT(0)
被执行,代码执行就会停止,如果没有调试器,就不可能知道为什么代码会卡住。
因此,我请求请更新ST提供的Header文件,并在语句中添加一个weak函数,稍后可以由用户编码。
是否可以更改以下代码行:
  • #defineconfigASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
到:
  • #define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); rvUserAssertinformFunction(__FILE__, __LINE__); for( ;; );}
并添加:
  • __weak void rvUserAssertInformFunction(char * pF, unsigned long ln)
  • {
  •   pF = pF;
  •   ln = ln;
  • }
请分享您的观点。
我已经向 STM32CubeH7 社区报告了我的担忧,但似乎他们不是需要更改代码的人。
https://github.com/STMicroelectronics/STM32CubeH7/issues/96
请帮忙。








回帖(1)

林倩倩

2023-1-11 14:15:45
在与团队讨论后,由于用户部分是为允许这种灵活性而创建的,因此您需要手动添加或更改它。
作为解决方法,您可以按如下方式更改 USER SECTION:
/* 用户代码开始 1 */
#if defined(__ICCARM__) || 定义(__CC_ARM)|| 定义(__GNUC__)
extern void rvUserAssertInformFunction(char * pF, unsigned long ln);
#万一
#define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); rvUserAssertInformFunction(__FILE__, __LINE__); 为了( ;; );}
/* 用户代码结束 1 */
而在别处定义函数rvUserAssertInformFunction就是他的应用:
- 在 main.c / freertos.c / 其他地方的用户部分
举报

更多回帖

发帖
×
20
完善资料,
赚取积分