打印
[STM32F1]

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

[复制链接]
337|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxrs|  楼主 | 2021-3-18 23:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用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| | 2021-3-18 23:22 | 只看该作者
开环境可能有点特殊,正常情况下是不会执行除法的,而仅仅是一个常量的赋值,那个式子应该在编译的时候就被计算出来了。

使用特权

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

使用特权

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

使用特权

评论回复
5
happy_10| | 2021-3-18 23:27 | 只看该作者

UINT32 m

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

使用特权

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

使用特权

评论回复
7
wenfen| | 2021-3-18 23:32 | 只看该作者
好像是没有给寄存器赋值,因此才进中断吧。

使用特权

评论回复
8
songqian17| | 2021-3-18 23:34 | 只看该作者
单步调试看看程序进入哪一步了?

使用特权

评论回复
9
chenho| | 2021-3-18 23:36 | 只看该作者
是不是被除数是0了?

使用特权

评论回复
10
supernan| | 2021-3-18 23:37 | 只看该作者
是不是溢出了

使用特权

评论回复
11
xxrs|  楼主 | 2021-3-18 23:38 | 只看该作者
别用除法  

使用特权

评论回复
12
houcs| | 2021-3-18 23:41 | 只看该作者
用移位试试看

使用特权

评论回复
13
xxrs|  楼主 | 2021-3-18 23:42 | 只看该作者
唉,还是没有什么结果,算了,先结贴吧,多谢大家啦

使用特权

评论回复
14
coshi| | 2021-4-8 13:41 | 只看该作者
非常常用的芯片

使用特权

评论回复
15
wiba| | 2021-4-8 13:44 | 只看该作者
有可能是数据已出了

使用特权

评论回复
16
zljiu| | 2021-4-8 13:46 | 只看该作者
是8位的寄存器还是16位的寄存器啊

使用特权

评论回复
17
aoyi| | 2021-4-8 13:47 | 只看该作者
这点代码  不至于的

使用特权

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

本版积分规则

405

主题

7415

帖子

1

粉丝