📄 critical.s
字号:
;*********************************************************************
;* Copyright (c) 2011-2012,李士伟
;* All rights reserved.
;*文 件 名:critical.s
;*描 述:临界代码段操作相关汇编函数
;*当前版本:V1.01
;*作 者:李士伟
;*创建日期:2011.10.15
;*********************************************************************
;*********************************************************************
;*版 本:V1.01
;*修 改 人:李士伟
;*修改日期:2012.01.31
;*描 述:因系统调用的处理方式修改,而作相应修改
;*********************************************************************
; 汇编代码使用到的与处理器相关的宏定义
GET arch\lpc2103\asm_cpu.inc
; 引出源本文件 内部函数标号
EXPORT __OS_ENTER_CRITICAL ; 系统代码进入临界段
EXPORT __OS_EXIT_CRITICAL ; 系统代码退出临界段
; 引入外部变量标号
IMPORT OSEnterSum
CODE32
PRESERVE8
AREA critical_section,CODE, READONLY
;*********************************************************************
;*函 数 名:__OS_ENTER_CRITICAL
;*描 述:关中断内核代码进入临界段
;*输入参数:无
;*输出参数:无
;*返 回 值:无
;*注 意:该函数运行内核代码时被直接调用关中断进入内核临界代码段
;*********************************************************************
__OS_ENTER_CRITICAL
MRS R0, SPSR
ORR R0, R0, #I_Bit
MSR SPSR_c, R0
LDR R1, =OSEnterSum
LDR R0, [R1]
ADD R0, R0, #1
STR R0, [R1]
BX LR
;*********************************************************************
;*函 数 名:__OS_ENTER_CRITICAL
;*描 述:if (--OSEnterSum == 0),开中断内核代码退出临界段
;*输入参数:无
;*输出参数:无
;*返 回 值:无
;*注 意:该函数运行内核代码时被直接调用关中断进入内核临界代码段
;*********************************************************************
__OS_EXIT_CRITICAL
LDR R1, =OSEnterSum
LDR R0, [R1]
SUBS R0, R0, #1
STR R0, [R1]
BXNE LR
; OSEnterSum == 0 清除关中断标志
MRS R0, SPSR
BIC R0, R0, #I_Bit
MSR SPSR_c, R0
BX LR
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -