📄 os_cpu_a.lst
字号:
###############################################################################
# #
# IAR Systems A90 Assembler V1.41B/386 05/Aug/2001 14:39:15 #
# Copyright 1999 IAR Systems. All rights reserved. #
# #
# Target option = Relative jumps reach entire addr space #
# Source file = os_cpu_a.s90 #
# List file = ..\lst\os_cpu_a.lst #
# Object file = ..\obj\os_cpu_a.r90 #
# Command line = -v1 -r -o ..\obj\os_cpu_a.r90 -l #
# ..\lst\os_cpu_a os_cpu_a.s90 #
# #
###############################################################################
1 00000000 ;*********************************************
**********************************************
*************
2 00000000 ;
uC/OS-II
3 00000000 ; The
Real-Time Kernel
4 00000000 ;
5 00000000 ; AVR
Specific code
6 00000000 ; (IAR
AA90 V1.30 or later)
7 00000000 ;
8 00000000 ;
9 00000000 ; File : OS_CPU_A.S90
10 00000000 ; By : Ole Saether
11 00000000 ;
12 00000000 ; $Modtime: 22.07.01 22:06 $
13 00000000 ; $Revision: 3 $
14 00000000 ;
15 00000000 ;*********************************************
**********************************************
*************
16 00000000 ;
I/O PORT ADDRESSES
17 00000000 ;*********************************************
**********************************************
*************
18 00000000
19 0000003F SREG = 0x3F
20 0000003E SPH = 0x3E
21 0000003D SPL = 0x3D
22 00000032 TCNT0 = 0x32
23 00000000
24 00000000 ;*********************************************
**********************************************
*************
25 00000000 ;
PUBLIC DECLARATIONS
26 00000000 ;*********************************************
**********************************************
*************
27 00000000
28 00000000 NAME OS_CPU_A
29 00000000 PUBLIC OSStartHighRdy
30 00000000 PUBLIC OSCtxSw
31 00000000 PUBLIC OSIntCtxSw
32 00000000
33 00000000 ;*********************************************
**********************************************
*************
34 00000000 ;
EXTERNAL DECLARATIONS
35 00000000 ;*********************************************
**********************************************
*************
36 00000000
37 00000000 EXTERN OSIntExit
38 00000000 EXTERN OSIntNesting
39 00000000 EXTERN OSPrioCur
40 00000000 EXTERN OSPrioHighRdy
41 00000000 EXTERN OSRunning
42 00000000 EXTERN OSTaskSwHook
43 00000000 EXTERN OSTCBCur
44 00000000 EXTERN OSTCBHighRdy
45 00000000 EXTERN OSTimeTick
46 00000000
47 00000000 #include "ATMACRO.S90"
48 00000000
49 00000000 RSEG CODE
50 00000000
51 00000000 ;*********************************************
**********************************************
*************
52 00000000 ; START HIGHEST
PRIORITY TASK READY-TO-RUN
53 00000000 ;
54 00000000 ; Description : This function is called by
OSStart() to start the highest priority task
that was created
55 00000000 ; by your application before
calling OSStart().
56 00000000 ;
57 00000000 ; Note(s) : 1) The (data)stack frame is
assumed to look as follows:
58 00000000 ;
59 00000000 ; OSTCBHighRdy->OSTCBStkPtr
--> LSB of (return) stack pointer
(Low memory)
60 00000000 ;
SPH of (return) stack pointer
61 00000000 ;
Flags to load in status register
62 00000000 ;
R31
63 00000000 ;
R30
64 00000000 ;
R27
65 00000000 ;
.
66 00000000 ;
.
67 00000000 ;
.
68 00000000 ;
R0
(High memory)
69 00000000 ;
70 00000000 ; where the stack pointer
points to the task start address.
71 00000000 ;
72 00000000 ;
73 00000000 ; 2) OSStartHighRdy() MUST:
74 00000000 ; a) Call OSTaskSwHook()
then,
75 00000000 ; b) Set OSRunning to
TRUE,
76 00000000 ; c) Switch to the
highest priority task.
77 00000000 ;
78 00000000 ;*********************************************
**********************************************
*************
79 00000000
80 00000000 .... OSStartHighRdy: RCALL OSTaskSwHook
; Invoke user defined context switch hook
81 00000002 9100.... LDS R16,OSRunning
; Indicate
that we are
multitasking
82 00000006 9503 INC R16
;
83 00000008 9300.... STS OSRunning,R16
;
84 0000000C
85 0000000C 91E0.... LDS R30,OSTCBHighRdy
; Let Z
point to TCB of
highest priority
task
86 00000010 91F0.... LDS R31,OSTCBHighRdy+1
; ready to
run
87 00000014 91C1 LD R28,Z+
; Load Y
(R29:R28)
pointer
88 00000016 91D1 LD R29,Z+
;
89 00000018
90 00000018 POPSP
; Restore stack pointer
90.1 00000018 9109 LD R16,Y+
90.2 0000001A BF0D OUT SPL,R16
90.3 0000001C 9109 LD R16,Y+
90.4 0000001E BF0E OUT SPH,R16
90.5 00000020 ENDM
91 00000020 POPSREG
; Restore status register
91.1 00000020 9109 LD R16,Y+
91.2 00000022 BF0F OUT SREG,R16
91.3 00000024 ENDM
92 00000024 POPRS
; Restore all registers
92.1 00000024 91F9 LD R31,Y+
92.2 00000026 91E9 LD R30,Y+
92.3 00000028 91B9 LD R27,Y+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -