swiisr.s

来自「嵌入式操作系统 arm-ucos2041」· S 代码 · 共 56 行

S
56
字号
;/*
;*********************************************************************************************************
;* 文件: 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 + =
减小字号Ctrl + -
显示快捷键?