📄 os_cpu_a.lst
字号:
A51 MACRO ASSEMBLER OS_CPU_A 08/05/2007 21:31:20 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN .\Out File\OS_CPU_A.obj
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE C51Port\OS_CPU_A.ASM SET(LARGE) DEBUG PRINT(.\Out File\OS_CPU_A.lst) OBJEC
T(.\Out File\OS_CPU_A.obj) 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 $nomod51
18 ;伪指令详细用法请查A51.PDF文件
19 ;程序结构详见《uC/OS-II》193-198页
20
21 ;不用此语句!!! $CASE ;标号和变量名区分大小写
22
00AF 23 EA BIT 0A8H.7
0081 24 SP DATA 081H
00F0 25 B DATA 0F0H
00E0 26 ACC DATA 0E0H
0083 27 DPH DATA 083H
0082 28 DPL DATA 082H
00D0 29 PSW DATA 0D0H
008C 30 TR0 BIT 088H.4
008D 31 TF0 BIT 088H.5
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 ?PR?OSTickISR?OS_CPU_A SEGMENT CODE
42
43 ;声明引用全局变量和外部子程序
44 EXTRN DATA (?C_XBP) ;仿真堆栈指针用于重入局部变量保存
45 EXTRN IDATA (STACK)
46
47 EXTRN DATA (OSTCBCur)
48 EXTRN DATA (OSTCBHighRdy)
49 EXTRN DATA (OSRunning)
50 EXTRN DATA (OSPrioCur)
51 EXTRN DATA (OSPrioHighRdy)
52
53 EXTRN CODE (ReloadTimer0)
54 EXTRN CODE (OSTaskSwHook)
55 EXTRN CODE (_?OSIntEnter)
A51 MACRO ASSEMBLER OS_CPU_A 08/05/2007 21:31:20 PAGE 2
56 EXTRN CODE (_?OSIntExit)
57 EXTRN CODE (_?OSTimeTick)
58
59 ;对外声明4个不可重入函数
60 PUBLIC OSStartHighRdy
61 PUBLIC OSCtxSw
62 PUBLIC OSIntCtxSw
63 PUBLIC OSTickISR
64
65 ;PUBLIC SerialISR
66
67 ;定义压栈出栈宏
68 ;-------------------------------------------------------------------------
69 PUSHALL MACRO
70 IRP REG, <PSW, ACC, B, DPL, DPH, 0, 1, 2, 3, 4, 5, 6, 7>
71 PUSH REG
72 ENDM
73 ENDM
74
75 POPALL MACRO
76 IRP REG, <7, 6, 5, 4, 3, 2, 1, 0, DPH, DPL, B, ACC, PSW>
77 POP REG
78 ENDM
79 ENDM
80
81 ;子程序
82 ;-------------------------------------------------------------------------
---- 83 RSEG ?PR?OSStartHighRdy?OS_CPU_A
0000 84 OSStartHighRdy:
85 ;上电后51自动关中断,此处不必用CLR EA指令,因为到此处还未开中断,本程序退出后,开中断。
0000 120000 F 86 LCALL OSTaskSwHook
0003 87 OSCtxSw_in:
88 ;OSTCBCur ===> DPTR 获得当前TCB指针,详见C51.PDF第178页
0003 850083 F 89 MOV DPH,(OSTCBCur+1)
0006 850082 F 90 MOV DPL,(OSTCBCur+2)
91
0009 E0 92 MOVX A,@DPTR ;.OSTCBStkPtr是xadta指针
000A F5F0 93 MOV B,A
000C A3 94 INC DPTR
000D E0 95 MOVX A,@DPTR
000E F582 96 MOV DPL,A
0010 85F083 97 MOV DPH,B ;此时PDTR指向用户堆栈
98
99 ;*UserStkPtr ===> R5 用户堆栈起始地址内容(即用户堆栈长度放在此处) 详见文档说明
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -