[技术问答] NANO102 出问题,怎么回事

[复制链接]
1477|10
 楼主| ccxlslr 发表于 2016-4-27 16:59 | 显示全部楼层 |阅读模式
型号为NANO102LC2AN , RAM 8K


LDR      r0,[r0,#0x00] 执行后出错, R0 = 0x20001733;
执行这条指令后HardFault。

C源码为:
float *p = (float *)(buf + 23);
return *p * 100;

在第二条语名时出错。汇编就是上面那条。
09kk小熊 发表于 2016-4-27 17:01 | 显示全部楼层
可能是数组越界了
229125617 发表于 2016-4-27 17:06 | 显示全部楼层
你好,我是新唐代理,有需要可以加Q715209572
 楼主| ccxlslr 发表于 2016-4-27 17:41 | 显示全部楼层
09kk小熊 发表于 2016-4-27 17:01
可能是数组越界了

没有越界,再说,越界后,还是在RAM区,不应该出错的。主要是执行那条汇编出错。
john_lee 发表于 2016-4-27 20:04 | 显示全部楼层
目标地址必须对齐 4 字节边界,这是 cortex-m0 要求的。你的 r0 最低两位不是 0,没有对齐。

评分

参与人数 1威望 +4 收起 理由
ccxlslr + 4 很给力!

查看全部评分

Roderman_z 发表于 2016-4-27 21:08 | 显示全部楼层
感觉是数组越界导致的
 楼主| ccxlslr 发表于 2016-4-28 08:56 | 显示全部楼层
john_lee 发表于 2016-4-27 20:04
目标地址必须对齐 4 字节边界,这是 cortex-m0 要求的。你的 r0 最低两位不是 0,没有对齐。 ...

估计就是这个,我重建缓存试一下!
 楼主| ccxlslr 发表于 2016-4-28 09:13 | 显示全部楼层
john_lee 发表于 2016-4-27 20:04
目标地址必须对齐 4 字节边界,这是 cortex-m0 要求的。你的 r0 最低两位不是 0,没有对齐。 ...

就是没对齐,新建uint32_t类型,再拷贝内存,再强制转换成float指针,工作正常
LearningASM 发表于 2016-4-28 09:53 | 显示全部楼层
求贴出完整一点的代码
LearningASM 发表于 2016-4-28 09:56 | 显示全部楼层
分解一下
float *p = (float *)(buf + 23);

*p =  (float *)???

return *p * 100;
john_lee 发表于 2016-4-28 15:15 | 显示全部楼层
ccxlslr 发表于 2016-4-28 09:13
就是没对齐,新建uint32_t类型,再拷贝内存,再强制转换成float指针,工作正常 ...

搞定了就结贴给分噻。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

588

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部