📄 swi.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 + -