test.lst
来自「将本站的UCOSFORAVR128V276版本升级到了280版」· LST 代码 · 共 1,505 行 · 第 1/5 页
LST
1,505 行
__start:
__text_start:
00F9 EFCF LDI R28,0xFF
00FA E1D0 LDI R29,0x10
00FB BFCD OUT 0x3D,R28
00FC BFDE OUT 0x3E,R29
00FD 51C0 SUBI R28,0x10
00FE 40D0 SBCI R29,0
00FF EA0A LDI R16,0xAA
0100 8308 STD Y+0,R16
0101 2400 CLR R0
0102 E0E0 LDI R30,0
0103 E0F1 LDI R31,1
0104 E016 LDI R17,6
0105 3DEC CPI R30,0xDC
0106 07F1 CPC R31,R17
0107 F011 BEQ 0x010A
0108 9201 ST R0,Z+
0109 CFFB RJMP 0x0105
010A 8300 STD Z+0,R16
010B EFE2 LDI R30,0xF2
010C E0F1 LDI R31,1
010D E0A0 LDI R26,0
010E E0B1 LDI R27,1
010F E011 LDI R17,1
0110 3FE2 CPI R30,0xF2
0111 07F1 CPC R31,R17
0112 F021 BEQ 0x0117
0113 95C8 LPM
0114 9631 ADIW R30,1
0115 920D ST R0,X+
0116 CFF9 RJMP 0x0110
0117 940E0346 CALL _main
_exit:
0119 CFFF RJMP _exit
FILE: E:\ypt050912\XIAZAI\xinzai\UCOSAVR128\ICC\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
(0139) ;
(0140) ; void OSCPURestoreSR (OS_CPU_SR cpu_sr)
(0141) ; Set SREG to cpu_sr
(0142) ; Return
(0143) ;********************************************************************************************************
(0144)
(0145) _OS_CPU_SR_Save::
(0146) IN R16,SREG ; Get current state of interrupts disable flag
_OS_CPU_SR_Save:
011A B70F IN R16,0x3F
(0147) CLI ; Disable interrupts
011B 94F8 BCLR 7
(0148) RET ; Return original SREG value in R16
011C 9508 RET
(0149)
(0150)
(0151) _OS_CPU_SR_Restore::
(0152) OUT SREG,R16 ; Restore SREG
_OS_CPU_SR_Restore:
011D BF0F OUT 0x3F,R16
(0153) RET ; Return
011E 9508 RET
(0154)
(0155) ;/*$PAGE*/.
(0156) ;********************************************************************************************************
(0157) ; START HIGHEST PRIORITY TASK READY-TO-RUN
(0158) ;
(0159) ; Description : This function is called by OSStart() to start the highest priority task that was created
(0160) ; by your application before calling OSStart().
(0161) ;
(0162) ; Note(s) : 1) The (data)stack frame is assumed to look as follows:
(0163) ;
(0164) ; OSTCBHighRdy->OSTCBStkPtr --> SPL of (return) stack pointer (Low memory)
(0165) ; SPH of (return) stack pointer
(0166) ; Flags to load in status register
(0167) ; R31
(0168) ; R30
(0169) ; R27
(0170) ; .
(0171) ; .
(0172) ; R0
(0173) ; PCH
(0174) ; PCL (High memory)
(0175) ;
(0176) ; where the stack pointer points to the task start address.
(0177) ;
(0178) ;
(0179) ; 2) OSStartHighRdy() MUST:
(0180) ; a) Call OSTaskSwHook() then,
(0181) ; b) Set OSRunning to TRUE,
(0182) ; c) Switch to the highest priority task.
(0183) ;********************************************************************************************************
(0184)
(0185) _OSStartHighRdy::
(0186) CALL _OSTaskSwHook ; Invoke user defined context switch hook
_OSStartHighRdy:
011F 940E0344 CALL _OSTaskSwHook
(0187) LDS R16,_OSRunning ; Indicate that we are multitasking
0121 910006A6 LDS R16,_OSRunning
(0188) INC R16 ;
0123 9503 INC R16
(0189) STS _OSRunning,R16 ;
0124 930006A6 STS _OSRunning,R16
(0190)
(0191) LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
0126 91E0059B LDS R30,_OSTCBHighRdy
(0192) LDS R31,_OSTCBHighRdy+1 ; ready to run
0128 91F0059C LDS R31,_OSTCBHighRdy+1
(0193) LD R28,Z+ ; Load Y (R29:R28) pointer
012A 91C1 LD R28,Z+
(0194) LD R29,Z+ ;
012B 91D1 LD R29,Z+
012C 9109 LD R16,Y+
012D BF0D OUT 0x3D,R16
012E 9109 LD R16,Y+
(0195)
(0196) POP_SP ; Restore stack pointer
012F BF0E OUT 0x3E,R16
0130 9109 LD R16,Y+
(0197) POP_SREG ; Restore status register
0131 BF0F OUT 0x3F,R16
0132 9109 LD R16,Y+
0133 BF0B OUT 0x3B,R16
0134 91F9 LD R31,Y+
0135 91E9 LD R30,Y+
0136 91B9 LD R27,Y+
0137 91A9 LD R26,Y+
0138 9199 LD R25,Y+
0139 9189 LD R24,Y+
013A 9179 LD R23,Y+
013B 9169 LD R22,Y+
013C 9159 LD R21,Y+
013D 9149 LD R20,Y+
013E 9139 LD R19,Y+
013F 9129 LD R18,Y+
0140 9119 LD R17,Y+
0141 9109 LD R16,Y+
0142 90F9 LD R15,Y+
0143 90E9 LD R14,Y+
0144 90D9 LD R13,Y+
0145 90C9 LD R12,Y+
0146 90B9 LD R11,Y+
0147 90A9 LD R10,Y+
0148 9099 LD R9,Y+
0149 9089 LD R8,Y+
014A 9079 LD R7,Y+
014B 9069 LD R6,Y+
014C 9059 LD R5,Y+
014D 9049 LD R4,Y+
014E 9039 LD R3,Y+
014F 9029 LD R2,Y+
0150 9019 LD R1,Y+
(0198) POP_ALL ; Restore all registers
0151 9009 LD R0,Y+
(0199) RET ; Start task
0152 9508 RET
_OSCtxSw:
0153 920A ST R0,-Y
0154 921A ST R1,-Y
0155 922A ST R2,-Y
0156 923A ST R3,-Y
0157 924A ST R4,-Y
0158 925A ST R5,-Y
0159 926A ST R6,-Y
015A 927A ST R7,-Y
015B 928A ST R8,-Y
015C 929A ST R9,-Y
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?