在不同的编译平台,对栈的汇编操作有所不同,
windows平台
volatile int* p = context->stack + context->stack_size / 4;
__asm mov esp, p
操作很方便,变量可直接传过去
keil平台Cortex-M4
int n = (int)&sp_buff+4*512;
__asm volatile("msr msp, n");
参数n也可以直接给,测试有效
GCC编译Coretx-M4
#define write_sysreg(val, reg) ( \
{ \
unsigned long _val = (unsigned long)val; \
asm volatile("msr " #reg ",%0" ::"rZ"(_val)); \
})
int n = (int)&sp_buff + 4 * 512;
// int msp = read_sysreg(msp);
write_sysreg(n, msp);