OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3766|回复: 11

keil5单步调试的问题

[复制链接]

11

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2013-9-2
在线时间
9 小时
发表于 2018-9-4 10:46:36 | 显示全部楼层 |阅读模式
5金钱
最近,使用KEIL5建立一个工程,MCU是NRF52832,全速运行没有问题.但是单步运行时,存在一个问题.
具体表现是:不管是否满足条件,代码会按照顺序一行一行的执行下去.

举例说明:软件复位后,程序运行到下面代码中黑体部分,应该跳转到main函数,但是,单步运行时,代码会跑到 NMI_Handler PROC,然后一行一行执行下去.

很迷惑,有谁知道这是啥原因,谢谢啦!

LDR R0,=SystemInit
BX R0

LDR R0,=main
BX R0
ENDP

NMI_Handler PROC
            EXPORT NMI_Handler        [weak]
            B      .
            ENDP
HardFault_Handler\
            PROC
            EXPORT HardFault_Handler  [weak]
            B      .
            ENDP
...
...
...


众人划桨开大船!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2018-9-4 11:05:26 | 显示全部楼层
没试过,都是打印来调试的,帮顶。仿真的太麻烦了,在有输入输出的时候,环境根本模拟不出。最多加断点调试。还是串口调试方便
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-4 11:07:22 | 显示全部楼层
我碰到过有类似的现象, 但不完全一样
是因为断点设得太多, 删除所有断点, 退出再启动就好了
你的情况不知道是否一样, 你尽管试试吧
回复

使用道具 举报

11

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2013-9-2
在线时间
9 小时
 楼主| 发表于 2018-9-4 11:26:48 | 显示全部楼层
edmund1234 发表于 2018-9-4 11:07
我碰到过有类似的现象, 但不完全一样
是因为断点设得太多, 删除所有断点, 退出再启动就好了
你的情况 ...

我按照你说的试了一下,问题没有解决.
单步调试之前,我把所有的断点都清除了,感觉不太像是断点的问题.
不过,还是很感谢你!
众人划桨开大船!!!
回复

使用道具 举报

11

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2013-9-2
在线时间
9 小时
 楼主| 发表于 2018-9-4 11:30:11 | 显示全部楼层
hgr211 发表于 2018-9-4 11:05
没试过,都是打印来调试的,帮顶。仿真的太麻烦了,在有输入输出的时候,环境根本模拟不出。最多加断点调试 ...

我这不牵扯到输入和输出,就是程序的运行,全速运行和断点调试程序运行都正常,就是单步运行时PC就乱了,程序也跑乱了,不利于后期调试.
谢谢!
众人划桨开大船!!!
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2018-9-4 11:37:08 | 显示全部楼层
加个断点,先运行到程序初始化完成,再单步。另外你不能开中断,特别是定时中断。
回复

使用道具 举报

11

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2013-9-2
在线时间
9 小时
 楼主| 发表于 2018-9-4 11:54:04 | 显示全部楼层
hgr211 发表于 2018-9-4 11:37
加个断点,先运行到程序初始化完成,再单步。另外你不能开中断,特别是定时中断。

1.png
如上图所示:我把system_Init中所有的中断都关闭了,程序依然跑到testBuf[0]++的位置,具体如图所示.
按照正确的逻辑,程序不能进入到if(testCnt>=1000)条件语句中(因为testCnt是在定时器中断中进行累加的,默认为0,而我又将定时器关闭了),还是在乱跑.
谢谢!
众人划桨开大船!!!
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2018-9-4 17:05:39 | 显示全部楼层
好像有查看变量的窗口,来跟踪的。可以去百度看看
回复

使用道具 举报

11

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2013-9-2
在线时间
9 小时
 楼主| 发表于 2018-9-4 17:34:49 | 显示全部楼层
hgr211 发表于 2018-9-4 17:05
好像有查看变量的窗口,来跟踪的。可以去百度看看

你说的意思是使用watch窗口监测testCnt的值 还是 跟踪PC指针的值?
使用watch窗口监测testCnt的值是0,虽然不满足条件,但依然进入条件语句中了.
PC指针异常
谢谢
众人划桨开大船!!!
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-9-5 10:17:28 | 显示全部楼层
你断点设置太多了吧!!
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-9-5 10:19:25 | 显示全部楼层
先设置一个断点,运行到了之后再单步调试。
回复

使用道具 举报

11

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2013-9-2
在线时间
9 小时
 楼主| 发表于 2018-9-10 10:53:24 | 显示全部楼层
douxiaolingyun 发表于 2018-9-5 10:19
先设置一个断点,运行到了之后再单步调试。

我的确是设置了一个断点(确定清除了其他断点)之后,单步运行后出现异常的.....
众人划桨开大船!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 16:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表