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

    }

    }

  • 相关阅读:
    day25:接口类和抽象类
    vue1
    How the weather influences your mood?
    机器学习实验方法与原理
    How human activities damage the environment
    Slow food
    Brief Introduction to Esports
    Massive open online course (MOOC)
    Online learning in higher education
    Tensorflow Dataset API
  • 原文地址:https://www.cnblogs.com/locean/p/5088882.html
Copyright © 2011-2022 走看看