系统调用与软件中断SWI的实现

#include "led.h"

 

#define __led_on_swi_no                1                 // 软中断号1调用管理模式下的do_led_on函数

#define __led_off_swi_no                2                 // 软中断号2调用管理模式下的do_led_off函数

 

int led_on(int led_no){

         int ret;                                                       // 返回值

          __asm{                                                     // 由于C程序中没有SWI对应表达式,所以使用混合编程

                   mov  r0, led_no                               // 根据ATPCS规则,r0存放第一个参数

                   swi    __led_on_swi_no                  // 产生SWI软中断,中断号为__led_on_swi_no

                   mov  ret, r0                                     // 软中断处理结束,取得中断处理返回值,传递给ret变量

         }

         return ret;                                                           // ret返回给调用led_on的语句

}

 

 

int led_off(int led_no){          

         int ret;                                                       // 返回值

          __asm{                                                     // 由于C程序中没有SWI对应表达式,所以使用混合编程

                   mov  r0, led_no                               // 根据ATPCS规则,r0存放第一个参数

                   swi    __led_off_swi_no                       // 产生SWI软中断,中断号为__led_off_swi_no

                   mov  ret, r0                                     // 软中断处理结束,取得中断处理返回值,传递给ret变量

         }                                                              

         return ret;                                                           // ret返回给调用led_off的语句

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgjpp.html