📄 swiisr.s
字号:
;/*
;*********************************************************************************************************
;* 文件: SWIISR.S
;* 描述: 软件中断的服务程序,提供系统服务并调用 SWI_ISR 函数(尽量在 SWI.C 中实现功能).
;* 编写: 深思 (001-12345@sohu.com).
;*********************************************************************************************************
;*/
;/*
;*********************************************************************************************************
;* 函数: SoftwareInterrupt.
;* 描述: SWI 中断 (支持实参调用).
;* 已分配软中断号:
;* __swi(0x10) void OS_TASK_SW(void); /* 任务级任务切换函数 */
;* __swi(0x11) void _OSStartHighRdy(void); /* 运行优先级最高的任务 */
;* __swi(0x12) void OS_ENTER_CRITICAL(void); /* 关中断 */
;* __swi(0x13) void OS_EXIT_CRITICAL(void); /* 开中断 */
;*********************************************************************************************************
;*/
IMPORT SWI_ISR ; 软中断异常 C语言 处理函数.
IMPORT OSCtxSw ; 任务级任务切换函数.
IMPORT OSStartHighRdy2 ; 切换到最高优先级任务.
EXPORT SoftwareInterrupt
AREA swi_asm,CODE,READONLY
CODE32
SoftwareInterrupt
STMFD SP!, {R0-R3, R12, LR}
LDR R0, [LR,#-4]
BIC R0, R0, #0xFF000000 ; R0 = SWI号,R1指向参数存储位置
CMP R0, #0x0011 ; SWI 0x11 运行优先级最高的任务.
BNE tSWI_10
LDMFD SP!, {R0-R3, R12, LR}
B OSStartHighRdy2
tSWI_10
CMP R0, #0x0010 ; SWI 0x10 任务级任务切换.
BNE tSWI_END
LDMFD SP!, {R0-R3, R12, LR}
B OSCtxSw
tSWI_END
MOV R1, SP
BL SWI_ISR ; 调用 C 语言 SWI 服务函数(*待完善*).
LDMFD SP!, {R0-R3, R12, PC}^
;/*
;*********************************************************************************************************
END
;*********************************************************************************************************
;*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -