如何解决如何在 C 中创建内联汇编函数?
我正在使用 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");
}
解决方法
内联汇编器语法未在 C 编程语言中重新定义,其支持和语法是特定于编译器的。在海湾合作委员会中:
{{1}},
参考
内联汇编语法未在 C 编程语言中重新定义
我过去做过一个大学项目
inline void function(param1,param2)
{
asm volatile ("param1");
asm volatile ("param2");
}
但是,如果您在 ARM 上工作,请查看指令集以了解哪些命令是可能的
举个例子: 如果你想写一些时间关键的东西,需要按照书面顺序你可以做这样的事情
inline void COLOUR_GLCD_write_address_data(uint8_t address,uint16_t data)
{
asm volatile ("DMB");
*(volatile uint16_t*)LCD_CMD_ADDRESS = address;
asm volatile ("DMB");
*(volatile uint16_t*)LCD_DATA_ADDRESS = data;
}
这是为了通过 Atmel SAME70 上的总线接口将数据发送到外部液晶显示器。 希望有所帮助 =)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。