NXP S32K144 汇编小记

GCC规定了一个内联汇编的语法,不同硬件平台上的GCC内联汇编几乎都是这样的:

asm(
    汇编指令列表
    :输出运算符列表
    :输入运算符列表
    :被更改的资源列表
};

 

在GCC中插入汇编代码,需要以asm关键字开头,中间四个部分用”:”分隔,如果你嵌入的汇编没有输入输出,或者更改资源,后面三项是可以省略的。

                 表1 GCC4内联汇编操作符节选
操作符含义
r通用寄存器R0~R15
m一个有效内存地址
l数据处理指令中的立即数
X被修饰的操作符只能作为输出
            表2  GCC4中内联汇编修饰符
修饰符说明
被修饰的操作符是只读的
=被修饰的操作符只写
+被修饰的操作符具有可读写的属性
&被修饰的操作符只能作为输出

uint32_t __get_PRIMASK(void)
{
    uint32_t result=0;
    __asm __volatile(                       \
        "MRS %0,primask"                     \
        :"=r"(result)                        \
        :                                     \
        :"memory"
    );
    return result;
}
void __set_PRIMASK(uint32_t priMask)
{
    __asm volatile (                        \
        "MSR primask, %0"                    \
        :                                    \
        :"r"(priMask)                         \
        :"memory"
     );
}
uint32_t enterCritical(void)
{
    uint32_t status=0;
    status=__get_PRIMASK();
    __asm volatile (                        \
        "cpsid i"                             \
        :                                     \
        :                                     \
        :"memory"
    );
    return status;
}
void exitCritical(uint32_t status)
{
    __set_PRIMASK(status);
}
 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值