📄 os_cpu_c.src
字号:
; ..\uCOS-II\Ports\MCS51\Keil\OS_CPU_C.SRC generated from: ..\uCOS-II\Ports\MCS51\Keil\OS_CPU_C.C
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE ..\uCOS-II\Ports\MCS51\Keil\OS_CPU_C.C OMF2 ROM(COMPACT) BROWSE MODP2 DEBUG SYMBOLS PRINT(.\OS_CPU_C.lst) PREPRINT(.\OS_CPU_C.i) OBJECT(.\OS_CPU_C.obj)
$NOMOD51
NAME OS_CPU_C
CCF2 BIT 0D8H.2
CCF3 BIT 0D8H.3
P0 DATA 080H
CCF4 BIT 0D8H.4
SADDR_1 DATA 0AAH
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
AC BIT 0D0H.6
T0 BIT 0B0H.4
T1 BIT 0B0H.5
EA BIT 0A8H.7
T2 BIT 090H.0
EC BIT 0A8H.6
CF BIT 0D8H.7
CH DATA 0F9H
FE BIT 098H.7
IE DATA 0A8H
CL DATA 0E9H
P0_0 BIT 080H.0
CCAP0H DATA 0FAH
CEX0 BIT 090H.3
P1_0 BIT 090H.0
P0_1 BIT 080H.1
CCAP1H DATA 0FBH
IPH0 DATA 0B7H
P2_0 BIT 0A0H.0
CEX1 BIT 090H.4
P1_1 BIT 090H.1
P0_2 BIT 080H.2
CCAP2H DATA 0FCH
P3_0 BIT 0B0H.0
P2_1 BIT 0A0H.1
CEX2 BIT 090H.5
P1_2 BIT 090H.2
P0_3 BIT 080H.3
CCAP3H DATA 0FDH
P3_1 BIT 0B0H.1
P2_2 BIT 0A0H.2
CEX3 BIT 090H.6
P1_3 BIT 090H.3
P0_4 BIT 080H.4
CCAP4H DATA 0FEH
CCAP0L DATA 0EAH
CR BIT 0D8H.6
P3_2 BIT 0B0H.2
P2_3 BIT 0A0H.3
CEX4 BIT 090H.7
P1_4 BIT 090H.4
P0_5 BIT 080H.5
CCAP1L DATA 0EBH
CCAPM0 DATA 0DAH
EXF2 BIT 0C8H.6
IPL0 DATA 0B8H
RD BIT 0B0H.7
P3_3 BIT 0B0H.3
P2_4 BIT 0A0H.4
P1_5 BIT 090H.5
P0_6 BIT 080H.6
CCAP2L DATA 0ECH
CCAPM1 DATA 0DBH
P3_4 BIT 0B0H.4
P2_5 BIT 0A0H.5
P1_6 BIT 090H.6
P0_7 BIT 080H.7
CCAP3L DATA 0EDH
CCAPM2 DATA 0DCH
P3_5 BIT 0B0H.5
ES BIT 0A8H.4
P2_6 BIT 0A0H.6
P1_7 BIT 090H.7
CCAP4L DATA 0EEH
CCAPM3 DATA 0DDH
UD BIT 0D0H.1
P3_6 BIT 0B0H.6
P2_7 BIT 0A0H.7
CCAPM4 DATA 0DEH
P3_7 BIT 0B0H.7
RI BIT 098H.0
CY BIT 0D0H.7
INT0 BIT 0B0H.2
INT1 BIT 0B0H.3
TI BIT 098H.1
IE0_ BIT 088H.1
IE1_ BIT 088H.3
RCAP2H DATA 0CBH
PS BIT 0B8H.4
SP DATA 081H
CMOD DATA 0D9H
CCON DATA 0D8H
T2EX BIT 090H.1
OV BIT 0D0H.2
RCAP2L DATA 0CAH
FCON DATA 0D1H
WR BIT 0B0H.6
ICON DATA 0FFH
RCLK BIT 0C8H.5
TCLK BIT 0C8H.4
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
BDRCON DATA 09BH
IE0 DATA 0A8H
B DATA 0F0H
AUXR DATA 08EH
SBUF_1 DATA 0C1H
SCON_1 DATA 0C0H
OSCCON DATA 086H
ACC DATA 0E0H
CT2 BIT 0C8H.1
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
BDRCON_1 DATA 09CH
ET2 BIT 0A8H.5
TF1 BIT 088H.7
TF2 BIT 0C8H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
TH1 DATA 08DH
IT0 BIT 088H.0
TH2 DATA 0CDH
EX1 BIT 0A8H.2
TB8 BIT 098H.3
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
ECI BIT 090H.2
TL1 DATA 08BH
TL2 DATA 0CCH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
RS0 BIT 0D0H.3
PT1 BIT 0B8H.3
RS1 BIT 0D0H.4
PT2 BIT 0B8H.5
TR0 BIT 088H.4
TR1 BIT 088H.6
TR2 BIT 0C8H.2
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
WDTPRG DATA 0A7H
DPH DATA 083H
BRL DATA 09AH
DPL DATA 082H
IPH DATA 0B7H
EXEN2 BIT 0C8H.3
PPC BIT 0B8H.6
CPRL2 BIT 0C8H.0
IPL DATA 0B8H
REN BIT 098H.4
T2MOD DATA 0C9H
T2CON DATA 0C8H
WDTRST DATA 0A6H
EECON DATA 0D2H
SADEN DATA 0B9H
RXD BIT 0B0H.0
SADDR DATA 0A9H
CKCON DATA 08FH
TXD BIT 0B0H.1
AUXR1 DATA 0A2H
CKSEL DATA 085H
EETIM DATA 0D3H
F0 BIT 0D0H.5
PSW DATA 0D0H
CCF0 BIT 0D8H.0
CCF1 BIT 0D8H.1
SADEN_1 DATA 0BAH
?PR?_OSTaskStkInit?OS_CPU_C SEGMENT CODE INBLOCK
?DT?_OSTaskStkInit?OS_CPU_C SEGMENT DATA OVERLAYABLE
?PR?OSStartHighRdy?OS_CPU_C SEGMENT CODE INBLOCK
?PR?C_OSCtxSw?OS_CPU_C SEGMENT CODE INBLOCK
?PR?OSIntCtxSw?OS_CPU_C SEGMENT CODE INBLOCK
?PR?OSTickISR?OS_CPU_C SEGMENT CODE INBLOCK
?PR?SerialIntr?OS_CPU_C SEGMENT CODE INBLOCK
?PR?OSInitHookBegin?OS_CPU_C SEGMENT CODE INBLOCK
?PR?OSInitHookEnd?OS_CPU_C SEGMENT CODE INBLOCK
?PR?_OSTaskCreateHook?OS_CPU_C SEGMENT CODE INBLOCK
?PR?OSTaskSwHook?OS_CPU_C SEGMENT CODE INBLOCK
?PR?OSTaskStatHook?OS_CPU_C SEGMENT CODE INBLOCK
?PR?_OSTCBInitHook?OS_CPU_C SEGMENT CODE INBLOCK
?PR?OSTimeTickHook?OS_CPU_C SEGMENT CODE INBLOCK
?PR?OSTaskIdleHook?OS_CPU_C SEGMENT CODE INBLOCK
?DT?OS_CPU_C SEGMENT DATA
EXTRN DATA (OSRunning)
EXTRN DATA (C_XBP)
EXTRN IDATA (OSTCBCur)
EXTRN DATA (OSIntNesting)
EXTRN IDATA (OSTCBHighRdy)
EXTRN CODE (LoadCtx)
EXTRN CODE (OSTimeTick)
EXTRN IDATA (STACK_START)
EXTRN DATA (OSPrioCur)
EXTRN CODE (OSIntExit)
EXTRN DATA (OSPrioHighRdy)
EXTRN CODE (?C?CSTPTR)
PUBLIC SaveSP
PUBLIC SaveC_IBP
PUBLIC OSTaskIdleHook
PUBLIC OSTimeTickHook
PUBLIC _OSTCBInitHook
PUBLIC OSTaskStatHook
PUBLIC OSTaskSwHook
PUBLIC _OSTaskCreateHook
PUBLIC OSInitHookEnd
PUBLIC OSInitHookBegin
PUBLIC SerialIntr
PUBLIC OSTickISR
PUBLIC OSIntCtxSw
PUBLIC C_OSCtxSw
PUBLIC OSStartHighRdy
PUBLIC ?_OSTaskStkInit?BYTE
PUBLIC _OSTaskStkInit
RSEG ?DT?_OSTaskStkInit?OS_CPU_C
?_OSTaskStkInit?BYTE:
task?040: DS 3
ORG 3
pdat?041: DS 3
ORG 6
ptos?042: DS 2
ORG 8
opt?043: DS 2
ORG 10
stk?044: DS 3
RSEG ?DT?OS_CPU_C
SaveC_IBP: DS 3
SaveSP: DS 1
; #pragma SRC
; /*
; *********************************************************************************************************
; * uC/OS-II
; * The Real-Time Kernel
; *
; * (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
; * All Rights Reserved
; *
; *
; * 80x86/80x88 Specific code
; * LARGE MEMORY MODEL
; *
; * File : OS_CPU_C.C
; * By : Jean J. Labrosse
; *
; * Ported date: Dec 2, 2003
; * By: Stuart Wright (swright@jiskoot.com)
; * Target platform: Keil C51 V7.07 and above
; *
; * Based on port for 8051 by John X. Liu, China, (johnxliu@163.com)
; ********************************************************************************************************
; */
;
; #define OS_CPU_GLOBALS
; #include "includes.h"
; //#include "os_kcdef.h"
; /*
; *********************************************************************************************************
; * INITIALIZE A TASK'S STACK
; *
; * Description: This function is called by either OSTaskCreate() or OSTaskCreateExt() to initialize the
; * stack frame of the task being created. This function is highly processor specific.
; *
; * Arguments : task is a pointer to the task code
; *
; * pdata (vd) is a pointer to a user supplied data area that will be passed to the task
; * when the task first executes.
; *
; * ptos is a pointer to the top of stack. It is assumed that 'ptos' points to
; * a 'free' entry on the task stack. If OS_STK_GROWTH is set to 1 then
; * 'ptos' will contain the HIGHEST valid address of the stack. Similarly, if
; * OS_STK_GROWTH is set to 0, the 'ptos' will contains the LOWEST valid address
; * of the stack.
; *
; * opt specifies options that can be used to alter the behavior of OSTaskStkInit().
; * (see uCOS_II.H for OS_TASK_OPT_???).
; *
; * Returns : Always returns the location of the new top-of-stack' once the processor registers have
; * been placed on the stack in the proper order.
; *
; * Note(s) : Interrupts are enabled when your task starts executing. You can change this by setting the
; * PSW to 0x0002 instead. In this case, interrupts would be disabled upon task startup. The
; * application code would be responsible for enabling interrupts at the beginning of the task
; * code. You will need to modify OSTaskIdle() and OSTaskStat() so that they enable
; * interrupts. Failure to do this will make your system crash!
; *********************************************************************************************************
; */
;
; /* The stack variable points to the start pointer in hardware stack and is defined in OS_CPU_A */
; #if OS_STK_GROWTH==0
; #define PUSH(A) *(++stk) = ((INT8U)(A))
; #else
; #define PUSH(A) *(--stk) = ((INT8U)(A))
; #endif
; extern idata unsigned char STACK_START[1];
;
; extern OS_STK * data C_XBP;
; //extern INT8U idata * data C_IBP;
; //extern idata unsigned char STACK_TOP[1];
;
; OS_STK *OSTaskStkInit (void (*task)(void *pd) KCREENTRANT, void * pdat, OS_STK *ptos, INT16U opt) KCREENTRANT
RSEG ?PR?_OSTaskStkInit?OS_CPU_C
_OSTaskStkInit:
USING 0
; SOURCE LINE # 72
MOV task?040,R3
MOV task?040+01H,R2
MOV task?040+02H,R1
; {
; SOURCE LINE # 73
; INT8U * stk;
;
; opt+=0; //opt没被用到
; SOURCE LINE # 76
; //opt = opt; /* 'opt' is not used, prevent warning */
; pdat +=0;
; SOURCE LINE # 78
; //pdat = pdat;
; stk = (INT8U *) ptos; //用户堆栈 /* Load stack pointer
; SOURCE LINE # 80
MOV stk?044,#01H
MOV stk?044+01H,ptos?042
MOV stk?044+02H,ptos?042+01H
;
; //*(void _XDATA **)stk = pdat; /* */
; //stk += sizeof(void _XDATA *); /* Save the vd to external stack */
; PUSH(task); /* The value should be loaded to PC */
; SOURCE LINE # 84
MOV R7,AR1
MOV R3,stk?044
MOV A,stk?044+02H
DEC stk?044+02H
JNZ ?C0019
DEC stk?044+01H
?C0019:
DEC A
MOV R1,A
MOV R2,stk?044+01H
MOV A,R7
LCALL ?C?CSTPTR
; PUSH((INT16U)task>>8); /* next time when this task is running */
; SOURCE LINE # 85
MOV A,task?040+01H
MOV R7,A
MOV R3,stk?044
MOV A,stk?044+02H
DEC stk?044+02H
JNZ ?C0020
DEC stk?044+01H
?C0020:
DEC A
MOV R1,A
MOV R2,stk?044+01H
MOV A,R7
LCALL ?C?CSTPTR
;
; //PUSH((INT8U )(((INT32U) task>>16)+0x7F)); /* Third byte of PC for dallas 390 */
;
; /* Following is the registers pushed into hardware stack */
; PUSH('A'); /* ACC */
; SOURCE LINE # 90
MOV R3,stk?044
MOV A,stk?044+02H
DEC stk?044+02H
JNZ ?C0021
DEC stk?044+01H
?C0021:
DEC A
MOV R1,A
MOV R2,stk?044+01H
MOV A,#041H
LCALL ?C?CSTPTR
; PUSH('B'); /* B */
; SOURCE LINE # 91
MOV R3,stk?044
MOV A,stk?044+02H
DEC stk?044+02H
JNZ ?C0022
DEC stk?044+01H
?C0022:
DEC A
MOV R1,A
MOV R2,stk?044+01H
MOV A,#042H
LCALL ?C?CSTPTR
; //*++stk = 'X'; /* DPX */
; PUSH('H'); /* DPH */
; SOURCE LINE # 93
MOV R3,stk?044
MOV A,stk?044+02H
DEC stk?044+02H
JNZ ?C0023
DEC stk?044+01H
?C0023:
DEC A
MOV R1,A
MOV R2,stk?044+01H
MOV A,#048H
LCALL ?C?CSTPTR
; PUSH('L'); /* DPL */
; SOURCE LINE # 94
MOV R3,stk?044
MOV A,stk?044+02H
DEC stk?044+02H
JNZ ?C0024
DEC stk?044+01H
?C0024:
DEC A
MOV R1,A
MOV R2,stk?044+01H
MOV A,#04CH
LCALL ?C?CSTPTR
; // *++stk = 'X'; /* DPX1 for second DPTR */
; // *++stk = 'H'; /* DPH1 for second DPTR */
; // *++stk = 'L'; /* DPL1 for second DPTR */
; // *++stk = DPS; /* DPS for second DPTR */
; PUSH(PSW); /* PSW */
; SOURCE LINE # 99
MOV R3,stk?044
MOV A,stk?044+02H
DEC stk?044+02H
JNZ ?C0025
DEC stk?044+01H
?C0025:
DEC A
MOV R1,A
MOV R2,stk?044+01H
MOV A,PSW
LCALL ?C?CSTPTR
;
; PUSH(0); /* R0 */
; SOURCE LINE # 101
MOV R3,stk?044
MOV A,stk?044+02H
DEC stk?044+02H
JNZ ?C0026
DEC stk?044+01H
?C0026:
DEC A
MOV R1,A
MOV R2,stk?044+01H
CLR A
LCALL ?C?CSTPTR
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -