📄 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 ; 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 .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) Call OSTaskSwHook() then,
; b) Set OSRunning to TRUE,
; c) Switch to the highest priority task.
;*******************************************************************************
0000 _OSStartHighRdy::
0000 00910000 LDS R16,_OSRunning ; Indicate that we are multitasking
0004 0395 INC R16
0006 00930000 STS _OSRunning,R16 ;
000A
000A E0910000 LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
000E F0910100 LDS R31,_OSTCBHighRdy+1 ; ready to run
0012 C191 LD R28,Z+ ; Load Y (R29:R28) pointer
0014 D191 LD R29,Z+ ;
0016
0016 0991 LD R16,Y+
0018 0DBF OUT SPL,R16
001A 0991 LD R16,Y+
001C 0EBF OUT SPH,R16
001E 0991 LD R16,Y+
0020 0FBF OUT SREG,R16
0022 F991 LD R31,Y+
0024 E991 LD R30,Y+
0026 B991 LD R27,Y+
0028 A991 LD R26,Y+
002A 9991 LD R25,Y+
002C 8991 LD R24,Y+
002E 7991 LD R23,Y+
0030 6991 LD R22,Y+
0032 5991 LD R21,Y+
0034 4991 LD R20,Y+
0036 3991 LD R19,Y+
0038 2991 LD R18,Y+
003A 1991 LD R17,Y+
003C 0991 LD R16,Y+
003E F990 LD R15,Y+
0040 E990 LD R14,Y+
0042 D990 LD R13,Y+
0044 C990 LD R12,Y+
0046 B990 LD R11,Y+
0048 A990 LD R10,Y+
004A 9990 LD R9,Y+
004C 8990 LD R8,Y+
004E 7990 LD R7,Y+
0050 6990 LD R6,Y+
0052 5990 LD R5,Y+
0054 4990 LD R4,Y+
0056 3990 LD R3,Y+
0058 2990 LD R2,Y+
005A 1990 LD R1,Y+
005C 0990 LD R0,Y+
005E 0895 RET ; start task
0060
0060 ;*******************************************************************************
0060 ; TASK LEVEL CONTEXT SWITCH
0060 ;
0060 ; Description : This function is called when a task makes a higher priority task
0060 ; ready-to-run.
0060 ;
0060 ; Note(s):
0060 ; 1) Upon entry,
0060 ; OSTCBCur points to the OS_TCB of the task to suspend
0060 ; OSTCBHighRdy points to the OS_TCB of the task to resume
0060 ;
0060 ; 2) The stack frame of the task to suspend looks as follows:
0060 ;
0060 ; SP +0 --> LSB of task code address
0060 ; +1 MSB of task code address (High memory)
0060 ;
0060 ; 3) The saved context of the task to resume looks as follows:
0060 ;
0060 ; OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
0060 ; MSB of (return) stack pointer
0060 ; Flags to load in status register
0060 ; R31
0060 ; R30
0060 ; R7
0060 ; .
0060 ; .
0060 ; .
0060 ; R0 (High memory)
0060 ;*******************************************************************************
0060
0060 _OSCtxSw::
0060 0A92 ST -Y,R0
0062 1A92 ST -Y,R1
0064 2A92 ST -Y,R2
0066 3A92 ST -Y,R3
0068 4A92 ST -Y,R4
006A 5A92 ST -Y,R5
006C 6A92 ST -Y,R6
006E 7A92 ST -Y,R7
0070 8A92 ST -Y,R8
0072 9A92 ST -Y,R9
0074 AA92 ST -Y,R10
0076 BA92 ST -Y,R11
0078 CA92 ST -Y,R12
007A DA92 ST -Y,R13
007C EA92 ST -Y,R14
007E FA92 ST -Y,R15
0080 0A93 ST -Y,R16
0082 1A93 ST -Y,R17
0084 2A93 ST -Y,R18
0086 3A93 ST -Y,R19
0088 4A93 ST -Y,R20
008A 5A93 ST -Y,R21
008C 6A93 ST -Y,R22
008E 7A93 ST -Y,R23
0090 8A93 ST -Y,R24
0092 9A93 ST -Y,R25
0094 AA93 ST -Y,R26
0096 BA93 ST -Y,R27
0098 EA93 ST -Y,R30
009A FA93 ST -Y,R31
009C 0FB7 IN R16,SREG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -