【问题标题】:Writing assembly code using avr-gcc使用 avr-gcc 编写汇编代码
【发布时间】:2012-05-10 10:12:58
【问题描述】:

我最近买了一个 Arduino Uno,它基本上是一个 atMega328 avr 处理器,具有所有细节,例如 I/O 和与计算机的连接,为您处理。

我已经使用 Arduino IDE 和 avr-gcc 集合成功编写了代码。但是,我想为它编写纯汇编代码,但我遇到了死胡同,因为似乎几乎没有文档也就是说,我想编写“纯”程序集,没有内联c程序集等。我想要这样做的说明,如果可能的话,一个示例程序(gcc-avr的程序集输出不是那样)乐于助人,难以理解等等)。
特别是:

  • 如何指示 avr-as 将该代码放入例如中断向量中?
  • 有哪些指令可用?
  • .data 和 .bss 部分在哪里?

感谢您指出适当的示例。

【问题讨论】:

  • 不是真正的答案,但avr-asm.tripod.com 可能会有所帮助
  • @Justin808 谢谢,但是这个网站似乎没有讨论气体特定的语法、约定等,这是我所要求的,因为 Atmel 对 avr 功能进行了详细记录。跨度>
  • github.com/dwelch67/avr_samples,不幸的是,我的 avr 样本似乎不是 gnu 汇编程序而是 avra。如果您在我的其他存储库中闲逛,尽管您会看到许多带有尽可能简单的链接器脚本的 gas/gcc 示例。相同的主题适用于任何目标,链接器脚本具有正确的 ram 或 rom 和 ram 地址,_start: 符号作为您的入口点,将引导 asm 代码对象首先放在 -ld 命令行中,以将其放在二进制等。如果没有帮助,我可以将 gnu 制作为 avr 示例
  • 其实看看github.com/dwelch67/avriss有一个基于gcc-avr的例子。我的指令集模拟器可能会或可能不会被调试,不要依赖它,但该示例应该显示您想要的,如果您不想要 C 代码,请不要编译和链接它,只需将启动文件作为您的唯一来源.或添加其他汇编源。除了链接描述文件强制的东西之外,入口代码是 ld 命令行上的第一个对象(ld 将东西按命令行顺序放入二进制文件中)

标签: gcc embedded arduino avr gnu-assembler


【解决方案1】:

我能找到的最好的文档是the avr-gcc assembler tutorial。这说明:

  • 可以使用 avr-libc 来使用中断向量。为了在没有外部库的情况下执行此操作,可以参考源代码,正如 Brett Hale 建议的那样。

  • 它提到了特定于 avr 的指令。

还附带了一个简单的例子。

【讨论】:

    【解决方案2】:

    我建议您查看avr-libc 库。不要让名字误导你。其中大部分是高度优化的 AVR 汇编器,带有链接器脚本、低级硬件访问等。

    【讨论】:

      【解决方案3】:

      Arduino Wiki 位于 http://www.cs.nmsu.edu/~jcook/arduino/index.php 提供了一种方法来做到这一点。它需要修改和重建 Arduino IDE 以允许使用汇编代码(.s 文件)。

      【讨论】:

        猜你喜欢
        • 2013-01-14
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 2023-01-31
        • 2012-02-12
        • 2011-10-22
        相关资源
        最近更新 更多