📄 mega16pro.lst
字号:
00431 5041 SUBI R20,1
00432 4050 SBCI R21,0
00433 E184 LDI R24,0x14
00434 01F6 MOVW R30,R12
00435 8380 ST Z,R24
(0217) *psoft_stk-- = (INT8U)0x15; /* R15 = 0x15 */
00436 016A MOVW R12,R20
00437 5041 SUBI R20,1
00438 4050 SBCI R21,0
00439 E185 LDI R24,0x15
0043A 01F6 MOVW R30,R12
0043B 8380 ST Z,R24
(0218) tmp = (INT16U)p_arg;
0043C 01B9 MOVW R22,R18
(0219) *psoft_stk-- = (INT8U)(tmp & 0xFF); /* 'p_arg' passed in R17:R16 */
0043D 016A MOVW R12,R20
0043E 5041 SUBI R20,1
0043F 4050 SBCI R21,0
00440 01CB MOVW R24,R22
00441 7090 ANDI R25,0
00442 01F6 MOVW R30,R12
00443 8380 ST Z,R24
(0220) tmp >>= 8;
00444 2F67 MOV R22,R23
00445 2777 CLR R23
(0221) *psoft_stk-- = (INT8U)(tmp & 0xFF);
00446 016A MOVW R12,R20
00447 5041 SUBI R20,1
00448 4050 SBCI R21,0
00449 01CB MOVW R24,R22
0044A 7090 ANDI R25,0
0044B 01F6 MOVW R30,R12
0044C 8380 ST Z,R24
(0222) *psoft_stk-- = (INT8U)0x18; /* R18 = 0x18 */
0044D 016A MOVW R12,R20
0044E 5041 SUBI R20,1
0044F 4050 SBCI R21,0
00450 E188 LDI R24,0x18
00451 01F6 MOVW R30,R12
00452 8380 ST Z,R24
(0223) *psoft_stk-- = (INT8U)0x19; /* R19 = 0x19 */
00453 016A MOVW R12,R20
00454 5041 SUBI R20,1
00455 4050 SBCI R21,0
00456 E189 LDI R24,0x19
00457 01F6 MOVW R30,R12
00458 8380 ST Z,R24
(0224) *psoft_stk-- = (INT8U)0x20; /* R20 = 0x20 */
00459 016A MOVW R12,R20
0045A 5041 SUBI R20,1
0045B 4050 SBCI R21,0
0045C E280 LDI R24,0x20
0045D 01F6 MOVW R30,R12
0045E 8380 ST Z,R24
(0225) *psoft_stk-- = (INT8U)0x21; /* R21 = 0x21 */
0045F 016A MOVW R12,R20
00460 5041 SUBI R20,1
00461 4050 SBCI R21,0
00462 E281 LDI R24,0x21
00463 01F6 MOVW R30,R12
00464 8380 ST Z,R24
(0226) *psoft_stk-- = (INT8U)0x22; /* R22 = 0x22 */
00465 016A MOVW R12,R20
00466 5041 SUBI R20,1
00467 4050 SBCI R21,0
00468 E282 LDI R24,0x22
00469 01F6 MOVW R30,R12
0046A 8380 ST Z,R24
(0227) *psoft_stk-- = (INT8U)0x23; /* R23 = 0x23 */
0046B 016A MOVW R12,R20
0046C 5041 SUBI R20,1
0046D 4050 SBCI R21,0
0046E E283 LDI R24,0x23
0046F 01F6 MOVW R30,R12
00470 8380 ST Z,R24
(0228) *psoft_stk-- = (INT8U)0x24; /* R24 = 0x24 */
00471 016A MOVW R12,R20
00472 5041 SUBI R20,1
00473 4050 SBCI R21,0
00474 E284 LDI R24,0x24
00475 01F6 MOVW R30,R12
00476 8380 ST Z,R24
(0229) *psoft_stk-- = (INT8U)0x25; /* R25 = 0x25 */
00477 016A MOVW R12,R20
00478 5041 SUBI R20,1
00479 4050 SBCI R21,0
0047A E285 LDI R24,0x25
0047B 01F6 MOVW R30,R12
0047C 8380 ST Z,R24
(0230) *psoft_stk-- = (INT8U)0x26; /* R26 = 0x26 */
0047D 016A MOVW R12,R20
0047E 5041 SUBI R20,1
0047F 4050 SBCI R21,0
00480 E286 LDI R24,0x26
00481 01F6 MOVW R30,R12
00482 8380 ST Z,R24
(0231) *psoft_stk-- = (INT8U)0x27; /* R27 = 0x27 */
00483 016A MOVW R12,R20
00484 5041 SUBI R20,1
00485 4050 SBCI R21,0
00486 E287 LDI R24,0x27
00487 01F6 MOVW R30,R12
00488 8380 ST Z,R24
(0232) /* R28 R29:R28 is the software stack which gets ... */
(0233) /* R29 ... stored in the task's OS_TCB. */
(0234) *psoft_stk-- = (INT8U)0x30; /* R30 = 0x30 */
00489 016A MOVW R12,R20
0048A 5041 SUBI R20,1
0048B 4050 SBCI R21,0
0048C E380 LDI R24,0x30
0048D 01F6 MOVW R30,R12
0048E 8380 ST Z,R24
(0235) *psoft_stk-- = (INT8U)0x31; /* R31 = 0x31 */
0048F 016A MOVW R12,R20
00490 5041 SUBI R20,1
00491 4050 SBCI R21,0
00492 E381 LDI R24,0x31
00493 01F6 MOVW R30,R12
00494 8380 ST Z,R24
(0236)
(0237) *psoft_stk-- = (INT8U)0x80; /* SREG = Interrupts enabled */
00495 016A MOVW R12,R20
00496 5041 SUBI R20,1
00497 4050 SBCI R21,0
00498 E880 LDI R24,0x80
00499 01F6 MOVW R30,R12
0049A 8380 ST Z,R24
(0238)
(0239) tmp = (INT16U)phard_stk;
0049B 01B5 MOVW R22,R10
(0240) *psoft_stk-- = (INT8U)(tmp >> 8); /* SPH */
0049C 015A MOVW R10,R20
0049D 5041 SUBI R20,1
0049E 4050 SBCI R21,0
0049F 011B MOVW R2,R22
004A0 2C23 MOV R2,R3
004A1 2433 CLR R3
004A2 01F5 MOVW R30,R10
004A3 8220 ST Z,R2
(0241) *psoft_stk = (INT8U) tmp; /* SPL */
004A4 01FA MOVW R30,R20
004A5 8360 ST Z,R22
(0242) return ((OS_STK *)psoft_stk);
004A6 018F MOVW R16,R30
004A7 940C 0F2A JMP pop_xgsetF03C
(0243) }
(0244)
(0245)
(0246)
(0247) /*
(0248) *********************************************************************************************************
(0249) * TASK SWITCH HOOK
(0250) *
(0251) * Description: This function is called when a task switch is performed. This allows you to perform other
(0252) * operations during a context switch.
(0253) *
(0254) * Arguments : none
(0255) *
(0256) * Note(s) : 1) Interrupts are disabled during this call.
(0257) * 2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that
(0258) * will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
(0259) * task being switched out (i.e. the preempted task).
(0260) *********************************************************************************************************
(0261) */
(0262) #if (OS_CPU_HOOKS_EN > 0) && (OS_TASK_SW_HOOK_EN > 0)
(0263) void OSTaskSwHook (void)
(0264) {
_OSTaskSwHook:
004A9 9508 RET
(0265)
(0266) }
(0267) #endif
(0268)
(0269)
(0270) /*
(0271) *********************************************************************************************************
(0272) * OS_TCBInit() HOOK
(0273) *
(0274) * Description: This function is called by OS_TCBInit() after setting up most of the TCB.
(0275) *
(0276) * Arguments : ptcb is a pointer to the TCB of the task being created.
(0277) *
(0278) * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
(0279) *********************************************************************************************************
(0280) */
(0281) #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
(0282) void OSTCBInitHook (OS_TCB *ptcb)
(0283) {
(0284) ptcb = ptcb; /* Prevent Compiler warning */
_OSTCBInitHook:
ptcb --> Y,+0
004AA 9508 RET
(0285) }
(0286) #endif
(0287)
(0288) /*
(0289) *********************************************************************************************************
(0290) * TICK HOOK
(0291) *
(0292) * Description: This function is called every tick.
(0293) *
(0294) * Arguments : none
(0295) *
(0296) * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
(0297) *********************************************************************************************************
(0298) */
(0299) #if (OS_CPU_HOOKS_EN > 0) && (OS_TIME_TICK_HOOK_EN > 0)
(0300) void OSTimeTickHook (void)
(0301) {
(0302)
(0303) #if OS_VERSION >= 281 && OS_TMR_EN > 0
(0304) OSTmrCtr++;
(0305) if (OSTmrCtr >= (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC)) {
(0306) OSTmrCtr = 0;
(0307) OSTmrSignal();
(0308) }
(0309) #endif
(0310) WDR();
_OSTimeTickHook:
004AB 95A8 WDR
004AC 9508 RET
(0311) }
(0312) #endif
(0313)
(0314)
(0315) /*
(0316) *********************************************************************************************************
(0317) * HANDLE THE TICK INTERRUPT
(0318) *
(0319) * Note(s): 1) No need to clear the interrupt source since we use output compare mode for Timer #0 and
(0320) * the interrupt is automatically cleard in hardware when the ISR runs.
(0321) *********************************************************************************************************
(0322) */
(0323)
(0324) void OSTickISR_Handler (void)
(0325) {
(0326) OSTimeTick();
_OSTickISR_Handler:
004AD 940C 0643 JMP _OSTimeTick
_OS_CPU_SR_Save:
004AF B70F IN R16,0x3F
004B0 94F8 BCLR 7
004B1 9508 RET
_OS_CPU_SR_Restore:
004B2 BF0F OUT 0x3F,R16
004B3 9508 RET
_OSStartHighRdy:
004B4 940E 04A9 CALL _OSTaskSwHook
004B6 9100 07F8 LDS R16,OSRunning
004B8 9503 INC R16
004B9 9300 07F8 STS OSRunning,R16
004BB 91E0 0789 LDS R30,OSTCBHighRdy
004BD 91F0 078A LDS R31,OSTCBHighRdy+1
004BF 91C1 LD R28,Z+
004C0 91D1 LD R29,Z+
004C1 9109 LD R16,Y+
004C2 BF0D OUT 0x3D,R16
004C3 9109 LD R16,Y+
004C4 BF0E OUT 0x3E,R16
004C5 9109 LD R16,Y+
004C6 770F ANDI R16,0x7F
004C7 BF0F OUT 0x3F,R16
004C8 91F9 LD R31,Y+
004C9 91E9 LD R30,Y+
004CA 91B9 LD R27,Y+
004CB 91A9 LD R26,Y+
004CC 9199 LD R25,Y+
004CD 9189 LD R24,Y+
004CE 9179 LD R23,Y+
004CF 9169 LD R22,Y+
004D0 9159 LD R21,Y+
004D1 9149 LD R20,Y+
004D2 9139 LD R19,Y+
004D3 9129 LD R18,Y+
004D4 9119 LD R17,Y+
004D5 9109 LD R16,Y+
004D6 90F9 LD R15,Y+
004D7 90E9 LD R14,Y+
004D8 90D9 LD R13,Y+
004D9 90C9 LD R12,Y+
004DA 90B9 LD R11,Y+
004DB 90A9 LD R10,Y+
004DC 9099 LD R9,Y+
004DD 9089 LD R8,Y+
004DE 9079 LD R7,Y+
004DF 9069 LD R6,Y+
004E0 9059 LD R5,Y+
004E1 9049 LD R4,Y+
004E2 9039 LD R3,Y+
004E3 9029 LD R2,Y+
004E4 9019 LD R1,Y+
004E5 9009 LD R0,Y+
004E6 9518 RETI
_OSCtxSw:
004E7 920A ST -Y,R0
004E8 921A ST -Y,R1
004E9 922A ST -Y,R2
004EA 923A ST -Y,R3
004EB 924A ST -Y,R4
004EC 925A ST -Y,R5
004ED 926A ST -Y,R6
004EE 927A ST -Y,R7
004EF 928A ST -Y,R8
004F0 929A ST -Y,R9
004F1 92AA ST -Y,R10
004F2 92BA ST -Y,R11
004F3 92CA ST -Y,R12
004F4 92DA ST -Y,R13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -