打印
[应用相关]

进行除法运算就进硬中断

[复制链接]
737|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Erichk|  楼主 | 2017-11-20 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用CodeSourcery+jlink+openocd开发stm32

平台:stm32f103zet6
flash:内置512K(大容量)
sram:内置64K+外部512K
启动文件:startup_stm32f10x_hd.c
链接脚本:stm32f10x_flash_extsram.ld


程序一执行80行的除法运算就进入硬中断,这是怎么回事呢?
相关部分如下:

UINT32 m;

Breakpoint 2, Task_Start (p_arg=0x0) at main.c:80
80        m = 72000000 / 16;   //把72000000改小变成例如32就OK, 这是什么情况?
(gdb) n
^C
Program received signal SIGINT, Interrupt.
HardFault_Handler () at stm32f10x_it.c:64
64        {}
沙发
Thorald| | 2017-11-20 17:23 | 只看该作者
开环境可能有点特殊,正常情况下是不会执行除法的,而仅仅是一个常量的赋值,那个式子应该在编译的时候就被计算出来了。

使用特权

评论回复
板凳
Bjorn| | 2017-11-20 17:32 | 只看该作者
看看汇编代码是怎么回事吧,到底是执行了什么指令。

使用特权

评论回复
地板
Rollo| | 2017-11-20 17:42 | 只看该作者
你的m是不是给16位寄存器赋值了?STM32很多寄存器都是16位的。

使用特权

评论回复
5
Rangar| | 2017-11-20 20:48 | 只看该作者
UINT32 m

这个M应用有符号数,因为结果中有小数部分,不应定义成无符号数

使用特权

评论回复
6
Stannis| | 2017-11-20 20:55 | 只看该作者

m没有赋值给寄存器,m就是个普通变量

使用特权

评论回复
7
一路向北lm| | 2017-11-20 22:05 | 只看该作者
好像是没有给寄存器赋值,因此才进中断吧。

使用特权

评论回复
8
sdCAD| | 2017-11-20 22:20 | 只看该作者
单步调试看看程序进入哪一步了?

使用特权

评论回复
9
sdCAD| | 2017-11-20 22:23 | 只看该作者
是不是被除数是0了?

使用特权

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

本版积分规则

99

主题

500

帖子

0

粉丝