【反馈】FLASH_DRV_Program 接口因内部指针强转导致非对齐访问 HardFault
-
在使用 LE0 SDK 1_4_0 HOTFIX_001 的 FLASH_DRV_Program 接口时发现一个问题。请问除了使用断言,是否有其他方式预防客户,调用时出现HardFault?因为客户基本没开断言
问题现象:
- 列表当传入的 pData 地址非 4 字节对齐时,程序会触发 HardFault (Unaligned Access)。
原因分析:
- 列表该接口原型定义为 const void * pData,但在内部实现中,直接将其强转为 uint32_t * 使用(源码中带有 /* PRQA S 0316 */ 注释)。
由于 void * 允许任意地址,当应用层传入非对齐地址时,这种强转会导致在访问时,HardFault。
status_t FLASH_DRV_Program(..., const void * pData) { // 强转发生处,PRQA 警告被屏蔽 state->cmdParam.pdata = (const uint32_t *) pData; /* PRQA S 0316 */ // ... }static status_t FLASH_LaunchCommandSequence(uint32_t instance) { // ... // 在此处触发 Unaligned Access HardFault for (uint32_t i = 0; i < state->cmdParam.word_size; i++) { state->cmdParam.dest[i] = state->cmdParam.pdata[i]; } // ... }
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...