在 MSP430 程序集中定义阵列的位置

Defining Location of an Array in MSP430 Assembly

我可以通过以下方式在 MSP430 程序集中定义一个数组:

 array  .byte   00000101b, 00000100b, 00000011b, 00000010b, 00000001b
   lastelement

但是当我调试我的汇编代码时,我发现 Code Composer Studio 的 TI 编译器将数组放置到 Boot Memory 部分。因此,数组元素是只读的。但我想编辑数组的内容(即,在排序过程中更改元素的顺序)。为此,我尝试了 org 关键字,但没有帮助。我如何定义数组的位置,以便编译器将数组放置到我指示的位置,这是内存地址space(例如,信息内存、RAM 等)的可编辑段?

我不知道是否可以 link 易失性内存地址 space 中的数据。但对我来说这毫无意义。当您将程序(和数组)传输到芯片时,数组将被复制到例如。 RAM space 并且代码将被复制到闪存中。但是当你关闭电源时会发生什么?给 MCU 重新上电后,代码还在,但数组已经消失了。

更好的解决方案是在程序启动后将数组从只读代码 space 复制到 RAM 中。有一个.data段用于初始化变量和一个.bss段用于未初始化变量内存,可用于在引导过程运行ning时自动将固定程序数据复制到易失性内存。

您可能还对 MSP430 Assembly Language Tools User's Guide (PDF) 感兴趣:请参阅第 2.3、3.1.1、3.5 和 8.5.5 节;关键词:运行时间重定位,加载地址,运行地址,.text,.data,.bss,程序段

我最终通过使用 .data 关键字成功地将数组放置到 RAM 中:

            .data
array       .byte   00000101b, 00000100b, 00000011b, 00000010b, 00000001b
lastelement

现在,TI 编译器将数组放入 RAM,我可以轻松编辑内容。 @CL 和@peter-paul-kiefer,感谢您的帮助。