一. 关键字和运算符
1. __align(
n
):指示编译器在
字节边界上对齐变量。n
对于局部变量,n
值可为 1、2、4 或 8。
对于全局变量,n
可以具有最大为 2 的 0x80000000 次幂的任何值。
__align
关键字紧靠变量名称前面放置。
注意事项:
只能进行过对齐。也就是说,可以将两个字节的对象按 4 个字节对齐,而不能将 4 个字节的对象按两个字节对齐。
用法举例:
__align(8) char buffer[128]; /* buffer从8字节对齐边界开始*/ void foo(void) { ... __align(16) int i; /* 这个对齐值是不允许用在局部变量中的*/ ... } __align(16) int i; /* 作为一个全局变量,这个对齐值是被允许的*/
2. __asm:此关键字用于将信息从编译器传递到 ARM 汇编器armasm。
用法:
a. 嵌入式汇编器
可以使用 __asm
关键字声明或定义嵌入式汇编函数。例如:
__asm void my_strcpy(const char *src, char *dst);
b. 内联汇编器
可以使用 __asm
关键字将内联汇编合并到函数中。例如:
int qadd(int i, int j) { int res; __asm { QADD res, i, j } return res; }
c. 汇编器标签
可以使用 __asm
关键字为 C 符号指定汇编器标签。例如:
int count __asm__("count_v1"); // export count_v1, not count
d. 已命名的寄存器变量
可以使用 __asm
关键字声明已命名的寄存器变量。例如:
register int foo __asm("r0");
3.
4.
5.
....
时间: 2024-10-05 19:11:53