ZHCU876Z July 2001 – October 2023 SM320F28335-EP
支持下述变量属性:
在变量上使用的 aligned 属性与 DATA_ALIGN pragma 的效果相同。请参阅 节 6.9.5
blocked 和 noblocked 属性可用于控制阻断特定变量(包括数组和结构体)。有关阻断变量或解除阻断变量的原因,请参阅 节 3.11。这些属性必须在变量的定义和声明中都能使用。建议在声明变量的头文件中使用这些属性。例如:
__attribute__((blocked))
extern int my_array[];
__attribute__((noblocked))
extern struct_type my_struct;
noblocked 属性还可用于引用在汇编或未阻断的 CLA 转换单元中定义的数据。
如果在未阻断的数据上尝试将变量视为阻断的数据访问,链接器则会提供诊断消息。
location 属性与 LOCATION pragma 的效果相同。请参阅节 6.9.16。例如:
__attribute__((location(0x100))) extern struct PERIPH peripheral;
如果利用 location 属性指定的地址位于存储器的低 16 位,将使用具有较少 DP 负载的更高效指令。
或者,在取消引用文本时使用指定地址的语法使编译器选择更有效的指令以处理内存的低 16 位上的地址。例如,可以使用下述任一方式:
#define peripheral (*((struct PERIPH)(0x100)))
struct EPWM_REGS volatile* const epwm1 = (struct EPWM_REGS *)(0x4000);
noinit 和 persistent 属性(仅限 EABI)适用于 ROM 初始化模式,并允许应用程序在重置期间避免初始化特定全局变量。备选的 RAM 初始化模式只在加载映像时初始化变量;重置时不会初始化变量。请参阅《TMS320C28x 汇编语言工具用户指南》中的“RAM 模型与 ROM 模型”章节及其小节。
noinit 属性可用在未初始化的变量上;可防止这些变量在重置期间被设置为 0。persistent 属性可用在初始化的变量上;可防止这些变量在重置期间被初始化。默认情况下,标记为 noinit 或 persistent 的变量将分别置于 .TI.noinit
和 .TI.persistent
段。这些段的位置由链接器命令文件控制。通常对于支持 FRAM 的器件,.TI.persistent 段置于 FRAM 中,.TI.noinit 段置于 RAM 中。也请参见 节 6.9.18。
preserve 和 update 属性适用于实时固件更新 (LFU) 功能,该功能支持执行“热启动”来升级固件,而无需使系统离线。这两个属性使用从参考 ELF 映像中获得的符号地址列表,该映像是在编译和链接可执行文件时指定的。有关仅支持 EABI 的 LFU 的更多信息,请参阅节 2.15。
.TI.bound
段。如果 .TI.bound 段在存储器中是连续的,链接器可以将这些段合并到单个输出段中,从而减少初始化这些段所需的 CINIT 记录数量。
下述示例使用 preserve 属性:int __attribute__((preserve)) gvar_bss_preserve;
int __attribute__((preserve)) gvar_0 = 0x30;
static int __attribute__((preserve)) svar_0 = 0x50;
.TI.update
输出段中。此段默认为复制压缩(即,在热启动期间无需解压缩),因此可以减少 LFU 映像切换时间。下述示例使用 update 属性:int __attribute__((update)) gvar_bss_update;
int __attribute__((update)) gvar_1 = 0x50;
static int __attribute__((update)) svar_1 = 0x70;
retain 属性与 RETAIN pragma (节 6.9.22) 的效果相同。也就是说,即使在应用程序的其他地方没有引用该变量,包含该变量的段也不会从条件链接的输出中省略。
变量上使用的 section 属性与 DATA_SECTION pragma 的效果相同。请参阅 节 6.9.6
used 属性在 GCC 4.2 中定义(请参阅 http://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Variable-Attributes.html#Variable-Attributes)。
weak 属性与 WEAK pragma (节 6.9.25) 的效果相同。