📄 ucosii.lst
字号:
03B0 8113 LDD R17,3+Z
(0372) OS_EXIT_CRITICAL();
03B1 930A ST R16,-Y
03B2 910F POP R16
03B3 BF0F OUT P3F,R16
03B4 9109 LD R16,Y+
03B5 01F8 MOVW R30,R16
03B6 8581 LDD R24,9+Z
03B7 308F CPI R24,0xF
03B8 F009 BEQ 0x03BA
03B9 CFC0 RJMP 0x037A
(0373) }
(0374) OS_ENTER_CRITICAL(); /* Update the 32-bit tick counter */
03BA 930A ST R16,-Y
03BB B70F IN R16,P3F
03BC 94F8 BCLR 7
03BD 930F PUSH R16
03BE 9109 LD R16,Y+
(0375) OSTime++;
03BF E081 LDI R24,1
03C0 E090 LDI R25,0
03C1 E0A0 LDI R26,0
03C2 E0B0 LDI R27,0
03C3 9040011B LDS R4,_OSTime+2
03C5 9050011C LDS R5,_OSTime+3
03C7 90200119 LDS R2,_OSTime
03C9 9030011A LDS R3,_OSTime+1
03CB 0E28 ADD R2,R24
03CC 1E39 ADC R3,R25
03CD 1E4A ADC R4,R26
03CE 1E5B ADC R5,R27
03CF 9230011A STS R3,_OSTime+1
03D1 92200119 STS R2,_OSTime
03D3 9250011C STS R5,_OSTime+3
03D5 9240011B STS R4,_OSTime+2
(0376) OS_EXIT_CRITICAL();
03D7 930A ST R16,-Y
03D8 910F POP R16
03D9 BF0F OUT P3F,R16
03DA 9109 LD R16,Y+
(0377) } 03DB 9508 RET
FILE: C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\os_cpu_a.s
(0001) ;*******************************************************************************
(0002) ; uC/OS-II
(0003) ; The Real-Time Kernel
(0004) ; ATmega16 Specific code
(0005) ; File: OS_CPU_A.S
(0006) ; Modified by: PiQiu
(0007) ; Revision: 1.0
(0008) ;
(0009) ;
(0010) ;*******************************************************************************
(0011)
(0012) ;include
(0013)
(0014) ;*******************************************************************************
(0015) ; I/O PORT ADDRESSES
(0016) ;*******************************************************************************
(0017)
(0018)
(0019) SREG = 0x3F
(0020) SPH = 0x3E
(0021) SPL = 0x3D
(0022) RAMPZ = 0x3B
(0023) TCNT0 = 0x32
(0024) TCNT2 = 0x24
(0025)
(0026)
(0027) ;*******************************************************************************
(0028) ; MACROS
(0029) ;*******************************************************************************
(0030)
(0031) ; Push registers
(0032) .macro PUSHRS
(0033) ST -Y,R0
(0034) ST -Y,R1
(0035) ST -Y,R2
(0036) ST -Y,R3
(0037) ST -Y,R4
(0038) ST -Y,R5
(0039) ST -Y,R6
(0040) ST -Y,R7
(0041) ST -Y,R8
(0042) ST -Y,R9
(0043) ST -Y,R10
(0044) ST -Y,R11
(0045) ST -Y,R12
(0046) ST -Y,R13
(0047) ST -Y,R14
(0048) ST -Y,R15
(0049) ST -Y,R16
(0050) ST -Y,R17
(0051) ST -Y,R18
(0052) ST -Y,R19
(0053) ST -Y,R20
(0054) ST -Y,R21
(0055) ST -Y,R22
(0056) ST -Y,R23
(0057) ST -Y,R24
(0058) ST -Y,R25
(0059) ST -Y,R26
(0060) ST -Y,R27
(0061) ST -Y,R30
(0062) ST -Y,R31
(0063) .endmacro
(0064)
(0065) ; Pop registers
(0066) .macro POPRS
(0067) LD R31,Y+
(0068) LD R30,Y+
(0069) LD R27,Y+
(0070) LD R26,Y+
(0071) LD R25,Y+
(0072) LD R24,Y+
(0073) LD R23,Y+
(0074) LD R22,Y+
(0075) LD R21,Y+
(0076) LD R20,Y+
(0077) LD R19,Y+
(0078) LD R18,Y+
(0079) LD R17,Y+
(0080) LD R16,Y+
(0081) LD R15,Y+
(0082) LD R14,Y+
(0083) LD R13,Y+
(0084) LD R12,Y+
(0085) LD R11,Y+
(0086) LD R10,Y+
(0087) LD R9,Y+
(0088) LD R8,Y+
(0089) LD R7,Y+
(0090) LD R6,Y+
(0091) LD R5,Y+
(0092) LD R4,Y+
(0093) LD R3,Y+
(0094) LD R2,Y+
(0095) LD R1,Y+
(0096) LD R0,Y+
(0097) .endmacro
(0098)
(0099) ; Push stack pointer
(0100) .macro PUSHSP
(0101) IN R16,SPH
(0102) ST -Y,R16
(0103) IN R16,SPL
(0104) ST -Y,R16
(0105) .endmacro
(0106)
(0107) ; Pop stack pointer
(0108) .macro POPSP
(0109) LD R16,Y+
(0110) OUT SPL,R16
(0111) LD R16,Y+
(0112) OUT SPH,R16
(0113) .endmacro
(0114)
(0115) ;Push SREG
(0116) .macro PUSHSREG
(0117) IN R16,SREG
(0118) ST -Y,R16
(0119) .endmacro
(0120)
(0121) ; Pop SREG
(0122) .macro POPSREG
(0123) LD R16,Y+
(0124) OUT SREG,R16
(0125) .endmacro
(0126)
(0127) .area text(rel)
(0128)
(0129) ;*******************************************************************************
(0130) ; START HIGHEST PRIORITY TASK READY-TO-RUN
(0131) ;
(0132) ; Description : This function is called by OSStart() to start the highest
(0133) ; priority task that was created by your application before calling OSStart().
(0134) ;
(0135) ; Note(s):
(0136) ; 1) The (data)stack frame is assumed to look as follows:
(0137) ;
(0138) ; OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
(0139) ; MSB of (return) stack pointer
(0140) ; Flags to load in status register
(0141) ; R31
(0142) ; R30
(0143) ; R7
(0144) ; .
(0145) ; .
(0146) ; .
(0147) ; R0 (High memory)
(0148) ;
(0149) ; where the stack pointer points to the task start address.
(0150) ;
(0151) ;
(0152) ; 2) OSStartHighRdy() MUST:
(0153) ; a) Call OSTaskSwHook() then,
(0154) ; b) Set OSRunning to TRUE,
(0155) ; c) Switch to the highest priority task.
(0156) ;*******************************************************************************
(0157)
(0158) _OSStartHighRdy::
(0159) LDS R16,_OSRunning ; Indicate that we are multitasking
_OSStartHighRdy:
03DC 91000146 LDS R16,_OSRunning
(0160) INC R16
03DE 9503 INC R16
(0161) STS _OSRunning,R16 ;
03DF 93000146 STS R16,_OSRunning
(0162)
(0163) LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
03E1 91E0013F LDS R30,_OSTCBHighRdy
(0164) LDS R31,_OSTCBHighRdy+1 ; ready to run
03E3 91F00140 LDS R31,_OSTCBHighRdy+1
(0165) LD R28,Z+ ; Load Y (R29:R28) pointer
03E5 91C1 LD R28,Z+
(0166) LD R29,Z+ ;
03E6 91D1 LD R29,Z+
03E7 9109 LD R16,Y+
03E8 BF0D OUT P3D,R16
03E9 9109 LD R16,Y+
03EA BF0E OUT P3E,R16
03EB 9109 LD R16,Y+
03EC BF0F OUT P3F,R16
03ED 91F9 LD R31,Y+
03EE 91E9 LD R30,Y+
03EF 91B9 LD R27,Y+
03F0 91A9 LD R26,Y+
03F1 9199 LD R25,Y+
03F2 9189 LD R24,Y+
03F3 9179 LD R23,Y+
03F4 9169 LD R22,Y+
03F5 9159 LD R21,Y+
03F6 9149 LD R20,Y+
03F7 9139 LD R19,Y+
03F8 9129 LD R18,Y+
03F9 9119 LD R17,Y+
03FA 9109 LD R16,Y+
03FB 90F9 LD R15,Y+
03FC 90E9 LD R14,Y+
03FD 90D9 LD R13,Y+
03FE 90C9 LD R12,Y+
03FF 90B9 LD R11,Y+
0400 90A9 LD R10,Y+
0401 9099 LD R9,Y+
0402 9089 LD R8,Y+
0403 9079 LD R7,Y+
0404 9069 LD R6,Y+
0405 9059 LD R5,Y+
0406 9049 LD R4,Y+
0407 9039 LD R3,Y+
0408 9029 LD R2,Y+
0409 9019 LD R1,Y+
040A 9009 LD R0,Y+
(0167)
(0168) POPSP ; restore stack pointer
(0169) POPSREG ; restore SREG
(0170) POPRS ; restore registers
(0171) RET ; start task
040B 9508 RET
_OSCtxSw:
040C 920A ST R0,-Y
040D 921A ST R1,-Y
040E 922A ST R2,-Y
040F 923A ST R3,-Y
0410 924A ST R4,-Y
0411 925A ST R5,-Y
0412 926A ST R6,-Y
0413 927A ST R7,-Y
0414 928A ST R8,-Y
0415 929A ST R9,-Y
0416 92AA ST R10,-Y
0417 92BA ST R11,-Y
0418 92CA ST R12,-Y
0419 92DA ST R13,-Y
041A 92EA ST R14,-Y
041B 92FA ST R15,-Y
041C 930A ST R16,-Y
041D 931A ST R17,-Y
041E 932A ST R18,-Y
041F 933A ST R19,-Y
0420 934A ST R20,-Y
0421 935A ST R21,-Y
0422 936A ST R22,-Y
0423 937A ST R23,-Y
0424 938A ST R24,-Y
0425 939A ST R25,-Y
0426 93AA ST R26,-Y
0427 93BA ST R27,-Y
0428 93EA ST R30,-Y
0429 93FA ST R31,-Y
042A B70F IN R16,P3F
042B 930A ST R16,-Y
042C B70E IN R16,P3E
042D 930A ST R16,-Y
042E B70D IN R16,P3D
042F 930A ST R16,-Y
(0172)
(0173) ;*******************************************************************************
(0174) ; TASK LEVEL CONTEXT SWITCH
(0175) ;
(0176) ; Description : This function is called when a task makes a higher priority task
(0177) ; ready-to-run.
(0178) ;
(0179) ; Note(s):
(0180) ; 1) Upon entry,
(0181) ; OSTCBCur points to the OS_TCB of the task to suspend
(0182) ; OSTCBHighRdy points to the OS_TCB of the task to resume
(0183) ;
(0184) ; 2) The stack frame of the task to suspend looks as follows:
(0185) ;
(0186) ; SP +0 --> LSB of task code address
(0187) ; +1 MSB of task code address (High memory)
(0188) ;
(0189) ; 3) The saved context of the task to resume looks as follows:
(0190) ;
(0191) ; OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
(0192) ; MSB of (return) stack pointer
(0193) ; Flags to load in status register
(0194) ; R31
(0195) ; R30
(0196) ; R7
(0197) ; .
(0198) ; .
(0199) ; .
(0200) ; R0 (High memory)
(0201) ;*******************************************************************************
(0202)
(0203) _OSCtxSw::
(0204) PUSHRS ; Save current task's context
(0205) PUSHSREG
(0206) PUSHSP
(0207)
(0208) LDS R30,_OSTCBCur ; Z = OSTCBCur->OSTCBStkPtr
0430 91E00143 LDS R30,_OSTCBCur
(0209) LDS R31,_OSTCBCur+1 ;
0432 91F00144 LDS R31,_OSTCBCur+1
(0210) ST Z+,R28 ; Save Y (R29:R28) pointer
0434 93C1 ST R28,Z+
(0211) ST Z+,R29 ;
0435 93D1 ST R29,Z+
(0212)
(0213) LDS R16,_OSPrioHighRdy ; OSPrioCur = OSPrioHighRdy
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -