对于nake的不理解,查看了arm的文档。发现就是指定编译器不要产生序言和结尾。只能用__asm
This attribute tells the compiler that the function is an embedded assembly function. You can write the body of the function entirely in assembly code using __asm
statements.
The compiler does not generate prologue and epilogue sequences for functions with __attribute__((naked))
.
The compiler only supports basic __asm
statements in __attribute__((naked))
functions. Using extended assembly, parameter references or mixing C code with __asm
statements might not work reliably.
Example 3-1 Examples
__attribute__((naked)) int add(int i, int j); /* Declaring a function with __attribute__((naked)). */ __attribute__((naked)) int add(int i, int j) { __asm("ADD r0, r1, #1"); /* Basic assembler statements are supported. */ /* Parameter references are not supported inside naked functions: */ /* __asm ( "ADD r0, %[input_i], %[input_j]" /* Assembler statement with parameter references */ : /* Output operand parameter */ : [input_i] "r" (i), [input_j] "r" (j) /* Input operand parameter */ ); */ /* Mixing C code is not supported inside naked functions: */ /* int res = 0; return res; */ }