我正在使用 MSP 432 并且必须在 C 中创建一个汇编函数。我尝试使用__asm void PendSV_Handler{}
. 但这不起作用,并说期望一个标识符。
另外,我正在尝试运行此汇编程序命令 cpsid i
,但它说CPSID
未定义但CPSIE i
可以工作。在这一点上我有点困惑。我对此很陌生,我仍在学习。
下面是我试图组装的代码。我尝试通过__asm void PendSV_handler
.
我不确定创建一个 asm 是否更容易。与这些说明一起归档。
OSThread *volatile OS_curr;
OSThread *volatile OS_next;
void PendSV_Handler(void){
__asm__("cpsid i"
//if(OS_curr != (OSThread *)0)
"ldr r0, =OS_curr"
"ldr r0, [r0]"
"cbz r0, PendSV_restore");
// Push r4 - r11
__asm__("PUSH {r4-r11}"
"ldr r1, =OS_curr"
"ldr r1, [r1]"
// OS_curr -> sp = sp;
"str sp, [r1]");
PendSV_restore
// sp=OS_next -> sp;
__asm__("ldr r0, =OS_next;"
"ldr r0, [r0]"
"ldr r0, [r0]"
"str sp, [r13]");
// OS_curr = OS_next;
__asm__("ldr r0, =OS_next"
"ldr r1, [pc, 0xc]"
"ldr r0, =OS_curr"
"str r0, [r1]"
//Pop r4-r11
"POP {r4-r11}"
// __enable_interrupts();
"cpsie i"
//return to next thread
"bx r14");
}