📄 os_cpu_a.src
字号:
; .\os_cpu_a.SRC generated from: ..\keilc51\os_cpu_a.c
; COMPILER INVOKED BY:
; C:\KEIL\C51\BIN\C51.EXE ..\keilc51\os_cpu_a.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\os_cpu_a.lst) SRC(.\os_cpu_a.SRC)
$NOMOD51
NAME OS_CPU_A
TB81 BIT 0C0H.3
P0 DATA 080H
P1 DATA 090H
SM01 BIT 0C0H.7
P2 DATA 0A0H
SM11 BIT 0C0H.6
P3 DATA 0B0H
SM21 BIT 0C0H.5
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
T2 BIT 090H.0
EA BIT 0A8H.7
DPH1 DATA 085H
IE DATA 0A8H
FL BIT 0D0H.1
DPL1 DATA 084H
TA DATA 0C7H
EXF2 BIT 0C8H.6
RD BIT 0B0H.7
REN1 BIT 0C0H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
SADEN0 DATA 0B9H
INT2 BIT 090H.4
SADEN1 DATA 0BAH
RXD0 BIT 0B0H.0
INT3 BIT 090H.5
RXD1 BIT 090H.2
INT4 BIT 090H.6
SADDR0 DATA 0A9H
TXD0 BIT 0B0H.1
INT5 BIT 090H.7
SADDR1 DATA 0AAH
TXD1 BIT 090H.3
RCAP2H DATA 0CBH
SP DATA 081H
T2EX BIT 090H.1
EPFI BIT 0D8H.5
OV BIT 0D0H.2
RCAP2L DATA 0CAH
C_T2 BIT 0C8H.1
WR BIT 0B0H.6
EWDI BIT 0E8H.4
WDIF BIT 0D8H.3
RCLK BIT 0C8H.5
EXIF DATA 091H
TCLK BIT 0C8H.4
PCON DATA 087H
PWDI BIT 0F8H.4
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
WTRF BIT 0D8H.2
CP_RL2 BIT 0C8H.0
SMOD_1 BIT 0D8H.7
ACC DATA 0E0H
ES0 BIT 0A8H.4
ET0 BIT 0A8H.1
ES1 BIT 0A8H.6
ET1 BIT 0A8H.3
TF0 BIT 088H.5
ET2 BIT 0A8H.5
TF1 BIT 088H.7
TF2 BIT 0C8H.7
RI1 BIT 0C0H.0
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TI1 BIT 0C0H.1
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
TH2 DATA 0CDH
EX2 BIT 0E8H.0
P BIT 0D0H.0
EX3 BIT 0E8H.1
SM0 BIT 098H.7
TL0 DATA 08AH
EX4 BIT 0E8H.2
SM1 BIT 098H.6
TL1 DATA 08BH
EX5 BIT 0E8H.3
SM2 BIT 098H.5
TL2 DATA 0CCH
PS0 BIT 0B8H.4
EIE DATA 0E8H
PT0 BIT 0B8H.1
PS1 BIT 0B8H.6
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
PT2 BIT 0B8H.5
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
TR2 BIT 0C8H.2
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
PX2 BIT 0F8H.0
PX3 BIT 0F8H.1
PX4 BIT 0F8H.2
DPH DATA 083H
PX5 BIT 0F8H.3
EIP DATA 0F8H
PFI BIT 0D8H.4
DPL DATA 082H
SBUF0 DATA 099H
SBUF1 DATA 0C1H
EXEN2 BIT 0C8H.3
SCON0 DATA 098H
REN BIT 098H.4
SCON1 DATA 0C0H
STATUS DATA 0C5H
T2MOD DATA 0C9H
T2CON DATA 0C8H
DPS DATA 086H
CKCON DATA 08EH
EWT BIT 0D8H.1
POR BIT 0D8H.6
F0 BIT 0D0H.5
PSW DATA 0D0H
WDCON DATA 0D8H
RWT BIT 0D8H.0
RB81 BIT 0C0H.2
?PR?OSCtxSw?OS_CPU_A SEGMENT CODE
?PR?OSTickISR?OS_CPU_A SEGMENT CODE
?PR?OSIntCtxSw?OS_CPU_A SEGMENT CODE
?PR?OSStartHighRdy?OS_CPU_A SEGMENT CODE
EXTRN XDATA (OSRunning)
EXTRN CODE (_?OSIntExit)
EXTRN XDATA (OSTCBCur)
EXTRN XDATA (OSIntNesting)
EXTRN XDATA (OSTCBHighRdy)
EXTRN CODE (_?OSTaskSwHook)
EXTRN CODE (_?OSTimeTick)
EXTRN XDATA (OSPrioCur)
EXTRN CODE (_?OSIntEnter)
EXTRN XDATA (OSPrioHighRdy)
EXTRN DATA (UserSysSP_Start)
EXTRN CODE (?C?PLDPTR)
EXTRN CODE (?C?CSTPTR)
EXTRN CODE (?C?CLDPTR)
PUBLIC OSStartHighRdy
PUBLIC OSIntCtxSw
PUBLIC OSTickISR
PUBLIC OSCtxSw
; //=======================================================================================================
; /*
; * uC/OS-II
; * The Real-Time Kernel
; *
; * (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
; * All Rights Reserved
; *
; *
; * 80x51 Specific code
; * LARGE MEMORY MODEL
; *
; * Keil C51 V7.06a
; *
; * File : OS_CPU_a.C
; * By : Lin FengGe
; */
; //=======================================================================================================
;
; //=======================================================================================================
; //#Lin@保护堆栈
; /*
; 用户仿真堆栈:
;
; -------------
; | High Addr | <--使用xdata空间
; -------------
; | |
; ----> | Stick | <--保护堆栈内容
; | | |
; | -------------
; | | Count | <--用户仿真堆栈基地址,存放堆栈使用计数<-----
; | ------------- |
; | |
; */
; //==========|=====================================================================|======================
; /* | |
; 系统堆栈: | |
; | ------------- |
; | | High Addr | <--idata |
; | ------------- ----------------------
; | | | <--当前任务SP ---->--| SP - UserSysSP_Start |
; | | | | |
; <---- | Stick | <--当前任务堆栈 ----------------------
; | | |
; | | |
; ------------- |
; | | <--UserSysSP_Start ---->-------->-----
; | |
; | System | <--系统使用
; | |
; -------------
;
; */
; //=======================================================================================================
; //#Lin@恢复堆栈
; /*
; 用户仿真堆栈:
;
; -------------
; | High Addr | <--使用xdata空间
; -------------
; | |
; <---- | Stick | <--保护堆栈内容
; | | |
; | -------------
; | | Count | <--用户仿真堆栈基地址,存放堆栈使用计数 ---->
; | ------------- |
; | |
; */
; //==========|=====================================================================|======================
; /* | |
; 系统堆栈: | |
; | ------------- |
; | | High Addr | <--idata |
; | ------------- -----------------
; | | | <--高优任务SP <---<---- | UserSysSP_Start |
; | | | | + Count |
; ----> | Stick | <--高优任务堆栈 -----------------
; | | |
; | | |
; ------------- |
; | | <--UserSysSP_Start ---->-------->-----
; | |
; | System | <--系统使用
; | |
; -------------
;
; */
; //=======================================================================================================
;
;
;
; //#define OS_CPU_GLOBALS
; #include "includes.h"
;
; //=======================================================================================================
; //=======================================================================================================
; #pragma asm
//#Lin@仿真keil c51中断生成入栈代码,参看.src文件
USERPUSHALL MACRO
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
ENDM
; #pragma endasm
;
; #pragma asm
//#Lin@仿真keil c51中断生成出栈代码,参看.src文件
USERPOPALL MACRO
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
ENDM
; #pragma endasm
;
; //=======================================================================================================
; //=======================================================================================================
; //=======================================================================================================
;
; //#Lin@任务级切换
; //#Lin@其他子程序参看此处注释
;
; void OSCtxSw(void) //using 3
RSEG ?PR?OSCtxSw?OS_CPU_A
OSCtxSw:
USING 0
; SOURCE LINE # 153
; {
; SOURCE LINE # 154
;
; OS_STK idata *UserSysStkSP; //#Lin@系统堆栈指针
; OS_STK *UserUsrStkSP; //#Lin@用户仿真堆栈指针
; INT8U UserStkCount; //#Lin@堆栈使用计数
;
;
; #pragma asm
;
; USERPUSHALL
USERPUSHALL
;
; #pragma endasm
;
; // OSTCBCur ->OSTCBStkPtr = UsrStkSP;
; //#Lin@指针操作,用户仿真堆栈填入内容
;
; UserSysStkSP = UserSysSP_Start; //#Lin@获取系统堆栈基地址
; SOURCE LINE # 170
MOV R7,UserSysSP_Start
;---- Variable 'UserSysStkSP?040' assigned to Register 'R7' ----
; UserStkCount = SP - UserSysSP_Start; //#Lin@获取堆栈使用范围
; SOURCE LINE # 171
CLR C
MOV A,SP
SUBB A,UserSysSP_Start
MOV R6,A
;---- Variable 'UserStkCount?042' assigned to Register 'R6' ----
; UserUsrStkSP = OSTCBCur ->OSTCBStkPtr; //#Lin@获取用户仿真堆栈基地址
; SOURCE LINE # 172
MOV DPTR,#OSTCBCur
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?PLDPTR
;---- Variable 'UserUsrStkSP?041' assigned to Register 'R1/R2/R3' ----
;
; // SP = UserSysSP_Start;//?
;
; // UserUsrStkSP += UserStkCount;
; *UserUsrStkSP = UserStkCount; //#Lin@存储计数
; SOURCE LINE # 177
MOV A,R6
LCALL ?C?CSTPTR
?C0003:
;
; // OSTCBCur ->OSTCBStkPtr = UserUsrStkSP;
; //#Lin@数据传输
;
; do
; {
; SOURCE LINE # 183
; UserUsrStkSP ++;
; SOURCE LINE # 184
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; UserSysStkSP ++;
; SOURCE LINE # 185
INC R7
; *UserUsrStkSP = *UserSysStkSP;
; SOURCE LINE # 186
MOV R0,AR7
MOV A,@R0
LCALL ?C?CSTPTR
; UserStkCount --;
; SOURCE LINE # 187
DJNZ R6,?C0003
; }
; SOURCE LINE # 188
; while(UserStkCount != 0);
; SOURCE LINE # 189
;
;
; OSTaskSwHook();
; SOURCE LINE # 192
LCALL _?OSTaskSwHook
;
; OSTCBCur = OSTCBHighRdy;
; SOURCE LINE # 194
MOV DPTR,#OSTCBHighRdy
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#OSTCBCur
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; OSPrioCur = OSPrioHighRdy;
; SOURCE LINE # 195
MOV DPTR,#OSPrioHighRdy
MOVX A,@DPTR
MOV DPTR,#OSPrioCur
MOVX @DPTR,A
;
; // UsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
; //#Lin@恢复仿真堆栈内容到系统堆栈
;
; UserStkCount = *OSTCBHighRdy ->OSTCBStkPtr; //#Lin@获取堆栈使用长度
; SOURCE LINE # 200
MOV DPTR,#OSTCBHighRdy
MOVX A,@DPTR
MOV R3,A
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?PLDPTR
LCALL ?C?CLDPTR
MOV R6,A
; UserSysStkSP = UserSysSP_Start; //#Lin@获取系统堆栈基地址
; SOURCE LINE # 201
MOV R7,UserSysSP_Start
; UserUsrStkSP = OSTCBHighRdy ->OSTCBStkPtr; //#Lin@获取用户仿真堆栈基地址
; SOURCE LINE # 202
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -