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

📄 os_cpu_c.src

📁 本人于2005年初开始准备将&micro C/OS-II嵌入式实时操作系统移植到8051单片机上
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	MOV  	R3,A
	INC  	DPTR
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?ILDIX
	MOV  	R1,B
	MOV  	R2,A
	MOV  	A,#05H
	LCALL	?C?CSTPTR
;     *stk++ = 0x06;                              //R6
			; SOURCE LINE # 92
	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,#06H
	LCALL	?C?CSTPTR
;     *stk++ = 0x07;                              //R7
			; SOURCE LINE # 93
	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,#07H
	LCALL	?C?CSTPTR
;                                                 //不用保存SP,任务切换时根据用户堆栈长度计算得出。    
;     *stk++ = (INT16U) (ptos+MaxStkSize) >> 8;   //?C_XBP 仿真堆栈指针高8位
			; SOURCE LINE # 95
	MOV  	DPTR,#09H
	LCALL	?C?XBPOFF
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#084H
	MOV  	A,R2
	ADDC 	A,#03H
	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) (ptos+MaxStkSize) & 0xFF; //?C_XBP 仿真堆栈指针低8位
			; SOURCE LINE # 96
	MOV  	DPTR,#09H
	LCALL	?C?XBPOFF
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#084H
	MOV  	R1,A
	MOV  	R7,AR1
	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
;         
;     return ((void *)ptos);
			; SOURCE LINE # 98
	MOV  	DPTR,#09H
	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
; }
			; SOURCE LINE # 99
?C0001:
	MOV  	DPTR,#0EH
	LJMP 	?C?ADDXBP
; END OF _?OSTaskStkInit

; 
; #if OS_CPU_HOOKS_EN
; /*
; *********************************************************************************************************
; *                                          任务创建钩挂函数
; *
; * 描述       : 任务创建时调用
; *
; * 参数       : ptcb是指向将被创建任务的任务控制块的指针。
; *
; * 注意       : 1) 调用期间中断被禁止
; *********************************************************************************************************
; */
; void OSTaskCreateHook (OS_TCB *ptcb) reentrant

	RSEG  ?PR?_?OSTaskCreateHook?OS_CPU_C
_?OSTaskCreateHook:
	USING	0
			; SOURCE LINE # 113
	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
; {
;     ptcb = ptcb;                       /* Prevent compiler warning                                     */
			; SOURCE LINE # 115
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	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
; }
			; SOURCE LINE # 116
	MOV  	DPTR,#03H
	LJMP 	?C?ADDXBP
; END OF _?OSTaskCreateHook

; 
; 
; /*
; *********************************************************************************************************
; *                                          任务删除钩挂函数
; *
; * 描述       : 任务删除时调用
; *
; * 参数       : ptcb是指向将被删除任务的任务控制块的指针。
; *
; * 注意       : 1) 调用期间中断被禁止
; *********************************************************************************************************
; */
; void OSTaskDelHook (OS_TCB *ptcb) reentrant

	RSEG  ?PR?_?OSTaskDelHook?OS_CPU_C
_?OSTaskDelHook:
	USING	0
			; SOURCE LINE # 130
	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
; {
;     ptcb = ptcb;                       /* Prevent compiler warning                                     */
			; SOURCE LINE # 132
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	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
; }
			; SOURCE LINE # 133
	MOV  	DPTR,#03H
	LJMP 	?C?ADDXBP
; END OF _?OSTaskDelHook

; 
; /*
; *********************************************************************************************************
; *                                          任务切换钩挂函数
; *
; * 描述       : 执行任务切换时调用。这允许你在上下文切换期间执行其它操作。
; *
; * 参数       : 无
; *
; * 注意       : 1) 调用期间中断被禁止
; *              2) 假定全局指针'OSTCBHighRdy'已经指向了将要被换入的任务控制块(即:最高优先级任务),并且
; *                 'OSTCBCur'指向了将被换出的任务(即:当前任务)。
; *********************************************************************************************************
; */
; void OSTaskSwHook (void) reentrant

	RSEG  ?PR?_?OSTaskSwHook?OS_CPU_C
_?OSTaskSwHook:
			; SOURCE LINE # 148
; {
; }
			; SOURCE LINE # 150
	RET  	
; END OF _?OSTaskSwHook

; 
; /*
; *********************************************************************************************************
; *                                          统计任务钩挂函数
; *
; * 描述       : 这个函数每秒钟被uC/OS-II统计任务调用。这么做使你的应用程序可以增加统计任务的功能。
; *
; * 注意       : 无
; *********************************************************************************************************
; */
; void OSTaskStatHook (void) reentrant

	RSEG  ?PR?_?OSTaskStatHook?OS_CPU_C
_?OSTaskStatHook:
			; SOURCE LINE # 161
; {
; }
			; SOURCE LINE # 163
	RET  	
; END OF _?OSTaskStatHook

; 
; /*
; *********************************************************************************************************
; *                                       OS INITIALIZATION HOOK
; *                                            (BEGINNING)
; *
; * Description: This function is called by OSInit() at the beginning of OSInit().
; *
; * Arguments  : none
; *
; * Note(s)    : 1) Interrupts should be disabled during this call.
; *********************************************************************************************************
; */
; #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
; void  OSInitHookBegin (void)

	RSEG  ?PR?OSInitHookBegin?OS_CPU_C
OSInitHookBegin:
			; SOURCE LINE # 178
; {
			; SOURCE LINE # 179
; }
			; SOURCE LINE # 180
	RET  	
; END OF OSInitHookBegin

; #endif
; 
; /*
; *********************************************************************************************************
; *                                       OS INITIALIZATION HOOK
; *                                               (END)
; *
; * Description: This function is called by OSInit() at the end of OSInit().
; *
; * Arguments  : none
; *
; * Note(s)    : 1) Interrupts should be disabled during this call.
; *********************************************************************************************************
; */
; #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
; void  OSInitHookEnd (void)

	RSEG  ?PR?OSInitHookEnd?OS_CPU_C
OSInitHookEnd:
			; SOURCE LINE # 196
; {
			; SOURCE LINE # 197
; }
			; SOURCE LINE # 198
	RET  	
; END OF OSInitHookEnd

; #endif
; 
; 
; /*
; *********************************************************************************************************
; *                                             IDLE TASK HOOK
; *
; * Description: This function is called by the idle task.  This hook has been added to allow you to do  
; *              such things as STOP the CPU to conserve power.
; *
; * Arguments  : none
; *
; * Note(s)    : 1) Interrupts are enabled during this call.
; *********************************************************************************************************
; */
; #if OS_CPU_HOOKS_EN > 0 && OS_VERSION >= 251
; void  OSTaskIdleHook (void)reentrant

	RSEG  ?PR?_?OSTaskIdleHook?OS_CPU_C
_?OSTaskIdleHook:
			; SOURCE LINE # 215
; {
; }
			; SOURCE LINE # 217
	RET  	
; END OF _?OSTaskIdleHook

; #endif
; 
; /*
; *********************************************************************************************************
; *                                           OSTCBInit() HOOK
; *
; * Description: This function is called by OS_TCBInit() after setting up most of the TCB.
; *
; * Arguments  : ptcb    is a pointer to the TCB of the task being created.
; *
; * Note(s)    : 1) Interrupts may or may not be ENABLED during this call.
; *********************************************************************************************************
; */
; #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
; void  OSTCBInitHook (OS_TCB *ptcb) reentrant

	RSEG  ?PR?_?OSTCBInitHook?OS_CPU_C
_?OSTCBInitHook:
	USING	0
			; SOURCE LINE # 232
	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
; {
;     ptcb = ptcb;                                           /* Prevent Compiler warning                 */
			; SOURCE LINE # 234
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	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
; }
			; SOURCE LINE # 235
	MOV  	DPTR,#03H
	LJMP 	?C?ADDXBP
; END OF _?OSTCBInitHook

; #endif
; 
; 
; /*
; *********************************************************************************************************
; *                                          定时钩挂函数
; *
; * 描述       : 本函数每一滴答被调用一次。
; *
; * 参数       : 无
; *
; * 注意       : 1) 在本调用期间中断可以或不可以使能。
; *********************************************************************************************************
; */
; void OSTimeTickHook (void) reentrant

	RSEG  ?PR?_?OSTimeTickHook?OS_CPU_C
_?OSTimeTickHook:
			; SOURCE LINE # 250
; {
; }
			; SOURCE LINE # 252
	RET  	
; END OF _?OSTimeTickHook

; #endif
; 
; //初始化定时器0
; void InitTimer0(void) reentrant

	RSEG  ?PR?_?InitTimer0?OS_CPU_C
_?InitTimer0:
			; SOURCE LINE # 256
; {
;     TMOD=TMOD&0xF0;
			; SOURCE LINE # 258
	ANL  	TMOD,#0F0H
;     TMOD=TMOD|0x01;    //模式1(16位定时器),仅受TR0控制
			; SOURCE LINE # 259
	ORL  	TMOD,#01H
;     TH0=0x70;    //定义Tick=50次/秒(即0.02秒/次)
			; SOURCE LINE # 260
	MOV  	TH0,#070H
;     TL0=0x00;    //OS_CPU_A.ASM  和  OS_TICKS_PER_SEC
			; SOURCE LINE # 261
	CLR  	A
	MOV  	TL0,A
;     //ET0=1;       //允许T0中断,此时EA=0(51上电缺省值),中断还不会发生,满足在OSStart()前不产生中断的要求。
;     TR0=1;   
			; SOURCE LINE # 263
	SETB 	TR0
; }
			; SOURCE LINE # 264
	RET  	
; END OF _?InitTimer0

	END

⌨️ 快捷键说明

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