ZHCU820Y September 2004 – June 2021
支持以下 GCC 函数属性:
支持以下其他 TI 特定函数属性:
例如,此函数声明使用 alias 属性使“my_alias”成为“myFunc”函数的别名:
void my_alias() __attribute__((alias("myFunc")));
aligned 函数属性与 CODE_ALIGN pragma 具有相同的效果。请参阅 Topic Link Label6.11.4
always_inline 函数属性与 FUNC_ALWAYS_INLINE pragma 具有相同的效果。请参阅 Topic Link Label6.11.11
call_conv 属性可用于修改调用惯例,以使 IAR 和 TI 编译器能够链接同一个 ROM 映像。此函数属性将使用 TI 编译器编译的函数与 IAR 编译器生成的 ROM 映像链接在一起。请注意,TI 编译器不会生成 ROM 映像。
call_conv 属性可通过“cc_rom”(可实现 IAR/TI 兼容性)或“cc_norm”(默认调用惯例)指定。如果要共享使用 IAR 编译的 ROM 映像,请使用“cc_rom”。以下示例以多种方式使用 call_conv 属性:
#define __cc_rom __attribute__((call_conv("cc_rom")))
__cc_rom void rom_func(void)
{
...
}
typedef __cc_rom void (rom_func_t)(void);
int main()
{
rom_func();
rom_func_t *fp = (rom_func_t*)0x1234;
fp();
((void (__cc_rom *)(void))0x2468)();
void (__cc_rom *rom_func_ptr)(void);
rom_func_ptr = &rom_func;
rom_func_ptr();
}
如果您希望 IAR/TI 与您的调用惯例兼容,请注意以下有关参数传递的限制。
calls 属性的效果与 CALLS pragma 相同,相关信息请参阅 Topic Link Label6.11.2。
format 属性应用于 stdio.h 中 printf、fprintf、sprintf、snprintf、vprintf、vfprintf、vsprintf、vsnprintf、scanf、fscanf、vfscanf、vscanf、vsscanf 和 sscanf 的声明。因此,当启用 GCC 扩展时,系统会根据格式字符串参数中的格式说明符对这些函数的数据参数进行类型检查,并在不匹配时发出警告。如果不需要这些警告,可以通过常见方式抑制它们。
请参阅Topic Link Label6.11.19,详细了解如何使用 interrupt 函数属性。
malloc 属性应用于 stdlib.h 中 malloc、calloc、realloc 和 memalign 的声明。
naked 属性用于标识使用 __asm
语句编写为嵌入式程序集函数的函数。编译器不会为此类函数生成序言和结语序列。请参阅Topic Link Label6.10。
noinline 函数属性具有与 FUNC_CANNOT_INLINE pragma 相同的效果。请参阅 Topic Link Label6.11.12
ramfunc 属性指定一个函数将被放置在 RAM 中并从中执行。ramfunc 属性允许编译器优化 RAM 执行的函数,以及自动将函数复制到基于闪存的器件上的 RAM 上。例如:
__attribute__((ramfunc))
void f(void) {
...
}
--ramfunc=on 选项指定使用此选项编译的所有函数都放置在 RAM 中并从中执行,即使未使用此函数属性也是如此。
较新的 TI 链接器命令文件通过将具有此属性的函数放置在 .TI.ramfunc 段中来自动支持 ramfunc 属性。如果您的链接器命令文件不包含 .TI.ramfunc 段的段规格,您可以修改链接器命令文件以将此段放在 RAM 中。如需详细了解段放置,请参阅《MSP430 汇编语言工具用户指南》。
retain 属性与 RETAIN pragma (Topic Link Label6.11.29) 具有相同的效果。也就是说,即使在应用的其他地方没有引用包含该函数的段,也不会从条件链接输出中省略该段。
在函数中使用的 section 属性具有与 CODE_SECTION pragma 相同的效果。请参阅 Topic Link Label6.11.5
weak 属性与 WEAK pragma (Topic Link Label6.11.33) 具有相同的效果。