在线时间18 小时
UID3039145
ST金币189
蝴蝶豆0
注册时间2016-9-30
该用户从未签到
中级会员
- 最后登录
- 2018-10-15
|
本帖最后由 lymzzyh 于 2018-9-19 17:27 编辑
库版本V1.7.2 文件 stm32f4xx_hal_sd.c
行数 503
代码节选:
- HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout)
- {
- SDIO_DataInitTypeDef config;
- uint32_t errorstate = HAL_SD_ERROR_NONE;
- uint32_t tickstart = HAL_GetTick();
- uint32_t count = 0U, *tempbuff = (uint32_t *)pData;
- /* ......... */
- *tempbuff = SDIO_ReadFIFO(hsd->Instance);
- /* ......... */
- }
复制代码 bug1: 此处pData 为u8 指针 强转 32位 编译后使用STM指令当pData未4字节对齐时将造成非对齐访问异常。
bug2: 若pData未4字节对齐,使用DMA模式时会强行向低地址进行4字节对齐造成向低地址的内存越界。
注:其中图示代码为bug1所出现的bug点,修复建议:检测对齐,发现未对齐时使用一个32位变量进行数据搬运。
bug2未进行查找错误点 望ST工程师自行查找。
另:对于未知的字节流数据进行非数据等长指针的强制类型转换的这种低级错误发生的ST身上令我等非常失望,希望相关人员(大学生临时工)尽快修复
|
|