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

📄 os_core.src

📁 uCOS-II_2.52在51上的移植程序
💻 SRC
📖 第 1 页 / 共 5 页
字号:
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitTaskIdle (void)

	RSEG  ?PR?OS_InitTaskIdle?OS_CORE
OS_InitTaskIdle:
	USING	0
			; SOURCE LINE # 713
; {
			; SOURCE LINE # 714
; #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,
;                        &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;                        OS_IDLE_PRIO);
;     #else
;     (void)OSTaskCreate(OS_TaskIdle,
;                        (void *)0,
			; SOURCE LINE # 745
	MOV  	DPTR,#?_OSTaskCreate?BYTE+03H
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	INC  	DPTR
	INC  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (OSTaskIdleStk)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (OSTaskIdleStk)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#0CH
	MOVX 	@DPTR,A
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (_OS_TaskIdle)
	MOV  	R1,#LOW (_OS_TaskIdle)
	LJMP 	_OSTaskCreate
; END OF OS_InitTaskIdle

;                        &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)
; {
; #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()*/
;                        &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               */
;                        OS_STAT_PRIO);                                  /* One higher than the idle task  */
;     #endif
; #endif
; }
; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                            INITIALIZE THE FREE LIST OF TASK CONTROL BLOCKS
; *
; * Description: This function is called by OSInit() to initialize the free list of OS_TCBs.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitTCBList (void)

	RSEG  ?PR?OS_InitTCBList?OS_CORE
OS_InitTCBList:
	USING	0
			; SOURCE LINE # 819
; {
			; SOURCE LINE # 820
;     INT8U    i;
;     OS_TCB  *ptcb1;
;     OS_TCB  *ptcb2;
; 
; 
;     OSTCBList     = (OS_TCB *)0;                                 /* TCB Initialization                       */
			; SOURCE LINE # 826
	MOV  	DPTR,#OSTCBList
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
;     for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* Clear the priority table                 */
			; SOURCE LINE # 827
;---- Variable 'i?1242' assigned to Register 'R7' ----
	MOV  	R7,A
?C0037:
;         OSTCBPrioTbl[i] = (OS_TCB *)0;
			; SOURCE LINE # 828
	MOV  	A,R7
	MOV  	B,#03H
	MUL  	AB
	ADD  	A,#LOW (OSTCBPrioTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSTCBPrioTbl)
	MOV  	DPH,A
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
;     }
			; SOURCE LINE # 829
	INC  	R7
	MOV  	A,R7
	CJNE 	A,#0DH,?C0037
?C0038:
;     ptcb1 = &OSTCBTbl[0];
			; SOURCE LINE # 830
	MOV  	DPTR,#ptcb1?1243
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (OSTCBTbl)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (OSTCBTbl)
	MOVX 	@DPTR,A
;     ptcb2 = &OSTCBTbl[1];
			; SOURCE LINE # 831
	INC  	DPTR
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (OSTCBTbl+011H)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (OSTCBTbl+011H)
	MOVX 	@DPTR,A
;     for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs                  */
			; SOURCE LINE # 832
	CLR  	A
	MOV  	R7,A
?C0040:
;         ptcb1->OSTCBNext = ptcb2;
			; SOURCE LINE # 833
	MOV  	DPTR,#ptcb2?1244
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPTR,#ptcb1?1243
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#03H
	LCALL	?C?PSTOPTR
;         ptcb1++;
			; SOURCE LINE # 834
	MOV  	DPTR,#ptcb1?1243+01H
	CLR  	A
	MOV  	B,#011H
	LCALL	?C?IILDX
;         ptcb2++;
			; SOURCE LINE # 835
	MOV  	DPTR,#ptcb2?1244+01H
	CLR  	A
	MOV  	B,#011H
	LCALL	?C?IILDX
;     }
			; SOURCE LINE # 836
	INC  	R7
	MOV  	A,R7
	CJNE 	A,#0BH,?C0040
?C0041:
;     ptcb1->OSTCBNext = (OS_TCB *)0;                              /* Last OS_TCB                              */
			; SOURCE LINE # 837
	MOV  	R3,#00H
	MOV  	R2,#00H
	MOV  	R1,#00H
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPTR,#ptcb1?1243
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#03H
	LCALL	?C?PSTOPTR
;     OSTCBFreeList    = &OSTCBTbl[0];
			; SOURCE LINE # 838
	MOV  	DPTR,#OSTCBFreeList
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (OSTCBTbl)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (OSTCBTbl)
	MOVX 	@DPTR,A
; }
			; SOURCE LINE # 839
	RET  	
; END OF OS_InitTCBList

; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                              SCHEDULER
; *
; * Description: This function is called by other uC/OS-II services to determine whether a new, high
; *              priority task has been made ready to run.  This function is invoked by TASK level code
; *              and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling).
; *
; * Arguments  : none
; *
; * Returns    : none
; *
; * Notes      : 1) This function is INTERNAL to uC/OS-II and your application should not call it.
; *              2) Rescheduling is prevented when the scheduler is locked (see OS_SchedLock())
; *********************************************************************************************************
; */
; 
; void  OS_Sched (void)

	RSEG  ?PR?OS_Sched?OS_CORE
OS_Sched:
	USING	0
			; SOURCE LINE # 858
; {
			; SOURCE LINE # 859
;   
;     INT8U      y;
; 
; 
;     OS_ENTER_CRITICAL();
			; SOURCE LINE # 864
	CLR  	EA
;     if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Sched. only if all ISRs done & not locked    */
			; SOURCE LINE # 865
	MOV  	DPTR,#OSIntNesting
	MOVX 	A,@DPTR
	JZ   	$ + 5H
	LJMP 	?C0044
	MOV  	DPTR,#OSLockNesting
	MOVX 	A,@DPTR
	JNZ  	?C0044
;         y             = OSUnMapTbl[OSRdyGrp];          /* Get pointer to HPT ready to run              */
			; SOURCE LINE # 866
	MOV  	DPTR,#OSRdyGrp
	MOVX 	A,@DPTR
	ADD  	A,#LOW (OSUnMapTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSUnMapTbl)
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	R7,A
;---- Variable 'y?1345' assigned to Register 'R7' ----
;         OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
			; SOURCE LINE # 867
	ADD  	A,#LOW (OSRdyTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSRdyTbl)
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ADD  	A,#LOW (OSUnMapTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSUnMapTbl)
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	R6,A
	MOV  	A,R7
	RLC  	A
	RLC  	A
	RLC  	A
	ANL  	A,#0F8H
	MOV  	R7,A
	MOV  	A,R6
	ADD  	A,R7
	MOV  	R7,A
	MOV  	R0,#LOW (OSPrioHighRdy)
	MOV  	@R0,A
;         if (OSPrioHighRdy != OSPrioCur) {              /* No Ctx Sw if current task is highest rdy     */
			; SOURCE LINE # 868
	DEC  	R0
	MOV  	A,@R0
	XRL  	A,R7
	JZ   	?C0044
;             OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
			; SOURCE LINE # 869
	INC  	R0
	MOV  	A,@R0
	MOV  	B,#03H
	MUL  	AB
	ADD  	A,#LOW (OSTCBPrioTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSTCBPrioTbl)
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R0,#LOW (OSTCBHighRdy)
	MOV  	@R0,AR3
	INC  	R0
	MOV  	@R0,AR2
	INC  	R0
	MOV  	@R0,A
;             OSCtxSwCtr++;                              /* Increment context switch counter             */
			; SOURCE LINE # 870
	MOV  	DPTR,#OSCtxSwCtr
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#01H
	MOV  	R7,A
	CLR  	A
	ADDC 	A,R6
	MOV  	R6,A
	CLR  	A
	ADDC 	A,R5
	MOV  	R5,A
	CLR  	A
	ADDC 	A,R4
	MOV  	R4,A
	MOV  	DPTR,#OSCtxSwCtr
	LCALL	?C?LSTXDATA
;             OS_TASK_SW();                              /* Perform a context switch                     */
			; SOURCE LINE # 871
	LCALL	OSCtxSw
;         }
			; SOURCE LINE # 872
;     }
			; SOURCE LINE # 873
?C0044:
;     OS_EXIT_CRITICAL();
			; SOURCE LINE # 874
	SETB 	EA
; }
			; SOURCE LINE # 875
	RET  	
; END OF OS_Sched

; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                              IDLE TASK
; *
; * Description: This task is internal to uC/OS-II and executes whenever no other higher priority tasks
; *              executes because they are ALL waiting for event(s) to occur.
; *
; * Arguments  : none
; *
; * Returns    : none
; *
; * Note(s)    : 1) OSTaskIdleHook() is called after the critical section to ensure that interrupts will be
; *                 enabled for at least a few instructions.  On some processors (ex. Philips XA), enabling
; *                 and then disabling interrupts didn't allow the processor enough time to have interrupts
; *                 enabled before they were disabled again.  uC/OS-II would thus never recognize
; *                 interrupts.
; *              2) This hook has been added to allow you to do such things as STOP the CPU to conserve 
; *                 power.
; *********************************************************************************************************

⌨️ 快捷键说明

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