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