__func__表示是当前所在的函数名,在编译的时候就已经生成了.
2.#prama arm section[section_sort_list]
此编译指示指定要用于后续函数或对象的节名称.这包括编译器为进行初始化而创建的匿名对象的定义.
Note
可以将__attribute__((section(..)))用于函数或变量以替代#pragma arm section.
语法
#pragma arm section [section_sort_list]
其中:
section_sort_list指定要用于后续函数或对象的节名称的可选列表.section_sort_list的语法为:
section_type[[=]"name"] [,section_type="name"]"
有效的节类型是:
code/rodata/rwdata/zidata
用法
可以将分散加载描述文件与ARM链接器配合使用,以控制将已命名的节放在特定内存地址的方式.
限制
此选项对以下内容无效:
(1)内联函数及其局部静态变量。
(2)模板实例化及其局部静态变量。
(3)删除未使用的变量和函数。但是,可通过使用 #pragma arm section,使链接器能够删除本来可能会保留的函数或变量,因为它与使用的
函数或变量位于相同的节中。
(4)将定义写入对象文件的顺序。
示例
点击(此处)折叠或打开
-
#pragma arm section code = "name_1"
-
void name_2(void)
-
{
-
...
-
}
- #pragma arm section code
3.__attribute__((section("name")))
可以使用section函数属性将代码放在映象的不同节中.
Note
此函数属性石ARM编译器支持的GNU编译器扩展.
示例
点击(此处)折叠或打开
-
void Function_Attributes_section_0 (void)
-
__attribute__((section ("new_section")));
-
void Function_Attributes_section_0 (void)
-
{
-
static int aStatic = 0;
-
aStatic++;
- }
4.void *param参数
往往我们在有些函数,例如:int fun(void *param)中,没有使用过param参数,那这函数究竟有什么用呢?
函数中预留的参数有时候是需要的,可以用作扩展使用,有时在回调函数中一般会有一个void *类型的参数.需要在实现的时候转换成自己需要的类型.使用fun()函数时,括号内必须要填参数,不填就会出错.