【发布时间】:2026-01-29 03:50:01
【问题描述】:
我正在使用 MSP 432 并且必须在 C 中创建汇编函数。我尝试使用 __asm void PendSV_Handler{} 创建函数。但这不起作用,并说 Expected an Identifier.
另外,我正在尝试运行这个汇编命令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");
}
【问题讨论】:
-
是什么让您认为
CPSIE i有效?它更有可能在第一个错误后停止解析吗?您的PendSV_restore标签缺少其:,因此解析器显然已放弃,或者这不是您正在构建的代码。 -
这是我第一次真正深入研究组装。我从反汇编程序中得到了这个,但是当我把它带入 c 文件时,它充满了错误。