首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解stm8s反汇编中的函数?

理解stm8s反汇编中的函数?
EN

Stack Overflow用户
提问于 2019-05-07 17:24:21
回答 2查看 460关注 0票数 1

我正在用STVD编写STM8S微控制器的程序。它使用宇宙编译器。

我发现有一个可验证的增加是出乎意料的。调试时,我发现程序集代码中有一行代码会导致此变量增加其值。它是一个名为c_lgadc的函数。有时,在调用堆栈中没有显示与ADC相关的函数时,会调用此装配线。

我不明白这些代码是从哪里来的,这个c_lgadc是什么?我的C代码中没有名为c_lgadc的函数

这是拆卸的屏幕截图。

更新:

  • 我不知道应该检查什么C代码,因为每次调用这个反汇编行时调用堆栈都是不同的。
  • 我已经注意到,当我跨入调试器或进入调试器时,就到了特定计时器ISR的最后一行。
  • 我还注意到,第二个断点的行是导致添加到我的变量的那一行。第一个断点的行被调用5次,第二个断点的行被调用一次,依此类推。
  • 我想知道如何进一步调试这一点,以防止意外添加到我的变量。

UPDATE2:

我在map file中找到了以下内容

代码语言:javascript
复制
c_lgadc 0000f39c defined in (C:\Users\xxxxxxxx\CXSTM8\Lib\libm0.sm8)lgadc.o section .text
                 used in Debug\stm8s_it.o

我不确定这是否有助于澄清问题?

EN

回答 2

Stack Overflow用户

发布于 2019-05-08 11:57:12

我已经注意到,当我跨入调试器或进入调试器时,就到了特定计时器ISR的最后一行。

因此,这个计时器ISR增加了一个4字节的整数变量,并且这个变量与您的变量重叠。这种重叠是如何发生的,可以通过检查ISR或链接映射来揭示,也可能是索引寄存器X没有在ISR中正确地设置。

票数 2
EN

Stack Overflow用户

发布于 2019-05-07 17:31:53

函数c_lgadc看起来像运行时库的一部分。根据上下文,它可能是一个add进位标志函数,因为它介于比较和无符号右移位函数之间。

这些函数的c_lc_lg前缀可能是表示操作数类型或其结果的方案的一部分。

至于您的问题,adc发生在几个CPU体系结构的指令集中,即英特尔x86和摩托罗拉680x。它的意思是:

  • 如果进位标志(无符号算术溢出或移位通过carrry标志)为零,则返回操作数作为结果。
  • 如果设置了进位标志,则将结果作为添加到操作数的结果返回。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56027678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档