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

📄 os_core.src

📁 我移植的uCos 2.52版本,在MCS51上运行,代码进行了一些优化,可以编译在小模式.
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	MOV  	R0,?C_IBP
	MOV  	@R0,AR3
	INC  	R0
	MOV  	@R0,A
	INC  	R0
	MOV  	@R0,AR1
; 
; #if OS_EVENT_TBL_SIZE > 0
;     *ptbl++            = 0x00;
			; SOURCE LINE # 569
	MOV  	R0,?C_IBP
	MOV  	AR3,@R0
	INC  	R0
	INC  	R0
	INC  	@R0
	MOV  	A,@R0
	DEC  	R0
	MOV  	AR2,@R0
	JNZ  	?C0066
	INC  	@R0
?C0066:
	DEC  	A
	MOV  	R1,A
	CLR  	A
	LCALL	?C?CSTPTR
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 1
;     *ptbl++            = 0x00;
			; SOURCE LINE # 573
	MOV  	R0,?C_IBP
	MOV  	AR3,@R0
	INC  	R0
	INC  	R0
	INC  	@R0
	MOV  	A,@R0
	DEC  	R0
	MOV  	AR2,@R0
	JNZ  	?C0067
	INC  	@R0
?C0067:
	DEC  	A
	MOV  	R1,A
	CLR  	A
	LCALL	?C?CSTPTR
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 2
;     *ptbl++            = 0x00;
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 3
;     *ptbl++            = 0x00;
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 4
;     *ptbl++            = 0x00;
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 5
;     *ptbl++            = 0x00;
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 6
;     *ptbl++            = 0x00;
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 7
;     *ptbl              = 0x00;
; #endif
; }
			; SOURCE LINE # 599
	MOV  	A,?C_IBP
	ADD  	A,#06H
	MOV  	?C_IBP,A
	RET  	
; END OF _?OS_EventWaitListInit

; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                           INITIALIZE THE FREE LIST OF EVENT CONTROL BLOCKS
; *
; * Description: This function is called by OSInit() to initialize the free list of event control blocks.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitEventList (void)

	RSEG  ?PR?OS_InitEventList?OS_CORE
OS_InitEventList:
	USING	0
			; SOURCE LINE # 615
; {
			; SOURCE LINE # 616
; #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
; #if (OS_MAX_EVENTS > 1)
;     INT16U     i;
;     OS_EVENT  *pevent1;
;     OS_EVENT  *pevent2;
; 
; 
;     pevent1 = &OSEventTbl[0];
			; SOURCE LINE # 624
	MOV  	pevent1?1141,#00H
	MOV  	pevent1?1141+01H,#HIGH (OSEventTbl)
	MOV  	pevent1?1141+02H,#LOW (OSEventTbl)
;     pevent2 = &OSEventTbl[1];
			; SOURCE LINE # 625
	MOV  	pevent2?1142,#00H
	MOV  	pevent2?1142+01H,#HIGH (OSEventTbl+08H)
	MOV  	pevent2?1142+02H,#LOW (OSEventTbl+08H)
;     for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */
			; SOURCE LINE # 626
;---- Variable 'i?1140' assigned to Register 'R6/R7' ----
	CLR  	A
	MOV  	R7,A
	MOV  	R6,A
?C0030:
;         pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
			; SOURCE LINE # 627
	MOV  	R3,pevent1?1141
	MOV  	R2,pevent1?1141+01H
	MOV  	R1,pevent1?1141+02H
	CLR  	A
	LCALL	?C?CSTPTR
;         pevent1->OSEventPtr  = pevent2;
			; SOURCE LINE # 628
	MOV  	R3,pevent1?1141
	MOV  	R2,pevent1?1141+01H
	MOV  	R1,pevent1?1141+02H
	MOV  	DPTR,#04H
	MOV  	A,pevent2?1142+01H
	MOV  	B,pevent2?1142+02H
	LCALL	?C?ISTOPTR
;         pevent1++;
			; SOURCE LINE # 629
	MOV  	A,#08H
	ADD  	A,pevent1?1141+02H
	MOV  	pevent1?1141+02H,A
	CLR  	A
	ADDC 	A,pevent1?1141+01H
	MOV  	pevent1?1141+01H,A
;         pevent2++;
			; SOURCE LINE # 630
	MOV  	A,#08H
	ADD  	A,pevent2?1142+02H
	MOV  	pevent2?1142+02H,A
	CLR  	A
	ADDC 	A,pevent2?1142+01H
	MOV  	pevent2?1142+01H,A
;     }
			; SOURCE LINE # 631
	INC  	R7
	CJNE 	R7,#00H,?C0068
	INC  	R6
?C0068:
	MOV  	A,R7
	XRL  	A,#01H
	ORL  	A,R6
	JNZ  	?C0030
?C0031:
;     pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
			; SOURCE LINE # 632
	MOV  	R3,pevent1?1141
	MOV  	R2,pevent1?1141+01H
	MOV  	R1,pevent1?1141+02H
	CLR  	A
	LCALL	?C?CSTPTR
;     pevent1->OSEventPtr  = (OS_EVENT *)0;
			; SOURCE LINE # 633
	MOV  	R3,pevent1?1141
	MOV  	R2,pevent1?1141+01H
	MOV  	R1,pevent1?1141+02H
	MOV  	DPTR,#04H
	MOV  	B,A
	LCALL	?C?ISTOPTR
;     OSEventFreeList      = &OSEventTbl[0];
			; SOURCE LINE # 634
	MOV  	OSEventFreeList,#00H
	MOV  	OSEventFreeList+01H,#HIGH (OSEventTbl)
	MOV  	OSEventFreeList+02H,#LOW (OSEventTbl)
; #else
;     OSEventFreeList              = &OSEventTbl[0];               /* Only have ONE event control block        */
;     OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
;     OSEventFreeList->OSEventPtr  = (OS_EVENT *)0;
; #endif
; #endif
; }
			; SOURCE LINE # 641
	RET  	
; END OF OS_InitEventList

; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                                    INITIALIZE MISCELLANEOUS VARIABLES
; *
; * Description: This function is called by OSInit() to initialize miscellaneous variables.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitMisc (void)

	RSEG  ?PR?OS_InitMisc?OS_CORE
OS_InitMisc:
			; SOURCE LINE # 656
; {
			; SOURCE LINE # 657
; #if OS_TIME_GET_SET_EN > 0   
;     OSTime        = 0L;                                          /* Clear the 32-bit system clock            */
; #endif
; 
;     OSIntNesting  = 0;                                           /* Clear the interrupt nesting counter      */
			; SOURCE LINE # 662
	CLR  	A
	MOV  	OSIntNesting,A
;     OSLockNesting = 0;                                           /* Clear the scheduling lock counter        */
			; SOURCE LINE # 663
	MOV  	OSLockNesting,A
; 
;     OSTaskCtr     = 0;                                           /* Clear the number of tasks                */
			; SOURCE LINE # 665
	MOV  	OSTaskCtr,A
; 
;     OSRunning     = FALSE;                                       /* Indicate that multitasking not started   */
			; SOURCE LINE # 667
	MOV  	OSRunning,A
;     
;     OSCtxSwCtr    = 0;                                           /* Clear the context switch counter         */
			; SOURCE LINE # 669
	MOV  	OSCtxSwCtr+03H,A
	MOV  	OSCtxSwCtr+02H,A
	MOV  	OSCtxSwCtr+01H,A
	MOV  	OSCtxSwCtr,A
;     OSIdleCtr     = 0L;                                          /* Clear the 32-bit idle counter            */
			; SOURCE LINE # 670
	MOV  	OSIdleCtr+03H,A
	MOV  	OSIdleCtr+02H,A
	MOV  	OSIdleCtr+01H,A
	MOV  	OSIdleCtr,A
; 
; #if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;     OSIdleCtrRun  = 0L;
;     OSIdleCtrMax  = 0L;
;     OSStatRdy     = FALSE;                                       /* Statistic task is not ready              */
; #endif
; }
			; SOURCE LINE # 677
	RET  	
; END OF OS_InitMisc

; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                                       INITIALIZE THE READY LIST
; *
; * Description: This function is called by OSInit() to initialize the Ready List.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitRdyList (void)

	RSEG  ?PR?OS_InitRdyList?OS_CORE
OS_InitRdyList:
	USING	0
			; SOURCE LINE # 692
; {
			; SOURCE LINE # 693
;     INT16U   i;
;     INT8U   *prdytbl;
; 
; 
;     OSRdyGrp      = 0x00;                                        /* Clear the ready list                     */
			; SOURCE LINE # 698
	CLR  	A
	MOV  	OSRdyGrp,A
;     prdytbl       = &OSRdyTbl[0];
			; SOURCE LINE # 699
	MOV  	prdytbl?1344,A
	MOV  	prdytbl?1344+01H,#HIGH (OSRdyTbl)
	MOV  	prdytbl?1344+02H,#LOW (OSRdyTbl)
;     for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
			; SOURCE LINE # 700
;---- Variable 'i?1343' assigned to Register 'R6/R7' ----
	MOV  	R7,A
	MOV  	R6,A
?C0035:
;         *prdytbl++ = 0x00;
			; SOURCE LINE # 701
	MOV  	R3,prdytbl?1344
	INC  	prdytbl?1344+02H
	MOV  	A,prdytbl?1344+02H
	MOV  	R2,prdytbl?1344+01H
	JNZ  	?C0069
	INC  	prdytbl?1344+01H
?C0069:
	DEC  	A
	MOV  	R1,A
	CLR  	A
	LCALL	?C?CSTPTR
;     }
			; SOURCE LINE # 702
	INC  	R7
	CJNE 	R7,#00H,?C0070
	INC  	R6
?C0070:
	MOV  	A,R7
	XRL  	A,#02H
	ORL  	A,R6
	JNZ  	?C0035
?C0036:
; 
;     OSPrioCur     = 0;
			; SOURCE LINE # 704
	CLR  	A
	MOV  	OSPrioCur,A
;     OSPrioHighRdy = 0;
			; SOURCE LINE # 705
	MOV  	OSPrioHighRdy,A
; 
;     OSTCBHighRdy  = (OS_TCB *)0;                                 
			; SOURCE LINE # 707
	MOV  	OSTCBHighRdy,A
;     OSTCBCur      = (OS_TCB *)0;
			; SOURCE LINE # 708
	MOV  	OSTCBCur,A
; }
			; SOURCE LINE # 709
	RET  	
; END OF OS_InitRdyList

; 
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                                         CREATING THE IDLE TASK
; *
; * Description: This function creates the Idle Task.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitTaskIdle (void)

	RSEG  ?PR?OS_InitTaskIdle?OS_CORE
OS_InitTaskIdle:
	USING	0
			; SOURCE LINE # 725
; {
			; SOURCE LINE # 726
; #if OS_TASK_CREATE_EXT_EN > 0
;     #if OS_STK_GROWTH == 1
;     (void)OSTaskCreateExt(OS_TaskIdle,
;                           (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;                           &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
;                           OS_IDLE_PRIO,                              /* Lowest priority level                */
;                           OS_TASK_IDLE_ID,
;                           &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */
;                           OS_TASK_IDLE_STK_SIZE,
;                           (void *)0,                                 /* No TCB extension                     */
;                           OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
;     #else
;     (void)OSTaskCreateExt(OS_TaskIdle,
;                           (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;                           &OSTaskIdleStk[0],                         /* Set Top-Of-Stack                     */
;                           OS_IDLE_PRIO,                              /* Lowest priority level                */
;                           OS_TASK_IDLE_ID,
;                           &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack                  */
;                           OS_TASK_IDLE_STK_SIZE,
;                           (void *)0,                                 /* No TCB extension                     */
;                           OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
;     #endif
; #else
;     #if OS_STK_GROWTH == 1
;     (void)OSTaskCreate(OS_TaskIdle,
;                        (void *)0,
			; SOURCE LINE # 752
	DEC  	?C_IBP
	MOV  	R0,?C_IBP
	MOV  	@R0,#0CH
	MOV  	R2,#HIGH (OSTaskIdleStk+03FH)
	MOV  	R3,#LOW (OSTaskIdleStk+03FH)
	MOV  	R4,#00H
	MOV  	R5,#00H
	MOV  	R6,#HIGH (_?OS_TaskIdle)
	MOV  	R7,#LOW (_?OS_TaskIdle)
	LJMP 	_?OSTaskCreate
; END OF OS_InitTaskIdle

;                        &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;                        OS_IDLE_PRIO);
;     #else
;     (void)OSTaskCreate(OS_TaskIdle,
;                        (void *)0,
;                        &OSTaskIdleStk[0],
;                        OS_IDLE_PRIO);
;     #endif
; #endif
; }
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                                      CREATING THE STATISTIC TASK
; *
; * Description: This function creates the Statistic Task.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; #if OS_TASK_STAT_EN > 0
; static  void  OS_InitTaskStat (void)

	RSEG  ?PR?OS_InitTaskStat?OS_CORE
OS_InitTaskStat:
	USING	0
			; SOURCE LINE # 778
; {
			; SOURCE LINE # 779
; #if OS_TASK_CREATE_EXT_EN > 0
;     #if OS_STK_GROWTH == 1
;     (void)OSTaskCreateExt(OS_TaskStat,
;                           (void *)0,                                   /* No args passed to OS_TaskStat()*/
;                           &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Top-Of-Stack               */
;                           OS_STAT_PRIO,                                /* One higher than the idle task  */
;                           OS_TASK_STAT_ID,
;                           &OSTaskStatStk[0],                           /* Set Bottom-Of-Stack            */
;                           OS_TASK_STAT_STK_SIZE,
;                           (void *)0,                                   /* No TCB extension               */
;                           OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
;     #else
;     (void)OSTaskCreateExt(OS_TaskStat,
;                           (void *)0,                                   /* No args passed to OS_TaskStat()*/
;                           &OSTaskStatStk[0],                           /* Set Top-Of-Stack               */
;                           OS_STAT_PRIO,                                /* One higher than the idle task  */
;                           OS_TASK_STAT_ID,
;                           &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Bottom-Of-Stack            */
;                           OS_TASK_STAT_STK_SIZE,
;                           (void *)0,                                   /* No TCB extension               */
;                           OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
;     #endif
; #else
;     #if OS_STK_GROWTH == 1
;     (void)OSTaskCreate(OS_TaskStat,
;                        (void *)0,                                      /* No args passed to OS_TaskStat()*/
			; SOURCE LINE # 805
	DEC  	?C_IBP
	MOV  	R0,?C_IBP
	MOV  	@R0,#0BH
	MOV  	R2,#HIGH (OSTaskStatStk+03FH)
	MOV  	R3,#LOW (OSTaskStatStk+03FH)
	MOV  	R4,#00H
	MOV  	R5,#00H
	MOV  	R6,#HIGH (_?OS_TaskStat)
	MOV  	R7,#LOW (_?OS_TaskStat)
	LJMP 	_?OSTaskCreate
; END OF OS_InitTaskStat

;                        &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],      /* Set Top-Of-Stack               */
;                        OS_STAT_PRIO);                                  /* One higher than the idle task  */
;     #else
;     (void)OSTaskCreate(OS_TaskStat,
;                        (void *)0,                                      /* No args passed to OS_TaskStat()*/
;                        &OSTaskStatStk[0],                              /* Set Top-Of-Stack   

⌨️ 快捷键说明

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