swi.c

来自「嵌入式开发」· C语言 代码 · 共 62 行

C
62
字号
/*
*********************************************************************************************************
* 文件: SWI.C
* 描述: SWI 中断 C 语言服务函数部分,通过 SWIISR.S中调用,大部分软件中断在此处理.
* 编写: 深思 (001-12345@sohu.com).
*********************************************************************************************************
*/

/*
*********************************************************************************************************
* 已分配软中断号:
*      __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);          开中断.
* 
* FLASH 与 RAM 中的程序分开调试的时候可以充分利用软件中断实现OS功能函数的调用.
*********************************************************************************************************
*/

#include "includes.h"

/*
*********************************************************************************************************
* 函数: void SWI_ISR(INT32U SWI_Num).
* 功能: 软中断异常处理程序,提供一些系统服务.
* 输入: 1. SWI_Num: 功能号.
*       2. Point:   实参指针.
*********************************************************************************************************
*/

void SWI_ISR(INT32U SWI_Num,INT32U *Point)
{
    switch (SWI_Num) {
        case 0x0012:                                    /* OS_ENTER_CRITICAL 关中断.    */
            __asm{
                MRS     R3, SPSR
                ORR     R3, R3, #(1<<7)
                MSR     SPSR_c, R3
            }
            ++OsEnterSum;
            break;
        case 0x0013:                                    /* OS_EXIT_CRITICAL 开中断.     */
            if (--OsEnterSum == 0) {
                __asm{
                    MRS     R3, SPSR
                    BICEQ   R3, R3, #(1<<7)
                    MSREQ   SPSR_c, R3
                }
            }
            break;
        default:
            break;
    }
}

/*
********************************************************************************************************
* End.
********************************************************************************************************
*/

⌨️ 快捷键说明

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