我正在使用 STVD IDE 对 STM8S 微 Controller 进行编程。它使用 COSMIC 编译器。
我发现有一个veriable意外增加了。调试的时候发现汇编代码中有一行导致这个变量增加了值。这是一个名为 c_lgadc
的函数。有时在调用堆栈中没有显示 ADC
相关函数时调用此流水线。
我不明白这段代码是从哪里来的,这个c_lgadc
是什么?我在名为 c_lgadc
更新:
- 我不知道应该检查什么 C 代码,因为调用堆栈是 每次调用此反汇编线时都不同。
- 我注意到当我跨过或进入调试器时,它会出现 到特定定时器 ISR 的最后一行。
- 我还注意到带有第二个断点的行是导致添加到我的变量的行。 具有第一个断点的行总是被调用 5 次,然后是该行 第二个断点被调用一次,依此类推。
- 我想知道我应该如何进一步调试它以防止意外添加到我的变量中。
更新 2:
我在 map 文件
中找到了以下内容:
c_lgadc 0000f39c defined in (C:\Users\xxxxxxxx\CXSTM8\Lib\libm0.sm8)lgadc.o section .text
used in Debug\stm8s_it.o
我不确定这是否有助于澄清问题?
最佳答案
I've noticed that when I step over or into in the debugger, it comes to the last line of a specific timer ISR.
所以,这个计时器 ISR 递增一个 4 字节整数变量,并且这个变量与你的变量重叠。通过检查该 ISR 或链接映射可以揭示这种重叠是如何发生的,或者可能是索引寄存器 X 在 ISR 中设置不正确。
关于c - 了解stm8s反汇编中的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56027678/