⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_core.src

📁 本RTOS参考 usOS-II, ARM-RTX
💻 SRC
📖 第 1 页 / 共 3 页
字号:
; .\OS_CORE.SRC generated from: OS_CORE.C
; COMPILER INVOKED BY:
;        D:\Program Files\Keil750A\C51\BIN\C51.EXE OS_CORE.C DEBUG OBJECTEXTEND CODE SYMBOLS SRC(.\OS_CORE.SRC)

$NOMOD51

NAME	OS_CORE

P0	DATA	080H
P1	DATA	090H
P2	DATA	0A0H
P3	DATA	0B0H
T0	BIT	0B0H.4
AC	BIT	0D0H.6
T1	BIT	0B0H.5
T2	BIT	090H.0
EA	BIT	0A8H.7
IE	DATA	0A8H
EXF2	BIT	0C8H.6
RD	BIT	0B0H.7
ES	BIT	0A8H.4
IP	DATA	0B8H
RI	BIT	098H.0
INT0	BIT	0B0H.2
CY	BIT	0D0H.7
TI	BIT	098H.1
INT1	BIT	0B0H.3
RCAP2H	DATA	0CBH
PS	BIT	0B8H.4
SP	DATA	081H
T2EX	BIT	090H.1
OV	BIT	0D0H.2
RCAP2L	DATA	0CAH
C_T2	BIT	0C8H.1
WR	BIT	0B0H.6
RCLK	BIT	0C8H.5
TCLK	BIT	0C8H.4
SBUF	DATA	099H
PCON	DATA	087H
SCON	DATA	098H
TMOD	DATA	089H
TCON	DATA	088H
IE0	BIT	088H.1
IE1	BIT	088H.3
B	DATA	0F0H
CP_RL2	BIT	0C8H.0
ACC	DATA	0E0H
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
ET2	BIT	0A8H.5
TF1	BIT	088H.7
TF2	BIT	0C8H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
EX1	BIT	0A8H.2
IT1	BIT	088H.2
TH2	DATA	0CDH
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
TL2	DATA	0CCH
PT0	BIT	0B8H.1
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
DPH	DATA	083H
DPL	DATA	082H
EXEN2	BIT	0C8H.3
REN	BIT	098H.4
T2CON	DATA	0C8H
RXD	BIT	0B0H.0
TXD	BIT	0B0H.1
F0	BIT	0D0H.5
PSW	DATA	0D0H
?PR?OSInit?OS_CORE   SEGMENT CODE 
?PR?_os_sys_init?OS_CORE                 SEGMENT CODE 
?DT?_os_sys_init?OS_CORE                 SEGMENT DATA OVERLAYABLE 
?PR?_os_tsk_create_user?OS_CORE          SEGMENT CODE 
?DT?_os_tsk_create_user?OS_CORE          SEGMENT DATA OVERLAYABLE 
?PR?OSIntExit?OS_CORE                    SEGMENT CODE 
?DT?OSIntExit?OS_CORE                    SEGMENT DATA OVERLAYABLE 
?PR?OSTimeTick?OS_CORE                   SEGMENT CODE 
?PR?OSFindNextRunningTask?OS_CORE        SEGMENT CODE 
?PR?_os_dly_wait?OS_CORE                 SEGMENT CODE 
?PR?_OSTaskSuspend?OS_CORE               SEGMENT CODE 
?PR?_OSTaskResume?OS_CORE                SEGMENT CODE 
?CO?OS_CORE          SEGMENT CODE 
?DT?OS_CORE          SEGMENT DATA 
?XD?OS_CORE          SEGMENT XDATA 
	EXTRN	IDATA (STACK)
	EXTRN	CODE (?C?MEMSET)
	EXTRN	CODE (?C?ICALL)
	EXTRN	CODE (?C?COPY)
	PUBLIC	OSRdyTbl
	PUBLIC	gStack
	PUBLIC	Tasks_TCB
	PUBLIC	OSCurrentTaskID
	PUBLIC	OSTsakStackBotton
	PUBLIC	taskMAX_stack
	PUBLIC	OS_IRQ_Sum
	PUBLIC	OSRdyGrp
	PUBLIC	OSUnMapTbl
	PUBLIC	OSMapTbl
	PUBLIC	_OSTaskResume
	PUBLIC	_OSTaskSuspend
	PUBLIC	_os_dly_wait
	PUBLIC	OSFindNextRunningTask
	PUBLIC	OSTimeTick
	PUBLIC	OSIntExit
	PUBLIC	?_os_tsk_create_user?BYTE
	PUBLIC	_os_tsk_create_user
	PUBLIC	_os_sys_init
	PUBLIC	OSInit

	RSEG  ?DT?_os_sys_init?OS_CORE
?_os_sys_init?BYTE:
       task?141:   DS   3
	ORG  3
     pstack?142:   DS   2

	RSEG  ?DT?OSIntExit?OS_CORE
?OSIntExit?BYTE:
stack_bottom?350:   DS   1
   old_addr?352:   DS   2
 old_taskid?353:   DS   1

	RSEG  ?DT?_os_tsk_create_user?OS_CORE
?_os_tsk_create_user?BYTE:
       task?244:   DS   3
       prio?245:   DS   1
        stk?246:   DS   3
       size?247:   DS   2
	ORG  9
     pstack?248:   DS   2

	RSEG  ?DT?OS_CORE
       OSRdyGrp:   DS   1
     OS_IRQ_Sum:   DS   1
OSTsakStackBotton:   DS   7
OSCurrentTaskID:   DS   1
      Tasks_TCB:   DS   65
         gStack:   DS   1
       OSRdyTbl:   DS   1

	RSEG  ?XD?OS_CORE
  taskMAX_stack:   DS   24

	RSEG  ?CO?OS_CORE
OSMapTbl:
	DB	001H
	DB	002H
	DB	004H
	DB	008H
	DB	010H
	DB	020H
	DB	040H
	DB	080H
	DB	000H

OSUnMapTbl:
	DB	000H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	004H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	005H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	004H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	006H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	004H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	005H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	004H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	007H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	004H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	005H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	004H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	006H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	004H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	005H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	004H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H
	DB	003H
	DB	000H
	DB	001H
	DB	000H
	DB	002H
	DB	000H
	DB	001H
	DB	000H

; #include "include.h"
; 
; #define DEBUG
; #define OS_TASK_SWITCH
; 
; extern uint8 idata STACK[1];
; //堆栈首地址
; uint8 data gStack;
; 
; //当前任务号
; uint8 data OSCurrentTaskID;
; 
; //下一个任务号
; //uint8 data OSNextTaskID; 
; 
; 
; uint8 const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00};
; uint8 data OSTsakStackBotton[OS_MAX_TASKS + 2];  // 任务堆栈底部位置
; uint8 data OS_IRQ_Sum;//中断计数器
; 
; uint8 xdata taskMAX_stack[24];
; 
; uint8  code  OSUnMapTbl[] = {
;     0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x00 to 0x0F                             */
;     4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x10 to 0x1F                             */
;     5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x20 to 0x2F                             */
;     4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x30 to 0x3F                             */
;     6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x40 to 0x4F                             */
;     4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x50 to 0x5F                             */
;     5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x60 to 0x6F                             */
;     4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x70 to 0x7F                             */
;     7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x80 to 0x8F                             */
;     4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x90 to 0x9F                             */
;     5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xA0 to 0xAF                             */
;     4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xB0 to 0xBF                             */
;     6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xC0 to 0xCF                             */
;     4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xD0 to 0xDF                             */
;     5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xE0 to 0xEF                             */
;     4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0        /* 0xF0 to 0xFF                             */
; };
; // 上面256的表可以简化为16*2的表,查表麻烦点,不过说不定最后占用代码空间更大
; // 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,  //0Xx0 0Xx1 0Xx2 0Xx3....0XxE 0XxF
; // 0, 4, 5, 4, 6, 4, 5, 4, 7, 4, 5, 4, 6, 4, 5, 4,  //0X00 0X10 0X20 0X30....0XE0 0XF0
; 
; uint8   data         OSRdyGrp;                        // Ready list group
; uint8   data         OSRdyTbl[OS_RDY_TBL_SIZE];       // Table of tasks which are ready to run
; 
; OS_TCB data Tasks_TCB[OS_MAX_TASKS];
; 
; extern void Push_Reg (void);
; extern void Pop_Reg (void);
; 
; 
; 
; //系统开始运行时任务表初始化
; //void OSCPUInit(void)  SMALL
; //{uint8 i;
; // 
; //}
; 
; //功能描述: 系统开始运行时初始化
; void OSInit(void) SMALL

	RSEG  ?PR?OSInit?OS_CORE
OSInit:
	USING	0
			; SOURCE LINE # 62
; {uint8 i;
;     
;     gStack=STACK-2; //堆栈的首地址
			; SOURCE LINE # 65
	MOV  	gStack,#LOW (STACK+0FFFEH)
;     OS_IRQ_Sum = 0;
			; SOURCE LINE # 66
	CLR  	A
	MOV  	OS_IRQ_Sum,A
;     
;     OSRdyGrp=0;//就绪组标志
			; SOURCE LINE # 68
	MOV  	OSRdyGrp,A
;     memset(OSRdyTbl, 0, OS_RDY_TBL_SIZE);///就绪组内标志
			; SOURCE LINE # 69
	MOV  	R6,A
	MOV  	R7,#01H
	MOV  	R5,A
	MOV  	R3,A
	MOV  	R2,#HIGH (OSRdyTbl)
	MOV  	R1,#LOW (OSRdyTbl)
	LCALL	?C?MEMSET
;     
;     OSCurrentTaskID = OS_MAX_TASKS-1;//当前任务为系统任务
			; SOURCE LINE # 71
	MOV  	OSCurrentTaskID,#04H
;     
;     //OSCPUInit();//初始化任务表
;     for (i = 0; i < OS_MAX_TASKS; i++)
			; SOURCE LINE # 74
;---- Variable 'i?040' assigned to Register 'R7' ----
	CLR  	A
	MOV  	R7,A
?C0001:
;     {
			; SOURCE LINE # 75
;        Tasks_TCB[i].pTask          = 0;      // Load Stack pointer in TCB
			; SOURCE LINE # 76
	MOV  	A,R7
	MOV  	B,#0DH
	MUL  	AB
	ADD  	A,#LOW (Tasks_TCB)
	MOV  	R0,A
	MOV  	@R0,#00H
	INC  	R0
	MOV  	@R0,#00H
	INC  	R0
	MOV  	@R0,#00H
;        //Tasks_TCB[i].OSTCBPrio    = i;  // Load task priority into TCB
;        Tasks_TCB[i].OSTCBStat      = OS_STAT_RDY;    // Task is ready to run
			; SOURCE LINE # 78
	MOV  	A,R7
	MOV  	B,#0DH
	MUL  	AB
	ADD  	A,#LOW (Tasks_TCB+05H)
	MOV  	R0,A
	CLR  	A
	MOV  	@R0,A
;        Tasks_TCB[i].OSTCBDly       = 0;              //Task is not delayed
			; SOURCE LINE # 79
	MOV  	A,R7
	MOV  	B,#0DH
	MUL  	AB
	ADD  	A,#LOW (Tasks_TCB+03H)
	MOV  	R0,A
	CLR  	A
	MOV  	@R0,A
	INC  	R0
	MOV  	@R0,A
;        //Tasks_TCB[i].stk            = stk;
;        Tasks_TCB[i].size           = 0;
			; SOURCE LINE # 81
	MOV  	A,R7
	MOV  	B,#0DH
	MUL  	AB
	ADD  	A,#LOW (Tasks_TCB+09H)
	MOV  	R0,A
	CLR  	A
	MOV  	@R0,A
	INC  	R0
	MOV  	@R0,A
;        Tasks_TCB[i].stk_used       = 0;
			; SOURCE LINE # 82
	MOV  	A,R7
	MOV  	B,#0DH
	MUL  	AB
	ADD  	A,#LOW (Tasks_TCB+0BH)
	MOV  	R0,A
	CLR  	A
	MOV  	@R0,A
	INC  	R0
	MOV  	@R0,A
;     }
			; SOURCE LINE # 83
	INC  	R7
	CJNE 	R7,#05H,?C0001

⌨️ 快捷键说明

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