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位已经清零 即开中断。

    }

    }

  • 相关阅读:
    新随笔(二)用户体验:用户注册表单中的“年份”设计乱象
    新随笔(一) 从用户心理体验谈慎用瀑布流设计
    产品经理,你来自江湖
    对你同样重要的非技术贴,8个方法让你成为下一个晋升对象
    非技术贴,10件事证明你跟错了人
    Android开发工程师,前行路上的14项技能
    SVN报错:Error Updating changes:svn:E155037的解决方案同样适用于svn clean up失败解决方案
    方法命名问题
    controller 获取data: JSON.stringify(param)
    毕业设计----maven使用ueditor编辑器
  • 原文地址:https://www.cnblogs.com/locean/p/5088882.html
Copyright © 2011-2022 走看看