test.lst
来自「将本站的UCOSFORAVR128V276版本升级到了280版」· LST 代码 · 共 1,505 行 · 第 1/5 页
LST
1,505 行
__start:
__text_start:
00FD EFCF LDI R28,0xFF
00FE E1D0 LDI R29,0x10
00FF BFCD OUT 0x3D,R28
0100 BFDE OUT 0x3E,R29
0101 51C0 SUBI R28,0x10
0102 40D0 SBCI R29,0
0103 EA0A LDI R16,0xAA
0104 8308 STD Y+0,R16
0105 2400 CLR R0
0106 E0E0 LDI R30,0
0107 E0F1 LDI R31,1
0108 E017 LDI R17,7
0109 33EC CPI R30,0x3C
010A 07F1 CPC R31,R17
010B F011 BEQ 0x010E
010C 9201 ST R0,Z+
010D CFFB RJMP 0x0109
010E 8300 STD Z+0,R16
010F EFEA LDI R30,0xFA
0110 E0F1 LDI R31,1
0111 E0A0 LDI R26,0
0112 E0B1 LDI R27,1
0113 E011 LDI R17,1
0114 3FEA CPI R30,0xFA
0115 07F1 CPC R31,R17
0116 F021 BEQ 0x011B
0117 95C8 LPM
0118 9631 ADIW R30,1
0119 920D ST R0,X+
011A CFF9 RJMP 0x0114
011B 940E034A CALL _main
_exit:
011D 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:
011E B70F IN R16,0x3F
(0147) CLI ; Disable interrupts
011F 94F8 BCLR 7
(0148) RET ; Return original SREG value in R16
0120 9508 RET
(0149)
(0150)
(0151) _OS_CPU_SR_Restore::
(0152) OUT SREG,R16 ; Restore SREG
_OS_CPU_SR_Restore:
0121 BF0F OUT 0x3F,R16
(0153) RET ; Return
0122 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:
0123 940E0348 CALL _OSTaskSwHook
(0187) LDS R16,_OSRunning ; Indicate that we are multitasking
0125 91000715 LDS R16,_OSRunning
(0188) INC R16 ;
0127 9503 INC R16
(0189) STS _OSRunning,R16 ;
0128 93000715 STS _OSRunning,R16
(0190)
(0191) LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
012A 91E0060A LDS R30,_OSTCBHighRdy
(0192) LDS R31,_OSTCBHighRdy+1 ; ready to run
012C 91F0060B LDS R31,_OSTCBHighRdy+1
(0193) LD R28,Z+ ; Load Y (R29:R28) pointer
012E 91C1 LD R28,Z+
(0194) LD R29,Z+ ;
012F 91D1 LD R29,Z+
0130 9109 LD R16,Y+
0131 BF0D OUT 0x3D,R16
0132 9109 LD R16,Y+
(0195)
(0196) POP_SP ; Restore stack pointer
0133 BF0E OUT 0x3E,R16
0134 9109 LD R16,Y+
(0197) POP_SREG ; Restore status register
0135 BF0F OUT 0x3F,R16
0136 9109 LD R16,Y+
0137 BF0B OUT 0x3B,R16
0138 91F9 LD R31,Y+
0139 91E9 LD R30,Y+
013A 91B9 LD R27,Y+
013B 91A9 LD R26,Y+
013C 9199 LD R25,Y+
013D 9189 LD R24,Y+
013E 9179 LD R23,Y+
013F 9169 LD R22,Y+
0140 9159 LD R21,Y+
0141 9149 LD R20,Y+
0142 9139 LD R19,Y+
0143 9129 LD R18,Y+
0144 9119 LD R17,Y+
0145 9109 LD R16,Y+
0146 90F9 LD R15,Y+
0147 90E9 LD R14,Y+
0148 90D9 LD R13,Y+
0149 90C9 LD R12,Y+
014A 90B9 LD R11,Y+
014B 90A9 LD R10,Y+
014C 9099 LD R9,Y+
014D 9089 LD R8,Y+
014E 9079 LD R7,Y+
014F 9069 LD R6,Y+
0150 9059 LD R5,Y+
0151 9049 LD R4,Y+
0152 9039 LD R3,Y+
0153 9029 LD R2,Y+
0154 9019 LD R1,Y+
(0198) POP_ALL ; Restore all registers
0155 9009 LD R0,Y+
(0199) RET ; Start task
0156 9508 RET
_OSCtxSw:
0157 920A ST R0,-Y
0158 921A ST R1,-Y
0159 922A ST R2,-Y
015A 923A ST R3,-Y
015B 924A ST R4,-Y
015C 925A ST R5,-Y
015D 926A ST R6,-Y
015E 927A ST R7,-Y
015F 928A ST R8,-Y
0160 929A ST R9,-Y
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?