📄 os_cpu_c.src
字号:
; .\obj\OS_CPU_C.SRC generated from: uCosii\OS_CPU_C.C
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE uCosii\OS_CPU_C.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\OS_CPU_C.lst) SRC(.\obj\OS_CPU_C.SRC)
$NOMOD51
NAME OS_CPU_C
CCF2 BIT 0D8H.2
TB80 BIT 098H.3
SPI0CKR DATA 09DH
CCF3 BIT 0D8H.3
P0 DATA 080H
SPIEN BIT 0F8H.0
CCF4 BIT 0D8H.4
SM00 BIT 098H.7
P1 DATA 090H
AA BIT 0C0H.2
SM10 BIT 098H.6
WDTCN DATA 0FFH
P2 DATA 0A0H
SM20 BIT 098H.5
ADC0CF DATA 0BCH
P3 DATA 0B0H
AC BIT 0D0H.6
ADC1CF DATA 0ABH
P4 DATA 084H
EIE1 DATA 0E6H
P5 DATA 085H
EA BIT 0A8H.7
EIE2 DATA 0E7H
P6 DATA 086H
P7 DATA 096H
PSCTL DATA 08FH
MSTEN BIT 0F8H.1
CF BIT 0D8H.7
ADC0CN DATA 0E8H
DAC0CN DATA 0D4H
DAC1CN DATA 0D7H
ADC1CN DATA 0AAH
P0MDOUT DATA 0A4H
P1MDOUT DATA 0A5H
IE DATA 0A8H
P2MDOUT DATA 0A6H
P3MDOUT DATA 0A7H
TMR3RLH DATA 093H
EIP1 DATA 0F6H
EIP2 DATA 0F7H
PCA0CPH0 DATA 0FAH
PCA0CPH1 DATA 0FBH
P3IF DATA 0ADH
TMR3RLL DATA 092H
PCA0CPH2 DATA 0FCH
CR BIT 0D8H.6
PCA0CPH3 DATA 0FDH
EXF2 BIT 0C8H.6
REN0 BIT 098H.4
PCA0CPH4 DATA 0FEH
PCA0CPL0 DATA 0EAH
EMI0CF DATA 0A3H
PCA0CPL1 DATA 0EBH
PCA0CPM0 DATA 0DAH
PCA0MD DATA 0D9H
PCA0CN DATA 0D8H
PCA0CPL2 DATA 0ECH
PCA0CPM1 DATA 0DBH
PCA0CPL3 DATA 0EDH
PCA0CPM2 DATA 0DCH
IP DATA 0B8H
PCA0CPL4 DATA 0EEH
PCA0CPM3 DATA 0DDH
PCA0CPM4 DATA 0DEH
TXBSY BIT 0F8H.3
CY BIT 0D0H.7
SI BIT 0C0H.3
XBR0 DATA 0E1H
SADEN0 DATA 0B9H
XBR1 DATA 0E2H
EMI0CN DATA 0AFH
SADEN1 DATA 0AEH
XBR2 DATA 0E3H
REF0CN DATA 0D1H
SADDR0 DATA 0A9H
SADDR1 DATA 0F3H
AMX0CF DATA 0BAH
AD0INT BIT 0E8H.5
RCAP2H DATA 0CBH
PS BIT 0B8H.4
SP DATA 081H
RCAP4H DATA 0E5H
EMI0TC DATA 0A1H
OV BIT 0D0H.2
SMB0CN DATA 0C0H
RCAP2L DATA 0CAH
MODF BIT 0F8H.5
RCAP4L DATA 0E4H
SMB0CR DATA 0CFH
CPT0CN DATA 09EH
P1MDIN DATA 0BDH
CPT1CN DATA 09FH
SPI0CN DATA 0F8H
PCON DATA 087H
SPIF BIT 0F8H.7
P74OUT DATA 0B5H
TMOD DATA 089H
TCON DATA 088H
WCOL BIT 0F8H.6
AMX0SL DATA 0BBH
AMX1SL DATA 0ACH
TMR3CN DATA 091H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
DAC0H DATA 0D3H
ADC0H DATA 0BFH
OSCICN DATA 0B2H
DAC1H DATA 0D6H
SMBFTE BIT 0C0H.1
BUSY BIT 0C0H.7
DAC0L DATA 0D2H
ADC0L DATA 0BEH
DAC1L DATA 0D5H
ACC DATA 0E0H
ES0 BIT 0A8H.4
AD0EN BIT 0E8H.7
CT2 BIT 0C8H.1
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
ET2 BIT 0A8H.5
RI0 BIT 098H.0
TF1 BIT 088H.7
TF2 BIT 0C8H.7
SMBTOE BIT 0C0H.0
TH0 DATA 08CH
EX0 BIT 0A8H.0
TI0 BIT 098H.1
IT0 BIT 088H.0
PCA0H DATA 0F9H
TH1 DATA 08DH
EX1 BIT 0A8H.2
IT1 BIT 088H.2
TH2 DATA 0CDH
P BIT 0D0H.0
TH4 DATA 0F5H
OSCXCN DATA 0B1H
TL0 DATA 08AH
PCA0L DATA 0E9H
TL1 DATA 08BH
TL2 DATA 0CCH
PT0 BIT 0B8H.1
TL4 DATA 0F4H
RS0 BIT 0D0H.3
PT1 BIT 0B8H.3
RS1 BIT 0D0H.4
PT2 BIT 0B8H.5
TR0 BIT 088H.4
AD0TM BIT 0E8H.6
TR1 BIT 088H.6
TR2 BIT 0C8H.2
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
SLVSEL BIT 0F8H.2
DPH DATA 083H
RCLK0 BIT 0C8H.5
ADC0GTH DATA 0C5H
TCLK0 BIT 0C8H.4
DPL DATA 082H
ADC0GTL DATA 0C4H
SBUF0 DATA 099H
SBUF1 DATA 0F2H
ADC0LTH DATA 0C7H
EXEN2 BIT 0C8H.3
RSTSRC DATA 0EFH
FLACL DATA 0B7H
CPRL2 BIT 0C8H.0
SCON0 DATA 098H
SCON1 DATA 0F1H
ADC0LTL DATA 0C6H
T2CON DATA 0C8H
STA BIT 0C0H.5
T4CON DATA 0C9H
SMB0ADR DATA 0C3H
SMB0DAT DATA 0C2H
SPI0CFG DATA 09AH
TMR3H DATA 095H
CKCON DATA 08EH
RXOVRN BIT 0F8H.4
TMR3L DATA 094H
AD0LJST BIT 0E8H.0
F0 BIT 0D0H.5
FLSCL DATA 0B6H
AD0CM0 BIT 0E8H.2
F1 BIT 0D0H.1
STO BIT 0C0H.4
ENSMB BIT 0C0H.6
AD0CM1 BIT 0E8H.3
SPI0DAT DATA 09BH
AD0WINT BIT 0E8H.1
ADC1 DATA 09CH
AD0BUSY BIT 0E8H.4
PSW DATA 0D0H
CCF0 BIT 0D8H.0
RB80 BIT 098H.2
SMB0STA DATA 0C1H
CCF1 BIT 0D8H.1
?PR?_?OSTaskStkInit?OS_CPU_C SEGMENT CODE
?PR?_?OSInitHookBegin?OS_CPU_C SEGMENT CODE
?PR?_?OSInitHookEnd?OS_CPU_C SEGMENT CODE
?PR?_?OSTaskCreateHook?OS_CPU_C SEGMENT CODE
?PR?_?OSTaskSwHook?OS_CPU_C SEGMENT CODE
?PR?_?OSTCBInitHook?OS_CPU_C SEGMENT CODE
?PR?_?OSTimeTickHook?OS_CPU_C SEGMENT CODE
?PR?_?OSTaskIdleHook?OS_CPU_C SEGMENT CODE
?PR?UserTickTimer?OS_CPU_C SEGMENT CODE
?PR?OSTickISR?OS_CPU_C SEGMENT CODE
EXTRN CODE (_?OSIntExit)
EXTRN CODE (_?OSTimeTick)
EXTRN CODE (_?OSIntEnter)
EXTRN CODE (?C?ADDXBP)
EXTRN CODE (?C?XBPOFF)
EXTRN DATA (?C_XBP)
EXTRN CODE (?C?ILDIX)
EXTRN CODE (?C?CSTPTR)
PUBLIC OSTickISR
PUBLIC UserTickTimer
PUBLIC _?OSTaskIdleHook
PUBLIC _?OSTimeTickHook
PUBLIC _?OSTCBInitHook
PUBLIC _?OSTaskSwHook
PUBLIC _?OSTaskCreateHook
PUBLIC _?OSInitHookEnd
PUBLIC _?OSInitHookBegin
PUBLIC _?OSTaskStkInit
; /*
; *********************************************************************************************************
; * uC/OS-II
; * 实时内核
; *
; * (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
; * 版权所有
; *
; * MCU-51 专用代码
; * KEIL C51大模式编译
; *
; * 文件名 : OS_CPU_C.C
; * 作者 : Jean J. Labrosse
; * 改编 : 杨屹 gdtyy@ri.gdt.com.cn 巨龙公司系统集成开发部 2002.09.27
; * 改编 : 钟文青,升级到与ucOS-II 2.51的代码,2003.5
; *********************************************************************************************************
; */
;
; #define OS_CPU_GLOBALS
; #include "source\includes.h"
;
; /*
; *********************************************************************************************************
; * 初始化任务堆栈
; *
; * 描述 : 这个函数被OSTaskCreate()或OSTaskCreateExt()调用,以便初始化新创建任务的堆栈结构。本函数
; * 与处理器高度相关。
; *
; * 参数 : task 指向任务代码的指针
; *
; * pdata 当任务第一次执行时将要传入任务的用户数据结构指针
; *
; * ptos 栈顶指针。ptos指针被默认为用户堆栈入口指针。如果OS_STK_GROWTH被置1,那么,
; * ptos指向用户堆栈的最高有效地址。同样地,如果OS_STK_GROWTH清0,ptos将指向
; * 用户堆栈的最低有效地址。
; *
; * opt 指定可以改变OSTaskStkInit()行为的选项。(见uCOS_II.H for OS_TASK_OPT_???)。
; *
; * 返回值 : 我修改了原来的程序,使函数总是返回用户堆栈空间的最低有效地址。这样修改提高了TCB换入换出
; * 的效率。
; *
; * 注意 : 任务堆栈结构:
; *
; * ---------- -
; * 用户栈最高地址---->| | |
; * ---------- |
; * | ... | 仿真堆栈空间
; *---------- ---------- | 每任务一个
; *|OSTCBCur| ?C_XBP---->| | | KEIL自动处理
; *---------- ---------- -
; * | |空闲间隔|
; * | ----------------------- ---------- ----------
; * \---->|OSTCBCur->OSTCBStkPtr| |?C_XBP低| SP---->| |
; * ----------------------- ---------- ----------
; * | |?C_XBP高| | |
; * | ---------- - ----------
; * | | | | | . |
; * | ---------- | | . |
; * | | | | | . |
; * | ---------- | ----------
; * | | . |长度 | | +1
; * | | . | | ----------
; * | | . | | OSStack---->| | 0
; * | ---------- | ----------
; * | | | | OSStkStart---->| 不关心 | -1 低地址
; * | ---------- - ----------
; * \------------->| 长度 | 低地址 系统硬件堆栈
; * ----------
; * 用户堆栈 长度=SP-OSStkStart
; *********************************************************************************************************
; */
;
; OS_STK *OSTaskStkInit (void (*task)(void *pd) reentrant, void *ppdata, OS_STK *ptos, INT16U opt) reentrant
RSEG ?PR?_?OSTaskStkInit?OS_CPU_C
_?OSTaskStkInit:
USING 0
; SOURCE LINE # 73
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
; {
; OS_STK *stk;
;
; ppdata = ppdata;
; SOURCE LINE # 77
MOV DPTR,#06H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#06H
LCALL ?C?XBPOFF
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; opt = opt; //opt没被用到,保留此语句防止告警产生
; SOURCE LINE # 78
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; stk = ptos; //用户堆栈最低有效地址
; SOURCE LINE # 79
MOV DPTR,#09H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; *stk++ = 15; //用户堆栈长度
; SOURCE LINE # 80
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
MOV A,#0FH
LCALL ?C?CSTPTR
; *stk++ = (INT16U)task & 0xFF; //任务地址低8位
; SOURCE LINE # 81
MOV DPTR,#03H
LCALL ?C?XBPOFF
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
MOV A,R7
LCALL ?C?CSTPTR
; *stk++ = (INT16U)task >> 8; //任务地址高8位
; SOURCE LINE # 82
MOV DPTR,#03H
LCALL ?C?XBPOFF
INC DPTR
MOVX A,@DPTR
MOV R2,A
MOV A,R2
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
MOV A,R7
LCALL ?C?CSTPTR
; *stk++ = 0x0A; //ACC
; SOURCE LINE # 83
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
MOV A,#0AH
LCALL ?C?CSTPTR
; *stk++ = 0x0B; //B
; SOURCE LINE # 84
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
MOV A,#0BH
LCALL ?C?CSTPTR
; *stk++ = 0x00; //DPH
; SOURCE LINE # 85
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
CLR A
LCALL ?C?CSTPTR
; *stk++ = 0x00; //DPL
; SOURCE LINE # 86
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
CLR A
LCALL ?C?CSTPTR
; *stk++ = 0x00; //PSW
; SOURCE LINE # 87
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
CLR A
LCALL ?C?CSTPTR
; *stk++ = 0x00; //R0
; SOURCE LINE # 88
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
CLR A
LCALL ?C?CSTPTR
;
; //R3、R2、R1用于传递任务参数ppdata,其中R3代表存储器类型,R2为高字节偏移,R1为低字节位移。
; //通过分析KEIL汇编,了解到任务的void *ppdata参数恰好是用R3、R2、R1传递,不是通过虚拟堆栈。
; *stk++ = (INT16U)ppdata & 0xFF; //R1
; SOURCE LINE # 92
MOV DPTR,#06H
LCALL ?C?XBPOFF
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -