繁体   English   中英

如何在8位AVR上进行内联汇编?

[英]How is inline assembly possible on AVR 8-bit?

我知道这很接近“愚蠢的问题”类别,但是我一直在研究如何在AVR 8位引导加载后执行机器代码,并且已经了解到AVR 8使用的哈佛架构位MCU使得无法从闪存以外的任何地方执行代码。 那么如何使用内联asm在运行时引入新的可执行代码?

您正在混淆三件事:

  1. 内联组装

    内联汇编用于将汇编程序指令传递给C(或任何语言)编译器。 编译器会将该汇编程序指令添加到其生成的代码中。 最后,内联汇编程序指令的存储方式与编译器生成的指令相同 如果将程序写入闪存,则内联指令也将位于闪存中。

  2. 引导加载程序

    引导加载程序通常将从一些输入(例如USB接口)读取数据,并将数据写入闪存。 因此,发送给AVR的程序将稍后从闪存而不是RAM中执行。

  3. 从RAM执行代码

    许多处理器都支持。 同样,许多引导加载程序(用于其他微控制器)允许将代码加载到RAM中而不是闪存中并从那里执行代码。 您是对的:至少大多数(也许是全部?)AVR 8位微控制器不支持此功能!

...在AVR 8位MCU上使用的哈佛架构使得无法从闪存以外的任何位置执行代码。

您的理解是正确的,只能从闪存中执行代码。

那么如何使用内联asm在运行时引入新的可执行代码?

可以编写以纯数据形式写入/读取闪存的代码。 实际上,这正是任何引导程序所完成的。 即使没有显式的“引导加载程序部分”(例如attiny系列), 可以通过这种方式访问​​闪存。 您的零件的数据表 (在本示例中为第263页)包含该主题的一章,建议您详细阅读它。

也就是说,我还没有看到利用此功能运行其他代码的代码。 额外的复杂性可能使其对于像AVR这样的小型低功耗微控制器不可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM