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 + -
显示快捷键?