📄 os_cpu_a.lst
字号:
A51 MACRO ASSEMBLER OS_CPU_A 12/01/2003 20:11:53 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN OS_CPU_A.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE OS_CPU_A.ASM SET(LARGE) DEBUG 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 $nomod51
00AF 24 EA BIT 0A8H.7
0081 25 SP DATA 081H
00F0 26 B DATA 0F0H
00E0 27 ACC DATA 0E0H
0083 28 DPH DATA 083H
0082 29 DPL DATA 082H
00D0 30 PSW DATA 0D0H
008C 31 TR0 BIT 088H.4
008C 32 TH0 DATA 08CH
008A 33 TL0 DATA 08AH
34
35 NAME OS_CPU_A ;模块名
36
37 ;定义重定位段
38 ?PR?OSStartHighRdy?OS_CPU_A SEGMENT CODE
39 ?PR?OSCtxSw?OS_CPU_A SEGMENT CODE
40 ?PR?OSIntCtxSw?OS_CPU_A SEGMENT CODE
41
42 ;?PR?OSTickISR?OS_CPU_A SEGMENT CODE
43 ;?PR?_?serial?OS_CPU_A SEGMENT CODE
44
45 ;声明引用全局变量和外部子程序
46 EXTRN DATA (?C_XBP) ;仿真堆栈指针用于重入局部变量保存,为V2.51能被C使用定义在本
模块中
47
48 EXTRN IDATA (OSTCBCur)
49 EXTRN IDATA (OSTCBHighRdy)
50 EXTRN IDATA (OSRunning)
51 EXTRN IDATA (OSPrioCur)
52 EXTRN IDATA (OSPrioHighRdy)
53
54 EXTRN CODE (_?OSTaskSwHook)
55 EXTRN CODE (_?OSIntEnter)
A51 MACRO ASSEMBLER OS_CPU_A 12/01/2003 20:11:53 PAGE 2
56 EXTRN CODE (_?OSIntExit)
57 EXTRN CODE (_?OSTimeTick)
58 ; EXTRN CODE (_?serial)
59
60 ;对外声明4个不可重入函数
61 PUBLIC OSStartHighRdy
62 PUBLIC OSCtxSw
63 PUBLIC OSIntCtxSw
64
65 ; PUBLIC OSTickISR
66 ; PUBLIC SerialISR
67
68
69 ;分配堆栈空间。只关心大小,堆栈起点由keil决定,通过标号可以获得keil分配的SP起点。
70 ?STACK SEGMENT IDATA
---- 71 RSEG ?STACK
0000 72 OSStack:
0000 73 DS 40H
FFFF 74 OSStkStart IDATA OSStack-1
75
76 ;定义压栈出栈宏
77 PUSHALL MACRO
78 PUSH ACC
79 PUSH B
80 PUSH DPH
81 PUSH DPL
82 PUSH PSW
83 MOV A,R0 ;R0-R7入栈
84 PUSH ACC
85 MOV A,R1
86 PUSH ACC
87 MOV A,R2
88 PUSH ACC
89 MOV A,R3
90 PUSH ACC
91 MOV A,R4
92 PUSH ACC
93 MOV A,R5
94 PUSH ACC
95 MOV A,R6
96 PUSH ACC
97 MOV A,R7
98 PUSH ACC
99 ;PUSH SP ;不必保存SP,任务切换时由相应程序调整
100 ENDM
101
102 POPALL MACRO
103 ;POP ACC ;不必保存SP,任务切换时由相应程序调整
104 POP ACC ;R0-R7出栈
105 MOV R7,A
106 POP ACC
107 MOV R6,A
108 POP ACC
109 MOV R5,A
110 POP ACC
111 MOV R4,A
112 POP ACC
113 MOV R3,A
114 POP ACC
115 MOV R2,A
116 POP ACC
117 MOV R1,A
118 POP ACC
119 MOV R0,A
120 POP PSW
121 POP DPL
A51 MACRO ASSEMBLER OS_CPU_A 12/01/2003 20:11:53 PAGE 3
122 POP DPH
123 POP B
124 POP ACC
125 ENDM
126
127 ;子程序
128 ;-------------------------------------------------------------------------
---- 129 RSEG ?PR?OSStartHighRdy?OS_CPU_A
0000 130 OSStartHighRdy:
131 USING 0 ;上电后51自动关中断,此处不必用CLR EA指令,因为到此处还未开中断,本程序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -