工具/软件:TI C/C++编译器
您好,
如果我正在定义链接程序命令文件中映射到其中一个已定义存储器的部分,加载程序(或图像本身中的链接程序)在什么情况下会将该区域初始化为零或其他值?
我需要知道 的是,如果我有一个程序将一些数据写入特定部分, 然后加载另一个定义了相同部分的程序,将会加载第二个程序删除第一个程序写入的内容(如果未使用NoLoad关键字)? 如果是,防止这种情况的唯一方法是使用NoLoad还是有其他方法?
谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
您好,
如果我正在定义链接程序命令文件中映射到其中一个已定义存储器的部分,加载程序(或图像本身中的链接程序)在什么情况下会将该区域初始化为零或其他值?
我需要知道 的是,如果我有一个程序将一些数据写入特定部分, 然后加载另一个定义了相同部分的程序,将会加载第二个程序删除第一个程序写入的内容(如果未使用NoLoad关键字)? 如果是,防止这种情况的唯一方法是使用NoLoad还是有其他方法?
谢谢
Guy Mardiks 说:如果我有一个程序将某些数据写入特定部分,然后加载另一个定义了相同部分的程序,那么加载第二个程序将擦除第一个程序写入的内容(如果未使用NoLoad关键字)? [/引述]
首先,我们来澄清一些术语。 请使用 Wiki文章 链接器命令文件入门中的术语表部分中的术语。 在这种情况下,重要的区别在于您所说的"部分"称为"内存范围"。 因此,再次提出您的问题:第一个程序将数据写入内存范围。 然后加载第二个程序,该程序将初始化的值放在同一内存范围内。 会发生什么? 我想我说的都是正确的。
我认为我不理解一些更基本的东西。 无论如何实施,您希望发生什么? 因为,如果第二个程序使用相同的内存范围,我看不出有什么方法可以避免覆盖第一个程序中的数据。 这让我得出结论,我误解了您想要做什么。
谢谢,此致,
-George
我认为这样的东西会对你很有效...
#pragma location_shared_variable, 0x1000) #ifdef prog2 /* PROG2仅在构建第二个程序时定义*/ #pragma NOINIT(shared_variable) #endif int shared_variable;
这会出现在两个程序中都使用的源文件中。 预处理程序符号PROG2在命令行上与-DPROG2一起定义,仅在生成第二个程序时定义。
阅读 ARM编译器手册中有关位置和NOINIT pragma的更多信息。 位置pragma表示共享变量在两个程序中位于同一位置。 NOINIT pragma表示第二个程序不会初始化它。
谢谢,此致,
-George