当按下 "退出 "键时,Atmel Studio中的调试跳转到代码的野生区域。

问题描述 投票:0回答:1

大家好!我正在运行最新的Atmel Studio 7和所有的补丁。

我正在运行最新的Atmel Studio 7和所有的补丁.AVR-GCC与一个32U4的avr和一个Atmel-ICE通过JTAG使用。

我在一个ISR函数中,每次按压都能正常工作,直到我调用一个单独的函数,当我到达这个函数时,我在第1行代码中,下一次按压的步骤没有进入下一行,因为它显然应该,但在一个随机的地方跳回我的ISR函数的中间。

这段代码完全不能正常工作,但在最后几个变化之前是可以的。

我该如何解决这个问题?

谢谢!大家好

avr avr-gcc atmelstudio
1个回答
1
投票

我会先让构建生成汇编列表文件(-Wa,adhlns),然后还对最终的二进制进行拆解(avr-objdump -h -S). 这使我有可能检查实际生成的代码,并且当我改变了C源代码并重新构建时,继续观察生成的代码的变化。(我不知道如何用Atmel studio真正做到这一点,我只有基于make和avr-gcc的构建系统的经验)。

然后我可以检查编译器优化选项(-O2-O1-O3-Os 或......),以及所选的优化级别如何分配不同C语句的汇编指令。AFAICT,在AVR上,优化大小(-Os)自动使代码变得很快(在AVR上每条指令都需要同样的时间,所以指令越少,代码越小,执行速度越快),而且指令的洗牌量非常有限,所以很容易读取。


0
投票

当你调试一个ISR的时候不要忘记,在中断点上cpu会停止,但是所有的IO会继续运行,而且你可能在按下一个停止点的时候会触发一个新的中断,所以其他的中断点可能会被触发,调试器会在另一个地方停止。

你是否在最后的RETI之前启用了中断?

© www.soinside.com 2019 - 2024. All rights reserved.