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

    }

    }

  • 相关阅读:
    tcp 状态转移图详解
    TCP三次握手四次挥手详解
    TCP可靠传输详解
    TCP和UDP的最完整的区别
    Form – 保存自動關閉當前窗口
    Form
    Form
    FORM
    Form 重置记录编号(app_record.for_all_record)
    Oracle Form Developer: Folder FRM-99999 Error 14212
  • 原文地址:https://www.cnblogs.com/locean/p/5088882.html
Copyright © 2020-2023  润新知