⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_cpu_a.lis

📁 ucos-ii-at90S-icc-avr
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0000           ;*******************************************************************************
 0000           ;                                   uC/OS-II
 0000           ;                             The Real-Time Kernel
 0000           ;
 0000           ;                         AT90 Specific code
 0000           ;                               (ICC V6.21)
 0000           ;
 0000           ;
 0000           ; File:                 OS_CPU_A.S
 0000           ; By:                   
 0000           ; Modified by:  
 0000           ; Port Version: V1.00
 0000           ;
 0000           ;
 0000           ;*******************************************************************************
 0000           
 0000           ;include 
 0000           
 0000           ;*******************************************************************************
 0000           ;                 I/O PORT ADDRESSES
 0000           ;*******************************************************************************
 0000           
 003F           SREG	=0x3F
 003E           SPH	=0x3E
 003D           SPL	=0x3D
 0032           TCNT0	=0x32
 0000           
 0010           PIND    = 0x10
 0012           PORTD   = 0x12
 0000           
 0000           ;*******************************************************************************
 0000           ;                MACROS
 0000           ;*******************************************************************************
 0000           
 0000           				; Push registers
 0000           .macro PUSHRS
 0000                           ST      -Y,R0   
 0000                           ST      -Y,R1
 0000                           ST      -Y,R2
 0000                           ST      -Y,R3
 0000                           ST      -Y,R4
 0000                           ST      -Y,R5
 0000                           ST      -Y,R6
 0000                           ST      -Y,R7
 0000                           ST      -Y,R8
 0000                           ST      -Y,R9
 0000                           ST      -Y,R10
 0000                           ST      -Y,R11
 0000                           ST      -Y,R12
 0000                           ST      -Y,R13
 0000                           ST      -Y,R14
 0000                           ST      -Y,R15
 0000                           ST      -Y,R16
 0000                           ST      -Y,R17
 0000                           ST      -Y,R18
 0000                           ST      -Y,R19
 0000                           ST      -Y,R20
 0000                           ST      -Y,R21
 0000                           ST      -Y,R22
 0000                           ST      -Y,R23
 0000                           ST      -Y,R24
 0000                           ST      -Y,R25
 0000                           ST      -Y,R26
 0000                           ST      -Y,R27
 0000                           ST      -Y,R30
 0000                           ST      -Y,R31
 0000           .macro POPRS
 0000                           LD      R31,Y+
 0000                           LD      R30,Y+
 0000                           LD      R27,Y+
 0000                           LD      R26,Y+
 0000                           LD      R25,Y+
 0000                           LD      R24,Y+
 0000                           LD      R23,Y+
 0000                           LD      R22,Y+
 0000                           LD      R21,Y+
 0000                           LD      R20,Y+
 0000                           LD      R19,Y+
 0000                           LD      R18,Y+
 0000                           LD      R17,Y+
 0000                           LD      R16,Y+
 0000                           LD      R15,Y+
 0000                           LD      R14,Y+
 0000                           LD      R13,Y+
 0000                           LD      R12,Y+
 0000                           LD      R11,Y+
 0000                           LD      R10,Y+
 0000                           LD      R9,Y+
 0000                           LD      R8,Y+
 0000                           LD      R7,Y+
 0000                           LD      R6,Y+
 0000                           LD      R5,Y+
 0000                           LD      R4,Y+
 0000                           LD      R3,Y+
 0000                           LD      R2,Y+
 0000                           LD      R1,Y+
 0000                           LD      R0,Y+
 0000           .macro PUSHSP
 0000                           IN      R16,SPH
 0000                           ST      -Y,R16
 0000                           IN      R16,SPL
 0000                           ST      -Y,R16
 0000           .macro POPSP
 0000                           LD      R16,Y+
 0000                           OUT     SPL,R16
 0000                           LD      R16,Y+
 0000                           OUT     SPH,R16
 0000           .macro PUSHSREG
 0000                           IN      R16,SREG
 0000                           ST      -Y,R16
 0000           .macro POPSREG
 0000                           LD      R16,Y+
 0000                           OUT     SREG,R16
                .area    text(rel)
                
                ;*******************************************************************************
                ;               START HIGHEST PRIORITY TASK READY-TO-RUN
                ;
                ; Description : This function is called by OSStart() to start the highest
                ; priority task that was created by your application before calling OSStart().
                ;
                ; Note(s):
                ;       1) The (data)stack frame is assumed to look as follows:
                ;
                ;               OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
                ;                                                                               MSB of (return) stack pointer
                ;                                                                               Flags to load in status register
                ;                                                                               R31
                ;                                                                               R30
                ;                                                                               R7
                ;                                                                               .
                ;                                                                               .
                ;                                                                               .
                ;                                                                               R0  (High memory)
                ;
                ;               where the stack pointer points to the task start address.
                ;
                ;
                ;       2) OSStartHighRdy() MUST:
                ;               a) RCALL OSTaskSwHook() then,
                ;               b) Set OSRunning to TRUE,
                ;               c) Switch to the highest priority task.
                ;*******************************************************************************
                
 0000           _OSStartHighRdy:: 
 0000 00D0                      RCALL    _OSTaskSwHook          ; Invoke user defined context switch hook
 0002 00910000                  LDS     R16,_OSRunning          ; Indicate that we are multitasking
 0006 0395                      INC     R16                                     
 0008 00930000                  STS     _OSRunning,R16          ;
 000C                           
 000C E0910000                  LDS     R30,_OSTCBHighRdy       ; Let Z point to TCB of highest priority task
 0010 F0910100                  LDS     R31,_OSTCBHighRdy+1     ; ready to run
 0014 C191                      LD      R28,Z+                          ; Load Y (R29:R28) pointer
 0016 D191                      LD      R29,Z+                          ;
 0018           
 0018 0991                      LD      R16,Y+
 001A 0DBF                      OUT     SPL,R16
 001C 0991                      LD      R16,Y+
 001E 0EBF                      OUT     SPH,R16
 0020 0991                      LD      R16,Y+
 0022 0FBF                      OUT     SREG,R16
 0024 F991                      LD      R31,Y+
 0026 E991                      LD      R30,Y+
 0028 B991                      LD      R27,Y+
 002A A991                      LD      R26,Y+
 002C 9991                      LD      R25,Y+
 002E 8991                      LD      R24,Y+
 0030 7991                      LD      R23,Y+
 0032 6991                      LD      R22,Y+
 0034 5991                      LD      R21,Y+
 0036 4991                      LD      R20,Y+
 0038 3991                      LD      R19,Y+
 003A 2991                      LD      R18,Y+
 003C 1991                      LD      R17,Y+
 003E 0991                      LD      R16,Y+
 0040 F990                      LD      R15,Y+
 0042 E990                      LD      R14,Y+
 0044 D990                      LD      R13,Y+
 0046 C990                      LD      R12,Y+
 0048 B990                      LD      R11,Y+
 004A A990                      LD      R10,Y+
 004C 9990                      LD      R9,Y+
 004E 8990                      LD      R8,Y+
 0050 7990                      LD      R7,Y+
 0052 6990                      LD      R6,Y+
 0054 5990                      LD      R5,Y+
 0056 4990                      LD      R4,Y+
 0058 3990                      LD      R3,Y+
 005A 2990                      LD      R2,Y+
 005C 1990                      LD      R1,Y+
 005E 0990                      LD      R0,Y+
 0060 0895              RET                     ; start task
 0062           
 0062           ;*******************************************************************************
 0062           ;                 TASK LEVEL CONTEXT SWITCH
 0062           ;
 0062           ; Description : This function is called when a task makes a higher priority task
 0062           ; ready-to-run.
 0062           ;
 0062           ; Note(s):
 0062           ;       1) Upon entry,
 0062           ;               OSTCBCur     points to the OS_TCB of the task to suspend
 0062           ;               OSTCBHighRdy points to the OS_TCB of the task to resume
 0062           ;
 0062           ;       2) The stack frame of the task to suspend looks as follows:
 0062           ;
 0062           ;               SP      +0 --> LSB of task code address
 0062           ;                       +1     MSB of task code address (High memory)
 0062           ;
 0062           ;       3) The saved context of the task to resume looks as follows:
 0062           ;
 0062           ;               OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
 0062           ;                                     MSB of (return) stack pointer
 0062           ;                                     Flags to load in status register
 0062           ;                                     R31
 0062           ;                                     R30
 0062           ;                                     R7
 0062           ;                                     .
 0062           ;                                     .
 0062           ;                                     .
 0062           ;                                     R0    (High memory)
 0062           ;*******************************************************************************
 0062           
 0062 0A92                      ST      -Y,R0   
 0064 1A92                      ST      -Y,R1
 0066 2A92                      ST      -Y,R2
 0068 3A92                      ST      -Y,R3
 006A 4A92                      ST      -Y,R4
 006C 5A92                      ST      -Y,R5
 006E 6A92                      ST      -Y,R6
 0070 7A92                      ST      -Y,R7
 0072 8A92                      ST      -Y,R8
 0074 9A92                      ST      -Y,R9
 0076 AA92                      ST      -Y,R10
 0078 BA92                      ST      -Y,R11
 007A CA92                      ST      -Y,R12
 007C DA92                      ST      -Y,R13
 007E EA92                      ST      -Y,R14
 0080 FA92                      ST      -Y,R15
 0082 0A93                      ST      -Y,R16
 0084 1A93                      ST      -Y,R17
 0086 2A93                      ST      -Y,R18
 0088 3A93                      ST      -Y,R19
 008A 4A93                      ST      -Y,R20
 008C 5A93                      ST      -Y,R21
 008E 6A93                      ST      -Y,R22
 0090 7A93                      ST      -Y,R23
 0092 8A93                      ST      -Y,R24
 0094 9A93                      ST      -Y,R25
 0096 AA93                      ST      -Y,R26
 0098 BA93                      ST      -Y,R27
 009A EA93                      ST      -Y,R30
 009C FA93                      ST      -Y,R31
 009E 0FB7                      IN      R16,SREG
 00A0 0A93                      ST      -Y,R16
 00A2 0EB7                      IN      R16,SPH
 00A4 0A93                      ST      -Y,R16
 00A6 0DB7                      IN      R16,SPL
 00A8 0A93                      ST      -Y,R16
 00AA           
 00AA E0910000                  LDS     R30,_OSTCBCur           ; Z = OSTCBCur->OSTCBStkPtr
 00AE F0910100                  LDS     R31,_OSTCBCur+1         ;
 00B2 C193                      ST      Z+,R28                          ; Save Y (R29:R28) pointer
 00B4 D193                      ST      Z+,R29                          ;
 00B6                   
 00B6 00D0                      RCALL    _OSTaskSwHook          ; RCALL user defined task switch hook
 00B8           
 00B8 00910000                  LDS     R16,_OSPrioHighRdy      ; OSPrioCur = OSPrioHighRdy
 00BC 00930000                  STS     _OSPrioCur,R16
 00C0                   
 00C0 E0910000                  LDS     R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
 00C4 F0910100                  LDS     R31,_OSTCBHighRdy+1     ; ready to run
 00C8 E0930000                  STS     _OSTCBCur,R30           ; OSTCBCur = OSTCBHighRdy

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -