打印
[STM32F4]

keil的DEBUG问题,单步运行和大步运行结果不一样

[复制链接]
2098|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
USART 的TC 函数初始化里面有clear tc,单步运行的时候  执行完函数,TC是0,
但是整个函数直接一步运行完TC是1. 问题描述完 ,请大神解释解释
沙发
huangcunxiake| | 2017-1-19 17:02 | 只看该作者
跟你要测试的功能影响大吗

使用特权

评论回复
板凳
这条路能走多远|  楼主 | 2017-1-19 17:54 | 只看该作者
huangcunxiake 发表于 2017-1-19 17:02
跟你要测试的功能影响大吗

一开始还是挺坑我的,因为发送嘛,他不复位的话,我第一个发送的数就会还没发完就发第二个。
虽然现在我程序调好了,但我还是想知道其中什么原因。

使用特权

评论回复
地板
炳程| | 2017-1-19 22:22 | 只看该作者
我也发现这种情况了,USART_Cmd(USART6, ENABLE);执行完TC位会置1,我的代码里接着跟了一句USART_ClearFlag(USART6, USART_FLAG_TC);单步执行完确实TC清零,可是如果不用单步调试,直接执行完会发现TC位没有被清零,还是1,即使换成USART_ClearITPendingBit(USART6, USART_IT_TC);问题还是存在,暂时也没有好的解释,希望有了解的能分享一下心得

使用特权

评论回复
5
这条路能走多远|  楼主 | 2017-1-19 23:15 | 只看该作者
炳程 发表于 2017-1-19 22:22
我也发现这种情况了,USART_Cmd(USART6, ENABLE);执行完TC位会置1,我的代码里接着跟了一句USART_ClearFlag ...

我也不知道为什么 我用DEBUG 看外部中断也有问题。代码前后设置不一样,不过是初始化后面的代码,而我两次执行初始化代码前的代码也有电平的想不通的改变。
现在我用串口发送就先在前面加一句while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);这样就不会丢失

使用特权

评论回复
6
lyncxy119| | 2017-1-20 12:54 | 只看该作者
可能是编译器优化的原因,有时只是显示问题,建议用串口把调试的值打印出来,这样最可靠

使用特权

评论回复
7
wangyisnen007| | 2017-1-20 15:03 | 只看该作者
我模糊的记得看过的一篇**说,假如 被读的寄存器 是那种读后就清零的寄存器,那么寄存器的值被 显示寄存器值那个窗口 读取以后,就会被清除,然后你再运行程序里的 读寄存器值 ,读取到的就是0了。
记不太清是不是keil了还是IAR,仅供参考。

使用特权

评论回复
8
ctsdswk| | 2017-1-20 15:26 | 只看该作者
有些寄存器被仿真器读了后就马上清零了,程序就读不到了。

使用特权

评论回复
9
这条路能走多远|  楼主 | 2017-1-20 16:04 | 只看该作者
但是它没清

使用特权

评论回复
10
这条路能走多远|  楼主 | 2017-1-20 16:05 | 只看该作者
ctsdswk 发表于 2017-1-20 15:26
有些寄存器被仿真器读了后就马上清零了,程序就读不到了。

但是TC它没清

使用特权

评论回复
11
lyn3210| | 2017-2-9 16:31 | 只看该作者

使用特权

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

本版积分规则

45

主题

112

帖子

0

粉丝