打印
[应用相关]

程序一执行80行的除法运算就进入硬中断,这是怎么回事呢?

[复制链接]
619|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxrs|  楼主 | 2019-4-18 19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用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        {}

使用特权

评论回复
沙发
yinxiangh| | 2019-4-18 19:30 | 只看该作者
开环境可能有点特殊,正常情况下是不会执行除法的,而仅仅是一个常量的赋值,那个式子应该在编译的时候就被计算出来了。

使用特权

评论回复
板凳
songqian17| | 2019-4-18 19:35 | 只看该作者
看看汇编代码是怎么回事吧,到底是执行了什么指令。

使用特权

评论回复
地板
songqian17| | 2019-4-18 19:37 | 只看该作者
你的m是不是给16位寄存器赋值了?STM32很多寄存器都是16位的。

使用特权

评论回复
5
happy_10| | 2019-4-18 19:41 | 只看该作者

UINT32 m

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

使用特权

评论回复
6
bqyj| | 2019-4-18 19:45 | 只看该作者
m没有赋值给寄存器,m就是个普通变量

使用特权

评论回复
7
wenfen| | 2019-4-18 19:48 | 只看该作者

好像是没有给寄存器赋值,因此才进中断吧。

使用特权

评论回复
8
songqian17| | 2019-4-18 19:51 | 只看该作者
单步调试看看程序进入哪一步了?

使用特权

评论回复
9
chenho| | 2019-4-18 19:56 | 只看该作者

是不是被除数是0了?

使用特权

评论回复
10
xxrs|  楼主 | 2019-4-18 19:59 | 只看该作者

唉,还是没有什么结果,算了,先结贴吧,多谢大家啦

使用特权

评论回复
11
paotangsan| | 2019-5-9 13:40 | 只看该作者
是不是溢出了

使用特权

评论回复
12
木木guainv| | 2019-5-9 14:19 | 只看该作者
别用除法  用移位试试看

使用特权

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

本版积分规则

405

主题

7415

帖子

1

粉丝