zoukankan      html  css  js  c++  java
  • ARM 汇编器对C的扩展

    __swi void ledtest();    //:声明 edtest 是个软中断。

    __asm  内嵌汇编          //:通常在C程序里面需要嵌入汇编代码,这是就可以用__asm关键字来指示编译器下面的代码是用汇编语言来写的,

    __inline 定义内联函数    //:就像在C语言中用define定义宏一样,用__inline关键字定义的函数在调用的地方被展开,这主要就是为了解决频繁的函数调用开销过大的问题,如果用__inline关键字定义的函数过大,每个调用函数的地方都会将其展开,这样的话在一定程度上也增加代码量,所以说一般用__inline  定义的函数代码量并不是很大。

    由于在C语言中无法直接访问COSR, 因此需要通过嵌入式汇编语言来将CPSR 中I位清零,此外,访问CPSR 还需要专门的程序状态寄存器访问MSR  MRS 来实现。

    用如下代码实现开中断:

    __inline  void irq_enable(void)   //用关键字__inline 声明内联函数irq_enable()

    {

    int val;              //定义临时变量保存CPSR 的值

    __asm              //关键字告诉编译器下面的代码是用汇编语言写的

    {

    mrs val,cpsr            //用mrs指令将程序状态寄存器cpsr中的值读入到val

    bic val,val,#0x80          //用BIC指令将val中第7位(I位)清0

    msr cpsr_c,val          //用MSR指令将val 的值写入到cpsr 此时I位已经清零 即开中断。

    }

    }

    下面的函数实现的是关中断:

    __inline  void irq_disable(void)   //用关键字__inline 声明内联函数irq_enable()

    {

    int val;              //定义临时变量保存CPSR 的值

    __asm              //关键字告诉编译器下面的代码是用汇编语言写的

    {

    mrs val,cpsr            //用mrs指令将程序状态寄存器cpsr中的值读入到val

    orr val,val,#0x80          //用BIC指令将val中第7位(I位)清0

    msr cpsr_c,val          //用MSR指令将val 的值写入到cpsr 此时I位已经清零 即开中断。

    }

    }

  • 相关阅读:
    Android中Activity之间通信
    vs2017 2019 下载更新慢的解决方法
    c# 判断某个类是否实现某个接口
    mvc api 关于 post 跟get 请求的一些想法[FromUri] 跟[FromBody] 同一个控制器如何实现共存
    vs2017 mvc 自定义路由规则 出现 404.0 错误代码 0x80070002
    C# winform 发布的时候没有app.config去哪儿了?
    安装c#服务
    Type.GetType反射的对象创建Activator.CreateInstance
    c# 谷歌动态口令对接
    asp.net mvc 异步控制器
  • 原文地址:https://www.cnblogs.com/locean/p/5088882.html
Copyright © 2011-2022 走看看