你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【严重bug,世界末日】STM32 F4 HAL库 V1.7.2中的非对齐访问

[复制链接]
lymzzyh 发布时间:2018-9-19 17:23
本帖最后由 lymzzyh 于 2018-9-19 17:27 编辑
. w. Q0 o' S8 F5 e2 i" O) X- u
0 k' h6 h2 R1 k: n* J7 N9 G库版本V1.7.2  文件 stm32f4xx_hal_sd.c
* c" o2 o) u4 s: y. g行数 5033 E4 w' M6 c) f% ^" e( `7 C
代码节选:
  N6 H( K* U. H+ K8 r
  1. HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout)
    . ?2 `9 L' |8 S1 F
  2. {
    6 f+ n! [* ?+ O  s0 g
  3.   SDIO_DataInitTypeDef config;/ j9 |3 v$ q8 J6 B1 b% O9 E
  4.   uint32_t errorstate = HAL_SD_ERROR_NONE;
    ' D" J0 e4 ~+ n+ N, ]" n1 w, S
  5.   uint32_t tickstart = HAL_GetTick();
    " u3 |0 v/ e$ i% J4 C* [
  6.   uint32_t count = 0U, *tempbuff = (uint32_t *)pData;* `3 Y# j8 `2 O& j
  7. /* ......... */
    ! G+ T* b- k( Z" J0 ?
  8. *tempbuff = SDIO_ReadFIFO(hsd->Instance);  }3 g: Z9 l3 ^3 V+ K5 j
  9. /* ......... */6 W1 ^% w/ P7 N$ C1 i4 q2 ?
  10. }
    9 Y+ D: E  D# v  M& c
复制代码
bug1: 此处pData 为u8 指针 强转 32位 编译后使用STM指令当pData未4字节对齐时将造成非对齐访问异常。
/ G% J% C; d0 g/ {1 D) O, e9 Abug2: 若pData未4字节对齐,使用DMA模式时会强行向低地址进行4字节对齐造成向低地址的内存越界。
+ ?  L6 s$ j7 G# E注:其中图示代码为bug1所出现的bug点,修复建议:检测对齐,发现未对齐时使用一个32位变量进行数据搬运。
8 f# U: D4 E- p0 f- m# m' T, @bug2未进行查找错误点 望ST工程师自行查找。2 q: Z9 V9 W6 k0 }

" L4 M7 |, v2 V另:对于未知的字节流数据进行非数据等长指针的强制类型转换的这种低级错误发生的ST身上令我等非常失望,希望相关人员(大学生临时工)尽快修复
0 x) v' B3 j+ Z) V% q
赞 收藏 2 评论16 发布时间:2018-9-19 17:23

举报

16个回答
lymzzyh 回答时间:2018-9-19 17:41:24
甩锅三连:别人怎么没问题;是你不会用;真是辣鸡
lymzzyh 回答时间:2018-9-20 09:36:54
stm1024 发表于 2018-9-20 08:30
/ b' R' b& N# w( H+ K! H还好不是硬件bug,谈不上世界末日,而且这个锅,真的可以甩给编译器。8 w! u6 g( {+ y5 [/ ^

. `' H5 x, g9 o, G- x" j7 `4 n4 Z不过作为一个库,也确实应该考虑完 ...

  x. ]; q" {+ M9 v7 ^不关编译器的事情 指针强转是编译器无法预判是否对齐的 所以只能用STM指令去处理
lymzzyh 回答时间:2018-9-19 19:06:25
浪花雷雨 发表于 2018-9-19 17:50
9 M7 A" o( [8 z. m" ]认真三连问:是这样的吗?为什么这样?该改吗?
) k: j* X8 [) R& y$ W
回答三连:是这样的,暴露接口不对,该改
lymzzyh 回答时间:2018-9-19 17:26:30
手工置顶
lymzzyh 回答时间:2018-9-19 17:41:06
否认三连 : 就是这么设计的;不是bug;下个版本再优化
浪花雷雨 回答时间:2018-9-19 17:50:37
认真三连问:是这样的吗?为什么这样?该改吗?
STM1024 回答时间:2018-9-20 08:30:54
还好不是硬件bug,谈不上世界末日,而且这个锅,真的可以甩给编译器。
/ s% s, Z1 p) B) a8 k; |# c! p+ @9 G
不过作为一个库,也确实应该考虑完善一些。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zero99 回答时间:2018-9-20 08:45:30
lymzzyh 发表于 2018-9-19 17:41
0 f1 `! W- ~7 Z, I3 t* ~+ K2 K# q甩锅三连:别人怎么没问题;是你不会用;真是辣鸡

+ [: x0 b, V. J淡定一点,骚年
uu799 回答时间:2018-9-20 09:36:47
不用sd卡不就不会触发bug了吗,你真是辣鸡!
lymzzyh 回答时间:2018-9-20 09:37:26
zero99 发表于 2018-9-20 08:45
% J9 \" K- j1 ~: U# o9 m4 H淡定一点,骚年
, P; p4 u4 j, P( M' w% J3 O
不不不 这是防喷手段 我已经帮喷子 喷过我自己了
Mandelbrot_Set 回答时间:2018-9-20 10:19:38
pData实际上是R1,将R1的值复制到栈好像没啥问题...

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

uu799 回答时间:2018-10-8 14:02:46
同样遇到, 坑了一个国庆,不修天理难容
lymzzyh 回答时间:2018-10-12 15:55:31
uu799 发表于 2018-10-8 14:02- S. g0 j+ t1 ]8 B, I  ^
同样遇到, 坑了一个国庆,不修天理难容

; A3 q4 ], o$ H5 m0 u8 i& C到现在都没有FAE现身说法呢
lymzzyh 回答时间:2018-10-12 16:00:29
难道丢一个临时工出来背锅都不愿意的吗
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版