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

📄 os_cpu_a.s90

📁 This is my first job for you all. please let me throw stone for gold!thanks!
💻 S90
📖 第 1 页 / 共 2 页
字号:
;********************************************************************************************************
;                                               uC/OS-II
;                                         The Real-Time Kernel
;
;                                          ATmega128 Specific code
;                                            (IAR V1.40)
;
;
; File     : OS_CPU_A.S90
; By       : Ole Saether
;
; $Revision: 2 $
;
; $History: OS_CPU_A.S90 $
; 
; *****************  Version 2  *****************
; User: Ole          Date: 8/13/00    Time: 14:52
; Updated in $/UCOS-II/AT-M103
; Interrupts are now disabled until OSIntNesting is updated in OSTickISR.
; Moved save/restore of status register from PUSHRS/POPRS to two new
; macros: PUSHSREG and POPSREG.
; 
; *****************  Version 1  *****************
; User: Ole          Date: 8/12/00    Time: 17:41
; Created in $/UCOS-II/AT-M103
; File copied from AVR port version 1.0 to the version control system.
;
;********************************************************************************************************
;                                           I/O PORT ADDRESSES
;********************************************************************************************************

SREG    = 0x3F
SPH     = 0x3E
SPL     = 0x3D
RAMPZ   = 0x3B
TCNT0   = 0x32

;********************************************************************************************************
;                                          PUBLIC DECLARATIONS
;********************************************************************************************************

                MODULE  OS_CPU_A
                PUBLIC  OSStartHighRdy
                PUBLIC  OSCtxSw
                PUBLIC  OSIntCtxSw
                PUBLIC  OSTickISR

;********************************************************************************************************
;                                         EXTERNAL DECLARATIONS
;********************************************************************************************************

                EXTERN  OSIntExit
                EXTERN  OSIntNesting
                EXTERN  OSPrioCur
                EXTERN  OSPrioHighRdy
                EXTERN  OSRunning
                EXTERN  OSTaskSwHook
                EXTERN  OSTCBCur
                EXTERN  OSTCBHighRdy
                EXTERN  OSTimeTick

;********************************************************************************************************
;                                         MACROS
;********************************************************************************************************

PUSHRS          MACRO                               ; Save all registers
                ST      -Y,R0
                ST      -Y,R1
                ST      -Y,R2
                ST      -Y,R3
                ST      -Y,R4
                ST      -Y,R5
                ST      -Y,R6
                ST      -Y,R7
                ST      -Y,R8
                ST      -Y,R9
                ST      -Y,R10
                ST      -Y,R11
                ST      -Y,R12
                ST      -Y,R13
                ST      -Y,R14
                ST      -Y,R15
                ST      -Y,R16
                ST      -Y,R17
                ST      -Y,R18
                ST      -Y,R19
                ST      -Y,R20
                ST      -Y,R21
                ST      -Y,R22
                ST      -Y,R23
                ST      -Y,R24
                ST      -Y,R25
                ST      -Y,R26
                ST      -Y,R27
                ST      -Y,R30
                ST      -Y,R31
                IN      R16,RAMPZ
                ST      -Y,R16
                ENDM

POPRS           MACRO                               ; Restore all registers
                LD      R16,Y+
                OUT     RAMPZ,R16
                LD      R31,Y+
                LD      R30,Y+
                LD      R27,Y+
                LD      R26,Y+
                LD      R25,Y+
                LD      R24,Y+
                LD      R23,Y+
                LD      R22,Y+
                LD      R21,Y+
                LD      R20,Y+
                LD      R19,Y+
                LD      R18,Y+
                LD      R17,Y+
                LD      R16,Y+
                LD      R15,Y+
                LD      R14,Y+
                LD      R13,Y+
                LD      R12,Y+
                LD      R11,Y+
                LD      R10,Y+
                LD      R9,Y+
                LD      R8,Y+
                LD      R7,Y+
                LD      R6,Y+
                LD      R5,Y+
                LD      R4,Y+
                LD      R3,Y+
                LD      R2,Y+
                LD      R1,Y+
                LD      R0,Y+
                ENDM

PUSHSP          MACRO                               ; Save stack pointer
                IN      R16,SPH
                ST      -Y,R16
                IN      R16,SPL
                ST      -Y,R16
                ENDM

POPSP           MACRO                               ; Restore stack pointer
                LD      R16,Y+
                OUT     SPL,R16
                LD      R16,Y+
                OUT     SPH,R16
                ENDM

PUSHSREG        MACRO                               ; Save status register
                IN      R16,SREG
                ST      -Y,R16
                ENDM

POPSREG         MACRO                               ; Restore status registers
                LD      R16,Y+
                OUT     SREG,R16
                ENDM

                RSEG    CODE

;********************************************************************************************************
;                               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)
;                                                SPH 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.
;

⌨️ 快捷键说明

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