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

📄 swiisr.s

📁 嵌入式开发
💻 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 + -