📄 os_cpu_a.lst
字号:
A51 MACRO ASSEMBLER OS_CPU_A 12/12/2005 16:42:18 PAGE 1
MACRO ASSEMBLER A51 V7.01
OBJECT MODULE PLACED IN Os_cpu_a.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE Os_cpu_a.asm SET(LARGE) XREF EP
LOC OBJ LINE SOURCE
1 ;/*
2 ;******************************************************************************************
***************
3 ;* uC/OS-II
4 ;* 实时内核
5 ;*
6 ;* (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
7 ;* 版权所有
8 ;*
9 ;* MCU-51 专用代码
10 ;* KEIL C51大模式编译
11 ;*
12 ;* 文件名 : OS_CPU_A.ASM
13 ;* 作者 : Jean J. Labrosse
14 ;* 改编 : 杨屹 gdtyy@ri.gdt.com.cn 巨龙公司系统集成开发部 2002.09.27
15 ;******************************************************************************************
***************
16 ;*/
17
18 ;伪指令详细用法请查A51.PDF文件
19 ;程序结构详见《uC/OS-II》193-198页
20
21 ;不用此语句!!! $CASE ;标号和变量名区分大小写
22
23
24 $nomod51
00AF 25 EA BIT 0A8H.7
0081 26 SP DATA 081H
00F0 27 B DATA 0F0H
00E0 28 ACC DATA 0E0H
0083 29 DPH DATA 083H
0082 30 DPL DATA 082H
00D0 31 PSW DATA 0D0H
008C 32 TR0 BIT 088H.4
008C 33 TH0 DATA 08CH
008A 34 TL0 DATA 08AH
35
36 NAME OS_CPU_A ;模块名
37
38 ;定义重定位段
39 ?PR?OSStartHighRdy?OS_CPU_A SEGMENT CODE
40 ?PR?OSCtxSw?OS_CPU_A SEGMENT CODE
41 ?PR?OSIntCtxSw?OS_CPU_A SEGMENT CODE
42 ?PR?OSTickISR?OS_CPU_A SEGMENT CODE
43
44 ?PR?_?serial?OS_CPU_A SEGMENT CODE
45
46 ?PR?_?serial2?OS_CPU_A SEGMENT CODE
47
48 ;声明引用全局变量和外部子程序
49 EXTRN DATA (?C_XBP) ;仿真堆栈指针用于重入局部变量保存
50
51 EXTRN IDATA (OSTCBCur)
52 EXTRN IDATA (OSTCBHighRdy)
53 EXTRN IDATA (OSRunning)
54 EXTRN IDATA (OSPrioCur)
55 EXTRN IDATA (OSPrioHighRdy)
56
A51 MACRO ASSEMBLER OS_CPU_A 12/12/2005 16:42:18 PAGE 2
57 EXTRN CODE (_?OSTaskSwHook)
58 EXTRN CODE (_?serial)
59
60 EXTRN CODE (_?serial2)
61
62 EXTRN CODE (_?OSIntEnter)
63 EXTRN CODE (_?OSIntExit)
64 EXTRN CODE (_?OSTimeTick)
65
66 ;对外声明4个不可重入函数
67 PUBLIC OSStartHighRdy
68 PUBLIC OSCtxSw
69 PUBLIC OSIntCtxSw
70 PUBLIC OSTickISR
71
72 ;PUBLIC SerialISR
73
74 ;分配堆栈空间。只关心大小,堆栈起点由keil决定,通过标号可以获得keil分配的SP起点。
75 ?STACK SEGMENT IDATA
---- 76 RSEG ?STACK
0000 77 OSStack:
0000 78 DS 40H
FFFF 79 OSStkStart IDATA OSStack-1
80
81 ;定义压栈出栈宏
82 PUSHALL MACRO
83 PUSH PSW
84 PUSH ACC
85 PUSH B
86 PUSH DPL
87 PUSH DPH
88 MOV A,R0 ;R0-R7入栈
89 PUSH ACC
90 MOV A,R1
91 PUSH ACC
92 MOV A,R2
93 PUSH ACC
94 MOV A,R3
95 PUSH ACC
96 MOV A,R4
97 PUSH ACC
98 MOV A,R5
99 PUSH ACC
100 MOV A,R6
101 PUSH ACC
102 MOV A,R7
103 PUSH ACC
104 ;PUSH SP ;不必保存SP,任务切换时由相应程序调整
105 ENDM
106
107 POPALL MACRO
108 ;POP ACC ;不必保存SP,任务切换时由相应程序调整
109 POP ACC ;R0-R7出栈
110 MOV R7,A
111 POP ACC
112 MOV R6,A
113 POP ACC
114 MOV R5,A
115 POP ACC
116 MOV R4,A
117 POP ACC
118 MOV R3,A
119 POP ACC
120 MOV R2,A
121 POP ACC
122 MOV R1,A
A51 MACRO ASSEMBLER OS_CPU_A 12/12/2005 16:42:18 PAGE 3
123 POP ACC
124 MOV R0,A
125 POP DPH
126 POP DPL
127 POP B
128 POP ACC
129 POP PSW
130 ENDM
131
132 ;子程序
133 ;-------------------------------------------------------------------------
---- 134 RSEG ?PR?OSStartHighRdy?OS_CPU_A
0000 135 OSStartHighRdy:
136 USING 0 ;上电后51自动关中断,此处不必用CLR EA指令,因为到此处还未开中断,本程序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -