一个简单函数,没有用到局部RAM变量,竟然还是分配堆栈空间
IAR EWARM5.20,最高速度优化。
typedef unsigned long reg_save_t; reg_save_t __get_primask(void) { asm( "mrs r0,primask
" "bx lr
" ); return 1; }
reg_save_t CriticalEnter(void) { reg_save_t flags=__get_primask(); __disable_interrupt(); return flags; }
IAR 5.20编译出汇编代码: CriticalEnter: PUSH {LR} SUB SP,SP,#+4 //分配4个字节堆栈 BL __get_primask CPSID I ADD SP,SP,#+4 //释放4个字节堆栈 POP {PC} ;; return
|