c - 预期在 ARM 中的装配“)”
问题描述
我正在尝试在 C 中运行一些程序集。但我不断收到此错误。我不确定为什么。我知道混合汇编和 C 不是一个好习惯,但我是新手,如果可能的话,我想将所有的 C 转换为汇编。我认为我不需要该属性,但我试图做一些事情来纠正这个错误。错误来自这一行:
__asm(" LDR r1, %[OS_curr] \n"
::"r" (OS_curr)
);
我在 MSP432 微控制器 ARM 编译器上运行它。谢谢你。
void PendSV_Handler() __attribute__((naked));
void PendSV_Handler(void)
{
OSThread *volatile OS_currcopy;
OS_currcopy = OS_curr;
void *sp;
__disable_interrupt();
__asm(" LDR r1, %[OS_curr] \n"
::"r" (OS_curr)
);
if(OS_curr != (OSThread *) 0){
asm(" PUSH {r4-r11}");
OS_curr -> sp = sp;
}
sp = OS_next -> sp;
OS_curr = OS_next;
asm(" POP {r4-r11}");
__enable_interrupt();
}
.global OS_curr
.global OS_next
.global PendSV_HandlerAsm
.curradd: .word OS_curr
.currnext: .word OS_next
PendSV_HandlerAsm:
CPSID i
;if(OS_curr != (OSThread *)0)
LDR r1, .curradd
LDR r1, [r0]
CBZ r1, PendSV_restore
;Push r4 - r11
PUSH {r4-r11}
LDR r1, .curradd
LDR r1, [r1]
;OS_curr -> sp = sp;
STR sp, [r1]
PendSV_restore:
;sp=OS_next -> sp;
LDR r1, .currnext
LDR r1, [r0]
LDR r1, [r0]
STR sp, [r13]
;OS_curr = OS_next;
LDR r1, .currnext
LDR r1, [r1]
LDR r2, .curradd
LDR r1, [r1]
;Pop r4-r11
POP {r4-r11}
;__enable_interrupts();
CPSIE i
;return to next thread
BX r14
解决方案
推荐阅读
- django - 表单提交后重新显示表格
- python - 如何阅读 Excel 电子表格并转换单位?
- c++ - c++ 在 floor 函数之后以十六进制打印数字
- python - 无法使用 whl 文件为 python 安装 libxml2
- python - 如何使用 np.array() 和 np.arange(3) 的组合手动创建一个 3×3×3 NumPy 数组?
- html - TAU:我们如何将 PageIndicator 用于可穿戴设备
- x86 - 在 st0 中存储通用寄存器
- python - “TypeError:'int' 对象不可迭代”,但它在我的其他代码中工作得很好
- c# - 视图大小更改时字体不更改
- html - div 元素没有到达浏览器页面的左侧