📄 os_cpu_c.src
字号:
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 + -