【问题标题】:C51 C compiler inline assembly to SDCC inline assemblyC51 C 编译器内联汇编到 SDCC 内联汇编
【发布时间】:2013-07-23 14:14:15
【问题描述】:

我不太喜欢汇编,但对于一个项目,我必须将 C51 C 编译器的几行汇编代码修改为 SDCC。

这是 C51 的代码

setb    T1Run
setb    T0Run

setb    IDLE
jnb     T0Full, $

哪个,用 SDCC 编译产生

?ASlink-Warning-Undefined Global 'IDLE' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global '$' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global 'T0Run' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global 'T1Run' referenced by module 'Com_Func'

?ASlink-Warning-Byte PCR relocation error for symbol  $
         file              module            area              offset
  Refby  ./Com_Func.rel    Com_Func          CSEG                     004A
  Defin  ./Com_Func.rel    Com_Func          CABS                     0000

作为编译器错误/警告。

  • 我知道 $-symbol 被汇编器替换为指令的实际地址 - 但是 SDCC 等价物是什么?
  • 如何解决T0Run 等的警告?

【问题讨论】:

    标签: assembly keil sdcc c51


    【解决方案1】:

    我认为您可以将 $ 替换为在同一行上定义的标签。

    00001$: 
      jnb     T0Full, 00001$
    

    注意根据SDCC Compiler User Guide

    在内联汇编代码中定义的所有标签必须是以下形式 nnnnn$ 其中 nnnnn 是小于 100 的数字(这意味着每个函数最多 100 个内联汇编器标签)。

    至于其他编译器警告,那些是假定尚未在任何地方定义的符号。它们在原始 C51 代码中是如何定义的?

    【讨论】:

    • 这些符号在 C 头文件中定义。包括这个文件没有帮助。现在我用它们的实际数字替换了这些符号。仍然不知道如何告诉解析器没问题
    【解决方案2】:

    LOL...这听起来像 sdcc 很有趣。我现在才开始添加头文件。我不得不把它放在 bin Dir 中,因为它没有像 keil 在其项目文件夹中那样找到它。

    这可能会有所帮助。现在我还不是专家,但是他们说的有些事情不像他们说的那样有效。我不得不同时使用 SDCC 手册和迁移手册,最终我找到了我想要的正确语法......

    http://www.infineon.com/dgdl/AP0806510_XC800_Migration_Keil_2_SDCC.pdf?folderId=db3a30431375fb1a01138c57204603bd&fileId=db3a304314dca389011517efc5860d61&ack=t

    【讨论】:

    • 有趣.. 那时我在做这个工作时,我在格拉茨为英飞凌做过:D
    猜你喜欢
    • 2012-10-20
    • 2019-05-11
    • 2017-11-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2013-11-26
    相关资源
    最近更新 更多