sys文件里的这几个关于汇编的函数实际作用是什么?

2019-07-21 01:02发布

具体什么时候会用到呢?移植到IAR环境下,不支持这几个函数,在此请教一下:
__asm void WFI_SET(void)
{
WFI;  
}

__asm void INTX_DISABLE(void)
{
CPSID   I
BX      LR  
}

__asm void INTX_ENABLE(void)
{
CPSIE   I
BX      LR  
}

__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
it_do_just
1楼-- · 2019-07-21 02:41
进入待机模式函数:Sys_Standby() -> 这里面有一个函数是WFI_SET()用于进入模式的操作

__asm void WFI_SET(void)

{
         WFI;

}

该函数其实是在 C 语言里面嵌入一条汇编指令,因为CM3 内核的 STM32 支持的 THUMB 指令,并不能内嵌汇编,所以需要通过这个方法来实现汇编代码的嵌入。

__asm关键字:启动内联汇编并且能写在任何c/c++合法语句之处.它不能单独出现.它必须接汇编指令、一组被大括号包含的指令或一对空括号.术语“__asm 块”在这里是任意一个指令或一组指令无论是否在括号内。括号可以清晰的将C或C++代码和汇编代码分开,并且避免了不必要的重复__asm关键字。括号也能避免模糊性。

//关闭所有中断
__asm void INTX_DISABLE(void)
{
         CPSID I;

}
//开启所有中断
__asm void INTX_ENABLE(void)
{
         CPSIE I;

}

//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr)
{
         MSR MSP, r0 //set Main Stack value
         BX r14

}
FantaSy_
2楼-- · 2019-07-21 06:52
 精彩回答 2  元偷偷看……
落月枫情
3楼-- · 2019-07-21 11:10
 精彩回答 2  元偷偷看……
it_do_just
4楼-- · 2019-07-21 12:37
回复【4楼】落月枫情:
---------------------------------
不好意思....没用过IAR

一周热门 更多>