ARM 汇编器对C的扩展

时间:2018-08-08

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

  }

  }

  『本文转载自网络,版权归原作者所有,如有侵权请联系删除』


上一篇:峰值电流模式下连续电流DC-DC转换器建模及环路补偿设计
下一篇:随着工业控制要求越来越高,ARM架构处理器优化也在不断进步

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料