📄 os_cpu_c.lst
字号:
C51 COMPILER V8.05a OS_CPU_C 03/10/2007 13:05:44 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE OS_CPU_C
OBJECT MODULE PLACED IN .\Os_cpu_c.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\keilc51\Os_cpu_c.c ROM(SMALL) DEBUG OBJECTEXTEND PRINT(.\Os_cpu_c.lst) O
-BJECT(.\Os_cpu_c.obj)
line level source
1 /*********************************************************************************************************
2 ** Small RTOS 51
3 ** The Real-Time Kernel For Keil c51
4 **
5 ** (c) Copyright 2002-2003, chenmingji
6 ** All Rights Reserved
7 **
8 ** V1.20.2
9 **
10 **
11 **--------------文件信息--------------------------------------------------------------------------------
12 **文 件 名: OS_CPU_C.C
13 **创 建 人: 陈明计
14 **最后修改日期: 2004年4月22日
15 **描 述: Small RTOS 51与CPU(既8051系列)相关的C语言代码
16 **
17 **--------------历史版本信息----------------------------------------------------------------------------
18 ** 创建人: 陈明计
19 ** 版 本: V0.50~v1.00
20 ** 日 期: 2002年2月22日~2002年6月20日
21 ** 描 述: 基本完成
22 **
23 **------------------------------------------------------------------------------------------------------
24 ** 修改人: 陈明计
25 ** 版 本: V1.10~V1.12.0
26 ** 日 期: 2002年9月1日~002年12月30日
27 ** 描 述: 完善代码
28 **
29 **------------------------------------------------------------------------------------------------------
30 ** 修改人: 陈明计
31 ** 版 本: V1.20.0
32 ** 日 期: 2003年8月17日
33 ** 描 述: 根据新版本需要增减了函数
34 **
35 **------------------------------------------------------------------------------------------------------
36 ** 修改人: 陈明计
37 ** 版 本: V1.20.2
38 ** 日 期: 2004年4月22日
39 ** 描 述: 修正任务删除时的一个BUG
40 **
41 **--------------当前版本修订------------------------------------------------------------------------------
42 ** 修改人:
43 ** 日 期:
44 ** 描 述:
45 **
46 **------------------------------------------------------------------------------------------------------
47 ********************************************************************************************************/
48
49 #define IN_OS_CPU_C
50 #include "CONFIG.h"
51
52 extern idata uint8 STACK[1]; /* 堆栈起始位置,在OS_CPU_A定义 */
53 uint8 idata * data OSTsakStackBotton[OS_MAX_TASKS + 2];/* 任务堆栈底部位置 */
54
C51 COMPILER V8.05a OS_CPU_C 03/10/2007 13:05:44 PAGE 2
55 #if EN_SP2 > 0
uint8 idata Sp2[Sp2Space]; /* 高级中断堆栈 */
#endif
58
59 #if OS_MAX_TASKS < 9
60 uint8 data OSFastSwap[1]; /* 任务是否可以快速切换 */
61 #else
uint8 data OSFastSwap[2];
#endif
64
65 extern data uint16 C_XBP;
66
67 void TaskIdle(void) small;
68 /*********************************************************************************************************
69 ** 函数名称: OSCPUInit
70 ** 功能描述: Small RTOS 与系统相关的初始化
71 ** 输 入: 无
72 ** 输 出 : 无
73 ** 全局变量: OSTaskID,OSTsakStackBotton,SP
74 ** 调用模块: LoadCtx
75 **
76 ** 作 者: 陈明计
77 ** 日 期: 2002年2月22日
78 **-------------------------------------------------------------------------------------------------------
79 ** 修改人:
80 ** 日 期:
81 **-------------------------------------------------------------------------------------------------------
82 ********************************************************************************************************/
83 void OSCPUInit(void) small
84 {
85 1 uint8 i;
86 1
87 1 for (i = 0; i < OS_MAX_TASKS + 1; i++)
88 1 {
89 2 OSTsakStackBotton[i] = STACK;
90 2 }
91 1 OSTsakStackBotton[OS_MAX_TASKS + 1] = (uint8 idata *)(IDATA_RAM_SIZE % 256);
92 1
93 1 }
94
95 /*********************************************************************************************************
96 ** 函数名称: OSTaskStkInit
97 ** 功能描述: 任务堆栈初始化
98 ** 输 入: 无
99 ** 输 出 : 无
100 ** 全局变量: OSTaskID,OSTsakStackBotton,SP
101 ** 调用模块: LoadCtx
102 **
103 ** 作 者: 陈明计
104 ** 日 期: 2002年2月22日
105 **-------------------------------------------------------------------------------------------------------
106 ** 修改人:
107 ** 日 期:
108 **-------------------------------------------------------------------------------------------------------
109 ********************************************************************************************************/
110 /*
111 #if EN_REENTRANT > 0
112 #define SP_ADD_BYTE 5
113 #else
114 #define SP_ADD_BYTE 3
115 #endif
116
C51 COMPILER V8.05a OS_CPU_C 03/10/2007 13:05:44 PAGE 3
117
118 void OSTaskStkInit(void (code * task)(void), void xdata *ptos, uint8 TaskID) small
119 {
120 uint8 i;
121 uint8 idata * cp;
122 uint8 idata * cp1;
123
124 #if OS_MAX_TASKS < 9
125 OSFastSwap[1] |= OSMapTbl[TaskID];
126 #else
127 if (TaskID < 8)
128 {
129 OSFastSwap[1] |= OSMapTbl[TaskID];
130 }
131 else
132 {
133 OSFastSwap[0] |= OSMapTbl[TaskID & 0x07];
134 }
135 #endif
136
137 if (TaskID < OSRunningTaskID())
138 {
139 i = OSRunningTaskID() - TaskID;
140 cp = (uint8 idata *)(&(OSTsakStackBotton[TaskID + 1]));
141
142 do
143 {
144 *cp += SP_ADD_BYTE;
145 cp++;
146 } while (--i != 0);
147
148 cp1 = (uint8 idata *)SP;
149 SP = SP + SP_ADD_BYTE;
150 i = SP - (uint8)(OSTsakStackBotton[TaskID + 1]);
151 cp = (uint8 idata *)SP;
152 do
153 {
154 *cp-- = *cp1--;
155 } while (--i != 0);
156 }
157 else
158 {
159 cp1 = (uint8 idata *)(&(OSTsakStackBotton[OSRunningTaskID() + 1]));
160
161 i = TaskID - OSRunningTaskID();
162
163 do
164 {
165 *cp1 -= SP_ADD_BYTE;
166 cp1++;
167 } while (--i != 0);
168
169 cp = OSTsakStackBotton[OSRunningTaskID() + 1];
170 i = OSTsakStackBotton[TaskID] - cp - SP_ADD_BYTE;
171 cp1 = cp - SP_ADD_BYTE;
172 do
173 {
174 *cp1++ = *cp++;
175 } while (--i != 0);
176 }
177 cp = OSTsakStackBotton[TaskID];
178 *cp++ = (uint16)task % 256;
C51 COMPILER V8.05a OS_CPU_C 03/10/2007 13:05:44 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -