📄 ucosii.lst
字号:
01BD 8380 STD Z+0,R24
(0205) *psoft_stk-- = (INT8U)0x20; /* R20 = 0x20 */
01BE 011A MOVW R2,R20
01BF 5041 SUBI R20,1
01C0 4050 SBCI R21,0
01C1 E280 LDI R24,0x20
01C2 01F1 MOVW R30,R2
01C3 8380 STD Z+0,R24
(0206) *psoft_stk-- = (INT8U)0x21; /* R21 = 0x21 */
01C4 011A MOVW R2,R20
01C5 5041 SUBI R20,1
01C6 4050 SBCI R21,0
01C7 E281 LDI R24,0x21
01C8 01F1 MOVW R30,R2
01C9 8380 STD Z+0,R24
(0207) *psoft_stk-- = (INT8U)0x22; /* R22 = 0x22 */
01CA 011A MOVW R2,R20
01CB 5041 SUBI R20,1
01CC 4050 SBCI R21,0
01CD E282 LDI R24,0x22
01CE 01F1 MOVW R30,R2
01CF 8380 STD Z+0,R24
(0208) *psoft_stk-- = (INT8U)0x23; /* R23 = 0x23 */
01D0 011A MOVW R2,R20
01D1 5041 SUBI R20,1
01D2 4050 SBCI R21,0
01D3 E283 LDI R24,0x23
01D4 01F1 MOVW R30,R2
01D5 8380 STD Z+0,R24
(0209) *psoft_stk-- = (INT8U)0x24; /* R24 = 0x24 */
01D6 011A MOVW R2,R20
01D7 5041 SUBI R20,1
01D8 4050 SBCI R21,0
01D9 E284 LDI R24,0x24
01DA 01F1 MOVW R30,R2
01DB 8380 STD Z+0,R24
(0210) *psoft_stk-- = (INT8U)0x25; /* R25 = 0x25 */
01DC 011A MOVW R2,R20
01DD 5041 SUBI R20,1
01DE 4050 SBCI R21,0
01DF E285 LDI R24,0x25
01E0 01F1 MOVW R30,R2
01E1 8380 STD Z+0,R24
(0211) *psoft_stk-- = (INT8U)0x26; /* R26 = 0x26 */
01E2 011A MOVW R2,R20
01E3 5041 SUBI R20,1
01E4 4050 SBCI R21,0
01E5 E286 LDI R24,0x26
01E6 01F1 MOVW R30,R2
01E7 8380 STD Z+0,R24
(0212) *psoft_stk-- = (INT8U)0x27; /* R27 = 0x27 */
01E8 011A MOVW R2,R20
01E9 5041 SUBI R20,1
01EA 4050 SBCI R21,0
01EB E287 LDI R24,0x27
01EC 01F1 MOVW R30,R2
01ED 8380 STD Z+0,R24
(0213) /* R28 R29:R28 is the software stack which gets ... */
(0214) /* R29 ... stored in the task's OS_TCB. */
(0215) *psoft_stk-- = (INT8U)0x30; /* R30 = 0x30 */
01EE 011A MOVW R2,R20
01EF 5041 SUBI R20,1
01F0 4050 SBCI R21,0
01F1 E380 LDI R24,0x30
01F2 01F1 MOVW R30,R2
01F3 8380 STD Z+0,R24
(0216) *psoft_stk-- = (INT8U)0x31; /* R31 = 0x31 */
01F4 011A MOVW R2,R20
01F5 5041 SUBI R20,1
01F6 4050 SBCI R21,0
01F7 E381 LDI R24,0x31
01F8 01F1 MOVW R30,R2
01F9 8380 STD Z+0,R24
(0217) *psoft_stk-- = (INT8U)0x00; /* RAMPZ = 0x00 */
01FA 011A MOVW R2,R20
01FB 5041 SUBI R20,1
01FC 4050 SBCI R21,0
01FD 2444 CLR R4
01FE 01F1 MOVW R30,R2
01FF 8240 STD Z+0,R4
(0218) *psoft_stk-- = (INT8U)0x80; /* SREG = Interrupts enabled */
0200 011A MOVW R2,R20
0201 5041 SUBI R20,1
0202 4050 SBCI R21,0
0203 E880 LDI R24,0x80
0204 01F1 MOVW R30,R2
0205 8380 STD Z+0,R24
(0219) tmp = (INT16U)phard_stk;
0206 01B5 MOVW R22,R10
(0220) *psoft_stk-- = (INT8U)(tmp >> 8); /* SPH */
0207 011A MOVW R2,R20
0208 5041 SUBI R20,1
0209 4050 SBCI R21,0
020A 012B MOVW R4,R22
020B 2C45 MOV R4,R5
020C 2455 CLR R5
020D 01F1 MOVW R30,R2
020E 8240 STD Z+0,R4
(0221) *psoft_stk = (INT8U) tmp; /* SPL */
020F 01FA MOVW R30,R20
0210 8360 STD Z+0,R22
(0222) return ((void *)psoft_stk);
0211 018F MOVW R16,R30
0212 940E0DCA CALL pop_gset3
0214 9508 RET
(0223) }
(0224)
(0225) /*$PAGE*/
(0226) /*
(0227) *********************************************************************************************************
(0228) * TASK SWITCH HOOK
(0229) *
(0230) * Description: This function is called when a task switch is performed. This allows you to perform other
(0231) * operations during a context switch.
(0232) *
(0233) * Arguments : none
(0234) *
(0235) * Note(s) : 1) Interrupts are disabled during this call.
(0236) * 2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that
(0237) * will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
(0238) * task being switched out (i.e. the preempted task).
(0239) *********************************************************************************************************
(0240) */
(0241) #if (OS_CPU_HOOKS_EN > 0) && (OS_TASK_SW_HOOK_EN > 0)
(0242) void OSTaskSwHook (void)
(0243) {
(0244) #ifdef OS_VIEW_MODULE
(0245) OSView_TaskSwHook();
(0246) #endif
(0247) }
_OSTaskSwHook:
0215 9508 RET
(0248) #endif
(0249)
(0250) /*
(0251) *********************************************************************************************************
(0252) * OS_TCBInit() HOOK
(0253) *
(0254) * Description: This function is called by OS_TCBInit() after setting up most of the TCB.
(0255) *
(0256) * Arguments : ptcb is a pointer to the TCB of the task being created.
(0257) *
(0258) * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
(0259) *********************************************************************************************************
(0260) */
(0261) #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
(0262) void OSTCBInitHook (OS_TCB *ptcb)
(0263) {
(0264) ptcb = ptcb; /* Prevent Compiler warning */
(0265) }
_OSTCBInitHook:
ptcb --> R16
0216 9508 RET
(0266) #endif
(0267)
(0268)
(0269) /*
(0270) *********************************************************************************************************
(0271) * TICK HOOK
(0272) *
(0273) * Description: This function is called every tick.
(0274) *
(0275) * Arguments : none
(0276) *
(0277) * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
(0278) *********************************************************************************************************
(0279) */
(0280) #if (OS_CPU_HOOKS_EN > 0) && (OS_TIME_TICK_HOOK_EN > 0)
(0281) void OSTimeTickHook (void)
(0282) {
(0283) #ifdef OS_VIEW_MODULE
(0284) OSView_TickHook();
(0285) #endif
(0286) }
_OSTimeTickHook:
0217 9508 RET
FILE: C:\UCOS-II_AVR_ICC\RTOSIC~1\source\os_cpu_a.s
(0001) ;********************************************************************************************************
(0002) ; uC/OS-II
(0003) ; The Real-Time Kernel
(0004) ;
(0005) ; ATmega128 Specific code
(0006) ;
(0007) ;
(0008) ; File : OS_CPU_A.S
(0009) ; By : Ole Saether
(0010) ; Jean J. Labrosse
(0011) ;********************************************************************************************************
(0012) ; I/O PORT ADDRESSES
(0013) ;********************************************************************************************************
(0014)
(0015) BIT00 = 0x01
(0016) BIT01 = 0x02
(0017) BIT02 = 0x04
(0018) BIT03 = 0x08
(0019) BIT04 = 0x10
(0020) BIT05 = 0x20
(0021) BIT06 = 0x40
(0022) BIT07 = 0x80
(0023)
(0024) SREG = 0x3F
(0025) SPH = 0x3E
(0026) SPL = 0x3D
(0027) RAMPZ = 0x3B
(0028)
(0029) ;********************************************************************************************************
(0030) ; MACROS
(0031) ;********************************************************************************************************
(0032)
(0033) .macro PUSH_ALL ; Save all registers
(0034) ST -Y,R0
(0035) ST -Y,R1
(0036) ST -Y,R2
(0037) ST -Y,R3
(0038) ST -Y,R4
(0039) ST -Y,R5
(0040) ST -Y,R6
(0041) ST -Y,R7
(0042) ST -Y,R8
(0043) ST -Y,R9
(0044) ST -Y,R10
(0045) ST -Y,R11
(0046) ST -Y,R12
(0047) ST -Y,R13
(0048) ST -Y,R14
(0049) ST -Y,R15
(0050) ST -Y,R16
(0051) ST -Y,R17
(0052) ST -Y,R18
(0053) ST -Y,R19
(0054) ST -Y,R20
(0055) ST -Y,R21
(0056) ST -Y,R22
(0057) ST -Y,R23
(0058) ST -Y,R24
(0059) ST -Y,R25
(0060) ST -Y,R26
(0061) ST -Y,R27
(0062) ST -Y,R30
(0063) ST -Y,R31
(0064) IN R16,RAMPZ
(0065) ST -Y,R16
(0066) .endmacro
(0067)
(0068) .macro POP_ALL ; Restore all registers
(0069) LD R16,Y+
(0070) OUT RAMPZ,R16
(0071) LD R31,Y+
(0072) LD R30,Y+
(0073) LD R27,Y+
(0074) LD R26,Y+
(0075) LD R25,Y+
(0076) LD R24,Y+
(0077) LD R23,Y+
(0078) LD R22,Y+
(0079) LD R21,Y+
(0080) LD R20,Y+
(0081) LD R19,Y+
(0082) LD R18,Y+
(0083) LD R17,Y+
(0084) LD R16,Y+
(0085) LD R15,Y+
(0086) LD R14,Y+
(0087) LD R13,Y+
(0088) LD R12,Y+
(0089) LD R11,Y+
(0090) LD R10,Y+
(0091) LD R9,Y+
(0092) LD R8,Y+
(0093) LD R7,Y+
(0094) LD R6,Y+
(0095) LD R5,Y+
(0096) LD R4,Y+
(0097) LD R3,Y+
(0098) LD R2,Y+
(0099) LD R1,Y+
(0100) LD R0,Y+
(0101) .endmacro
(0102)
(0103) .macro PUSH_SP ; Save stack pointer
(0104) IN R16,SPH
(0105) ST -Y,R16
(0106) IN R16,SPL
(0107) ST -Y,R16
(0108) .endmacro
(0109)
(0110) .macro POP_SP ; Restore stack pointer
(0111) LD R16,Y+
(0112) OUT SPL,R16
(0113) LD R16,Y+
(0114) OUT SPH,R16
(0115) .endmacro
(0116)
(0117) .macro PUSH_SREG ; Save status register
(0118) IN R16,SREG
(0119) ST -Y,R16
(0120) .endmacro
(0121)
(0122) .macro POP_SREG ; Restore status registers
(0123) LD R16,Y+
(0124) OUT SREG,R16
(0125) .endmacro
(0126)
(0127) .area text(rel)
(0128)
(0129) ;/*$PAGE*/.
(0130) ;********************************************************************************************************
(0131) ; DISABLE/ENABLE INTERRUPTS USING OS_CRITICAL_METHOD #3
(0132) ;
(0133) ; Description : These functions are used to disable and enable interrupts using OS_CRITICAL_METHOD #3.
(0134) ;
(0135) ; OS_CPU_SR OSCPUSaveSR (void)
(0136) ; Get current value of SREG
(0137) ; Disable interrupts
(0138) ; Return original value of SREG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -