打印

汇编指令使用出现 HardFault

[复制链接]
1939|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xu84403451|  楼主 | 2013-6-24 15:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xu84403451 于 2013-6-24 15:20 编辑

如题,本人使用STM32F103ZET6
执行这句汇编时出现HardFault
80563e6:    fa82 fc46     uadd8    ip, r2, r6
机是汇编指令:
uadd8    ip, r2, r6
执行前各寄存器的值
ip(即r12):0x00000000
r2:0x004E4942
r6:0xFFFFFFFF
代码所在位置:0X080563e6
执行完之后的错误状态:
CFCR:0X00010000
HFSR:0X40000000
CFCR:我查资料表明是:取指时访问违例
HFSR:我查资料表明是:硬 fault 是总线 fault,存储器管理 fault 或是
                       用法 fault 上访的结果

不明白如何解决。

沙发
香水城| | 2013-6-24 15:38 | 只看该作者
执行【uaddr8 ip, r2, r6】这句汇编产生hard fault?
这句的意思是把r2和r6寄存器中的值做无符号相加,然后结果放在ip寄存器中。ip就是r12?

CFSR(configurable fault status registers)包含了三个字段,分别是
bit 31~16的Usage fault status
bit15~8的 Bus fault status
bit7~0的 Memeory manage fault status。
现在CFSR=0x0001 0000,那么对应bit16,即UNDEFINSTR,未定义的指令?和LZ查到的“取指令时访问违例”不一致啊?

使用特权

评论回复
板凳
xu84403451|  楼主 | 2013-6-24 16:05 | 只看该作者
谢了!
ip确实是r12,我单步仿真时验证过,
至于CFSR我没查到,我是根据寄存器地址推测,应该我误解了。
如果正如版主所说未定义指令,那指令是编译器产生的,就是编译器有问题?我用arm-none-eabi-gcc

使用特权

评论回复
地板
香水城| | 2013-6-24 16:11 | 只看该作者
什么叫做“单步仿真时验证过ip确实是r12”?

使用特权

评论回复
5
xu84403451|  楼主 | 2013-6-24 19:58 | 只看该作者
就是在线调试时,我进行单步调试,查看对ip寄存器的操作,每个对ip寄存器的操作,对一一对应了r12的变化

使用特权

评论回复
6
xu84403451|  楼主 | 2013-6-24 21:55 | 只看该作者
版主,我犯了一个很弱智的错误,麻烦您了。
我把内核选成M4了

使用特权

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

本版积分规则

8

主题

45

帖子

0

粉丝