⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swi.s

📁 Rabbit 32Bit RTOS源代码
💻 S
字号:
;*********************************************************************
;*                  Copyright (c) 2011-2012,李士伟
;*                    All rights reserved.
;*文 件 名:swi.s
;*描    述:系统调用汇编处理
;*当前版本:V1.01
;*作    者:李士伟
;*创建日期:2011.10.03
;*********************************************************************
;*********************************************************************
;*版    本:V1.01
;*修 改 人:李士伟
;*修改日期:2012.01.31
;*描    述:修改系统调用汇编处理部分,使其不支持软中断嵌套
;*********************************************************************
; 汇编代码使用到的与处理器相关的宏定义
    GET arch\lpc2103\asm_cpu.inc

; 引出内部函数标号
    EXPORT  __SWI_Handler    ; 系统调用汇编处理句柄

; 引入OS_SWI_VECTORS中断向量表
    IMPORT  __OS_SWI_Vectors
    IMPORT  __SVC_Stack_Bottom
    IMPORT  __OS_TaskCtxSw
    IMPORT  __OS_StartHighRdyTask

MAX_SYS_NR    EQU   0x04

    CODE32
    PRESERVE8
    AREA  SWI_HANDLER,CODE, READONLY
__SWI_Handler
    LDR    SP,  =__SVC_Stack_Bottom         ; 使用管理模式栈
    STMFD  SP!, {R4-R5, R12, LR}            ; 保存用户R4-R5,R12,返回地址
    MRS    R5,  SPSR
    TST    R5,  #T_Bit
    LDRNEH R4,  [LR, #-2]
    BICNE  R4,  R4, #0xff00
    LDREQ  R4,  [LR, #-4]
    BICEQ  R4,  R4, #0xff000000

    CMP    R4,  #1
    LDRLO  PC,  =__OS_TaskCtxSw             ; SWI中断号0任务切换
    LDREQ  PC,  =__OS_StartHighRdyTask      ; 切换到新任务环境

    CMP    R4,  #MAX_SYS_NR
    BHI    __sys_return                     ; 中断号大于系统定义的最大中断号

; 查找系统调用接口地址
    LDR    R5,  =__OS_SWI_Vectors           ; 载入SWI中断向量表首址
    ADD    R4,  R5, R4, LSL #2              ; R4*4为系统调用地址在向量表中偏移量
    LDR    R4,  [R4]                        ; 载入接口地址入R4

    LDR    LR,  =__sys_return               ; 设置系统调用返回地址
    BX     R4                               ; 进入系统服务函数
__sys_return
    LDMFD  SP!, {R4-R5, R12, PC}^

    END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -