?? os_cpu_a.lis
字號:
0000 ;*******************************************************************************
0000 ; uC/OS-II
0000 ; The Real-Time Kernel
0000 ;
0000 ; ATmega103 Specific code
0000 ; (ICC V6.21)
0000 ;
0000 ;
0000 ; File: OS_CPU_A.S
0000 ; MCU : MEGA64,MEGA103,MEGA128,MEGA256
0000 ; By: Ole Saether
0000 ; Modified by: Joerg Meyer
0000 ; Port Version: V1.00
0000 ;
0000 ;
0000 ;*******************************************************************************
0000
0000 ;include
0000
0000 ;*******************************************************************************
0000 ; I/O PORT ADDRESSES
0000 ;*******************************************************************************
0000
0000
003F SREG = 0x3F
003E SPH = 0x3E
003D SPL = 0x3D
003B RAMPZ = 0x3B
0032 TCNT0 = 0x32
0024 TCNT2 = 0x24
0000
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 IN R16,RAMPZ
0000 ST -Y,R16
0000 .macro POPRS
0000 LD R16,Y+
0000 OUT RAMPZ,R16
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) Call OSTaskSwHook() then,
; b) Set OSRunning to TRUE,
; c) Switch to the highest priority task.
;*******************************************************************************
0000 _OSStartHighRdy::
0000 0E940000 CALL _OSTaskSwHook ; Invoke user defined context switch hook
0004 00910000 LDS R16,_OSRunning ; Indicate that we are multitasking
0008 0395 INC R16
000A 00930000 STS _OSRunning,R16 ;
000E
000E E0910000 LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
0012 F0910100 LDS R31,_OSTCBHighRdy+1 ; ready to run
0016 C191 LD R28,Z+ ; Load Y (R29:R28) pointer
0018 D191 LD R29,Z+ ;
001A
001A 0991 LD R16,Y+
001C 0DBF OUT SPL,R16
001E 0991 LD R16,Y+
0020 0EBF OUT SPH,R16
0022 0991 LD R16,Y+
0024 0FBF OUT SREG,R16
0026 0991 LD R16,Y+
0028 0BBF OUT RAMPZ,R16
002A F991 LD R31,Y+
002C E991 LD R30,Y+
002E B991 LD R27,Y+
0030 A991 LD R26,Y+
0032 9991 LD R25,Y+
0034 8991 LD R24,Y+
0036 7991 LD R23,Y+
0038 6991 LD R22,Y+
003A 5991 LD R21,Y+
003C 4991 LD R20,Y+
003E 3991 LD R19,Y+
0040 2991 LD R18,Y+
0042 1991 LD R17,Y+
0044 0991 LD R16,Y+
0046 F990 LD R15,Y+
0048 E990 LD R14,Y+
004A D990 LD R13,Y+
004C C990 LD R12,Y+
004E B990 LD R11,Y+
0050 A990 LD R10,Y+
0052 9990 LD R9,Y+
0054 8990 LD R8,Y+
0056 7990 LD R7,Y+
0058 6990 LD R6,Y+
005A 5990 LD R5,Y+
005C 4990 LD R4,Y+
005E 3990 LD R3,Y+
0060 2990 LD R2,Y+
0062 1990 LD R1,Y+
0064 0990 LD R0,Y+
0066 0895 RET ; start task
0068
0068 ;*******************************************************************************
0068 ; TASK LEVEL CONTEXT SWITCH
0068 ;
0068 ; Description : This function is called when a task makes a higher priority task
0068 ; ready-to-run.
0068 ;
0068 ; Note(s):
0068 ; 1) Upon entry,
0068 ; OSTCBCur points to the OS_TCB of the task to suspend
0068 ; OSTCBHighRdy points to the OS_TCB of the task to resume
0068 ;
0068 ; 2) The stack frame of the task to suspend looks as follows:
0068 ;
0068 ; SP +0 --> LSB of task code address
0068 ; +1 MSB of task code address (High memory)
0068 ;
0068 ; 3) The saved context of the task to resume looks as follows:
0068 ;
0068 ; OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
0068 ; MSB of (return) stack pointer
0068 ; Flags to load in status register
0068 ; R31
0068 ; R30
0068 ; R7
0068 ; .
0068 ; .
0068 ; .
0068 ; R0 (High memory)
0068 ;*******************************************************************************
0068
0068 _OSCtxSw::
0068 0A92 ST -Y,R0
006A 1A92 ST -Y,R1
006C 2A92 ST -Y,R2
006E 3A92 ST -Y,R3
0070 4A92 ST -Y,R4
0072 5A92 ST -Y,R5
0074 6A92 ST -Y,R6
0076 7A92 ST -Y,R7
0078 8A92 ST -Y,R8
007A 9A92 ST -Y,R9
007C AA92 ST -Y,R10
007E BA92 ST -Y,R11
0080 CA92 ST -Y,R12
0082 DA92 ST -Y,R13
0084 EA92 ST -Y,R14
0086 FA92 ST -Y,R15
0088 0A93 ST -Y,R16
008A 1A93 ST -Y,R17
008C 2A93 ST -Y,R18
008E 3A93 ST -Y,R19
0090 4A93 ST -Y,R20
0092 5A93 ST -Y,R21
0094 6A93 ST -Y,R22
0096 7A93 ST -Y,R23
0098 8A93 ST -Y,R24
009A 9A93 ST -Y,R25
009C AA93 ST -Y,R26
009E BA93 ST -Y,R27
00A0 EA93 ST -Y,R30
00A2 FA93 ST -Y,R31
00A4 0BB7 IN R16,RAMPZ
00A6 0A93 ST -Y,R16
00A8 0FB7 IN R16,SREG
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -