打印
[技术问答]

NANO102 出问题,怎么回事

[复制链接]
1210|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区,不应该出错的。主要是执行那条汇编出错。

使用特权

评论回复
5
john_lee| | 2016-4-27 20:04 | 只看该作者
目标地址必须对齐 4 字节边界,这是 cortex-m0 要求的。你的 r0 最低两位不是 0,没有对齐。

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
ccxlslr + 4 很给力!
6
Roderman_z| | 2016-4-27 21:08 | 只看该作者
感觉是数组越界导致的

使用特权

评论回复
7
ccxlslr|  楼主 | 2016-4-28 08:56 | 只看该作者
john_lee 发表于 2016-4-27 20:04
目标地址必须对齐 4 字节边界,这是 cortex-m0 要求的。你的 r0 最低两位不是 0,没有对齐。 ...

估计就是这个,我重建缓存试一下!

使用特权

评论回复
8
ccxlslr|  楼主 | 2016-4-28 09:13 | 只看该作者
john_lee 发表于 2016-4-27 20:04
目标地址必须对齐 4 字节边界,这是 cortex-m0 要求的。你的 r0 最低两位不是 0,没有对齐。 ...

就是没对齐,新建uint32_t类型,再拷贝内存,再强制转换成float指针,工作正常

使用特权

评论回复
9
LearningASM| | 2016-4-28 09:53 | 只看该作者
求贴出完整一点的代码

使用特权

评论回复
10
LearningASM| | 2016-4-28 09:56 | 只看该作者
分解一下
float *p = (float *)(buf + 23);

*p =  (float *)???

return *p * 100;

使用特权

评论回复
11
john_lee| | 2016-4-28 15:15 | 只看该作者
ccxlslr 发表于 2016-4-28 09:13
就是没对齐,新建uint32_t类型,再拷贝内存,再强制转换成float指针,工作正常 ...

搞定了就结贴给分噻。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

587

帖子

3

粉丝