📄 os_cpu_c.lis
字号:
0180 6A01 movw R12,R20
0182 4150 subi R20,1
0184 5040 sbci R21,0
0186 85E2 ldi R24,37
0188 F601 movw R30,R12
018A 8083 std z+0,R24
018C .dbline 211
018C ; *psoft_stk-- = (INT8U)0x26; /* R26 = 0x26 */
018C 6A01 movw R12,R20
018E 4150 subi R20,1
0190 5040 sbci R21,0
0192 86E2 ldi R24,38
0194 F601 movw R30,R12
0196 8083 std z+0,R24
0198 .dbline 212
0198 ; *psoft_stk-- = (INT8U)0x27; /* R27 = 0x27 */
0198 6A01 movw R12,R20
019A 4150 subi R20,1
019C 5040 sbci R21,0
019E 87E2 ldi R24,39
01A0 F601 movw R30,R12
01A2 8083 std z+0,R24
01A4 .dbline 215
01A4 ; /* R28 R29:R28 is the software stack which gets ... */
01A4 ; /* R29 ... stored in the task's OS_TCB. */
01A4 ; *psoft_stk-- = (INT8U)0x30; /* R30 = 0x30 */
01A4 6A01 movw R12,R20
01A6 4150 subi R20,1
01A8 5040 sbci R21,0
01AA 80E3 ldi R24,48
01AC F601 movw R30,R12
01AE 8083 std z+0,R24
01B0 .dbline 216
01B0 ; *psoft_stk-- = (INT8U)0x31; /* R31 = 0x31 */
01B0 6A01 movw R12,R20
01B2 4150 subi R20,1
01B4 5040 sbci R21,0
01B6 81E3 ldi R24,49
01B8 F601 movw R30,R12
01BA 8083 std z+0,R24
01BC .dbline 217
01BC ; *psoft_stk-- = (INT8U)0x00; /* RAMPZ = 0x00 */
01BC 6A01 movw R12,R20
01BE 4150 subi R20,1
01C0 5040 sbci R21,0
01C2 2224 clr R2
01C4 F601 movw R30,R12
01C6 2082 std z+0,R2
01C8 .dbline 218
01C8 ; *psoft_stk-- = (INT8U)0x80; /* SREG = Interrupts enabled */
01C8 6A01 movw R12,R20
01CA 4150 subi R20,1
01CC 5040 sbci R21,0
01CE 80E8 ldi R24,128
01D0 F601 movw R30,R12
01D2 8083 std z+0,R24
01D4 .dbline 219
01D4 ; tmp = (INT16U)phard_stk;
01D4 5B01 movw R10,R22
01D6 .dbline 220
01D6 ; *psoft_stk-- = (INT8U)(tmp >> 8); /* SPH */
01D6 BA01 movw R22,R20
01D8 4150 subi R20,1
01DA 5040 sbci R21,0
01DC 1501 movw R2,R10
01DE 232C mov R2,R3
01E0 3324 clr R3
01E2 FB01 movw R30,R22
01E4 2082 std z+0,R2
01E6 .dbline 221
01E6 ; *psoft_stk = (INT8U) tmp; /* SPL */
01E6 FA01 movw R30,R20
01E8 A082 std z+0,R10
01EA .dbline 222
01EA ; return ((void *)psoft_stk);
01EA 8F01 movw R16,R30
01EC .dbline -2
01EC L7:
01EC .dbline 0 ; func end
01EC 0C940000 xjmp pop_xgsetF03C
01F0 .dbsym r phard_stk 22 pc
01F0 .dbsym r tmp 10 i
01F0 .dbsym r psoft_stk 20 pc
01F0 .dbsym l opt 10 i
01F0 .dbsym r ptos 10 pc
01F0 .dbsym r p_arg 18 pV
01F0 .dbsym r task 16 pfV
01F0 .dbend
01F0 .dbfunc e OSTaskSwHook _OSTaskSwHook fV
.even
01F0 _OSTaskSwHook::
01F0 .dbline -1
01F0 .dbline 243
01F0 ; }
01F0 ;
01F0 ; /*$PAGE*/
01F0 ; /*
01F0 ; *********************************************************************************************************
01F0 ; * TASK SWITCH HOOK
01F0 ; *
01F0 ; * Description: This function is called when a task switch is performed. This allows you to perform other
01F0 ; * operations during a context switch.
01F0 ; *
01F0 ; * Arguments : none
01F0 ; *
01F0 ; * Note(s) : 1) Interrupts are disabled during this call.
01F0 ; * 2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that
01F0 ; * will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
01F0 ; * task being switched out (i.e. the preempted task).
01F0 ; *********************************************************************************************************
01F0 ; */
01F0 ; #if (OS_CPU_HOOKS_EN > 0) && (OS_TASK_SW_HOOK_EN > 0)
01F0 ; void OSTaskSwHook (void)
01F0 ; {
01F0 .dbline -2
01F0 L8:
01F0 .dbline 0 ; func end
01F0 0895 ret
01F2 .dbend
01F2 .dbfunc e OSTCBInitHook _OSTCBInitHook fV
01F2 ; ptcb -> R0,R1
.even
01F2 _OSTCBInitHook::
01F2 .dbline -1
01F2 .dbline 263
01F2 ; #ifdef OS_VIEW_MODULE
01F2 ; OSView_TaskSwHook();
01F2 ; #endif
01F2 ; }
01F2 ; #endif
01F2 ;
01F2 ; /*
01F2 ; *********************************************************************************************************
01F2 ; * OS_TCBInit() HOOK
01F2 ; *
01F2 ; * Description: This function is called by OS_TCBInit() after setting up most of the TCB.
01F2 ; *
01F2 ; * Arguments : ptcb is a pointer to the TCB of the task being created.
01F2 ; *
01F2 ; * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
01F2 ; *********************************************************************************************************
01F2 ; */
01F2 ; #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
01F2 ; void OSTCBInitHook (OS_TCB *ptcb)
01F2 ; {
01F2 .dbline 264
01F2 ; ptcb = ptcb; /* Prevent Compiler warning */
01F2 .dbline -2
01F2 L9:
01F2 .dbline 0 ; func end
01F2 0895 ret
01F4 .dbsym l ptcb 0 pS[os_tcb]
01F4 .dbend
01F4 .dbfunc e OSTimeTickHook _OSTimeTickHook fV
.even
01F4 _OSTimeTickHook::
01F4 .dbline -1
01F4 .dbline 282
01F4 ; }
01F4 ; #endif
01F4 ;
01F4 ;
01F4 ; /*
01F4 ; *********************************************************************************************************
01F4 ; * TICK HOOK
01F4 ; *
01F4 ; * Description: This function is called every tick.
01F4 ; *
01F4 ; * Arguments : none
01F4 ; *
01F4 ; * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
01F4 ; *********************************************************************************************************
01F4 ; */
01F4 ; #if (OS_CPU_HOOKS_EN > 0) && (OS_TIME_TICK_HOOK_EN > 0)
01F4 ; void OSTimeTickHook (void)
01F4 ; {
01F4 .dbline -2
01F4 L10:
01F4 .dbline 0 ; func end
01F4 0895 ret
01F6 .dbend
01F6 .dbfunc e OSTickISR_Init _OSTickISR_Init fV
.even
01F6 _OSTickISR_Init::
01F6 .dbline -1
01F6 .dbline 296
01F6 ; #ifdef OS_VIEW_MODULE
01F6 ; OSView_TickHook();
01F6 ; #endif
01F6 ; }
01F6 ; #endif
01F6 ;
01F6 ; /*
01F6 ; *********************************************************************************************************
01F6 ; * SETUP THE TICK RATE
01F6 ; *********************************************************************************************************
01F6 ; */
01F6 ;
01F6 ; void OSTickISR_Init (void)
01F6 ; {
01F6 .dbline 297
01F6 ; TCCR0 = 0x07; /* Set TIMER0 prescaler to CLK/1024 */
01F6 87E0 ldi R24,7
01F8 83BF out 0x33,R24
01FA .dbline 298
01FA ; TIMSK |= 0x01; /* Enable TIMER0 overflow interrupt */
01FA 87B7 in R24,0x37
01FC 8160 ori R24,1
01FE 87BF out 0x37,R24
0200 .dbline -2
0200 L11:
0200 .dbline 0 ; func end
0200 0895 ret
0202 .dbend
0202 .dbfunc e OSTickISR_Handler _OSTickISR_Handler fV
.even
0202 _OSTickISR_Handler::
0202 .dbline -1
0202 .dbline 321
0202 ; }
0202 ;
0202 ; /*
0202 ; *********************************************************************************************************
0202 ; * 中断向量入口
0202 ; *********************************************************************************************************
0202 ; */
0202 ; /*
0202 ; #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
0202 ; void timer0_ovf_isr(void)
0202 ; {
0202 ; OSTickISR();
0202 ; }
0202 ; */
0202 ;
0202 ; /*
0202 ; *********************************************************************************************************
0202 ; * SETUP THE TICK RATE
0202 ; *********************************************************************************************************
0202 ; */
0202 ;
0202 ; void OSTickISR_Handler (void)
0202 ; {
0202 .dbline 322
0202 ; TCNT0 = 256 - (CPU_CLK_FREQ / OS_TICKS_PER_SEC / 1024);
0202 80E7 ldi R24,112
0204 82BF out 0x32,R24
0206 .dbline 323
0206 ; OSTimeTick();
0206 0E940000 xcall _OSTimeTick
020A .dbline -2
020A L12:
020A .dbline 0 ; func end
020A 0895 ret
020C .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\MICRIUM\ICC\os_cpu_c.c
0000 _OSTaskHardStkSize::
0000 .blkb 2
0002 .dbfile D:\MICRIUM\ICC\os_cpu.h
0002 .dbsym e OSTaskHardStkSize _OSTaskHardStkSize i
0002 _OSTaskStkSize::
0002 .blkb 2
0004 .dbsym e OSTaskStkSize _OSTaskStkSize i
0004 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -