fread读取一定数据时候出现崩溃UNALIGNED错误

2020-5-7 15:01 [复制链接] 11 504

本帖最后由 肉肉肉肉肉肉多 于 2020-5-7 15:03 编辑 9 T7 p% Y5 w4 T9 J/ z* E

4 Y; E; v5 o0 a* ~% {平台:STM32F429的板子 armflyv6的开发板7 X! j& x" u: D/ `% A4 S  w" c: x& I

! x& c8 p0 i3 y6 d2 y6 x1 y0 }1 `9 l0 _7 w
操作:! x* u8 m( e* X5 H0 J3 z( h+ C: r
1:进行使用SD卡进行文件读取
, i3 \3 R( y$ `9 ~; Y2 j  s2:文件为测试文件,小端保存的文件。格式为前四个字节表示长度n + n个长度的数据的保存方式。
1 h* o- B) s6 \" W$ n2 [. p# I9 e0 j如下图所示的保存方式
6 N& k3 I5 ~$ P2 @
6 m$ X- O) U8 \$ x! i, o' X6 {1 F 1.jpg # {' g% f# t( H* o. p5 p2 \

  Y/ y3 T8 P. s3 C4 M/ {也就是先读取4个字节,判断长度为n,在读取n个长度的字节的循环读取文件逻辑。等进行到读取1020个长度的时候就会出现 UNALIGNED 下面错误
  t2 u, j: Q; G: {1 g" k0 J& v
$ k; U/ e! E, L0 @( x" V 2.png
5 b( j9 q2 B9 v2 l5 J: I, e4 M  g' P! C
断掉调试时候寄存器如下
( Q- i8 B- w& o' T; n" O5 L0 z1 K: I" s( u% ]
3.png * A5 M% a8 n/ }, s6 U" y0 K) C
. A6 s/ n- T1 H9 @2 r& l
从打印信息看r3 r4的寄存器貌似出错了。参数传递或者局部遍历错误?从断点信息看好像是参数传递错误,
: z0 N0 {$ |: ?6 p$ C, \9 G7 x4 ^6 ~) K+ y
示例代码附件, void read_test().c (1.78 KB, 下载次数: 70)
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2020-5-7 19:08:03 | 显示全部楼层
你这个测试文件是不是有问题?是个什么类型的文件呀?
使用道具 举报 回复
发表于 2020-5-7 19:09:15 | 显示全部楼层
如果上传时有不支持的文件,可以选择打包成 .zip 文件上传
使用道具 举报 回复
发表于 2020-5-8 10:17:53 | 显示全部楼层
RT-Thread小喇叭 发表于 2020-5-7 19:08& n- K9 {; S( _0 h' i1 F
你这个测试文件是不是有问题?是个什么类型的文件呀?
2 y: b5 g( C9 V  D5 `# J
测试文件没有问题。 我换了另外一个文件读取也是同样问题,你可以更换文件
使用道具 举报 回复
发表于 2020-5-8 11:30:26 | 显示全部楼层
RT-Thread小喇叭 发表于 2020-5-7 19:085 h. R5 z  _7 ?$ J* C2 i
你这个测试文件是不是有问题?是个什么类型的文件呀?
) ]. W2 E9 g8 z0 b, Y9 u# a
文件类型是字节保存的一个数据文件,我下载了一个其他的文件 测试也是同样的问题
使用道具 举报 回复
发表于 2020-5-11 16:19:55 | 显示全部楼层
我有一个文件的buf 设置为512 正常,设置为1024 出现 UNALIGNED错误
使用道具 举报 回复
发表于 2020-5-11 16:26:31 | 显示全部楼层
根据PC和LR看下具体出问题的指令是哪条?代码中是否有强转指针类型?
* r3 R) c  b: O我怀疑你的buf类型是char,而访问时是当成int来访问的。
' G( A9 z$ ~6 tchar buf[1024] 修改为  int buf[1024/4] 也许可以改善。
使用道具 举报 回复
发表于 2020-5-13 16:45:25 | 显示全部楼层
keguo 发表于 2020-5-11 16:19
/ J$ i* `+ g) p# c我有一个文件的buf 设置为512 正常,设置为1024 出现 UNALIGNED错误
6 h. I! z. i7 X8 }
所以应该是哪里有个BUG的问题,不可能设置为1024个就出错了
使用道具 举报 回复
发表于 2020-5-13 16:47:44 | 显示全部楼层
aozima 发表于 2020-5-11 16:265 }% A* [% u7 s, c
根据PC和LR看下具体出问题的指令是哪条?代码中是否有强转指针类型?
! }$ H% }- @. C5 |2 H/ U5 X" T我怀疑你的buf类型是char,而访问时是 ...
* Q8 d  m6 t+ H4 ~
出错就是fread出错的,我改下类型试下
使用道具 举报 回复
发表于 2020-5-15 19:05:27 | 显示全部楼层
drv_sdio.c 394行,把memcpy改成rt_memcpy试试
使用道具 举报 回复
发表于 2020-5-27 14:54:43 | 显示全部楼层
su5176 发表于 2020-5-15 19:051 Q* s0 P0 N6 }- ]  T! l
drv_sdio.c 394行,把memcpy改成rt_memcpy试试
0 w1 S7 P$ h5 a% Q) p+ ?9 M
暂时没用sdio模式了,使用spi 没出问题,有空我后面看下sdio的驱动  发现rtt确实底层有很多支持有问题,最近看usb host的结果那些class都还没移植支持哎
使用道具 举报 回复
发表于 2020-7-1 15:43:17 | 显示全部楼层
建议看看这里的帖子
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 3 主题
  2. 153 帖子
  3. 153 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表