📄 os_cpu_c.lst
字号:
147 OSTaskID = OSNextTaskID;
148 SP--;
149 }
150 LoadCtx();
151 LoadCtx();
152 }
153 */
154
155 /*********************************************************************************************************
156 ** 函数名称: OSIdle
157 ** 功能描述: 优先级最低的任务
158 ** 输 入: 无
159 ** 输 出 : 无
160 ** 全局变量: 无
161 ** 调用模块: 无
162 **
163 ** 作 者: 陈明计
164 ** 日 期: 2002年12月2日
165 **-------------------------------------------------------------------------------------------------------
166 ** 修改人:
167 ** 日 期:
168 **-------------------------------------------------------------------------------------------------------
169 ********************************************************************************************************/
170
171 void OSIdle(void)
172 {
173 while(1)
174 {
C51 COMPILER V7.01 OS_CPU_C 03/06/2003 10:20:05 PAGE 4
175 PCON = PCON | 0x01; /* CPU进入休眠状态 */
176 }
177 }
178
179 /*********************************************************************************************************
180 ** 函数名称: OSStart
181 ** 功能描述: Small RTOS 51初始化函数,调用此函数后多任务开始运行,首先执ID为0的任务
182 ** 输 入: 无
183 ** 输 出 : 无
184 ** 全局变量: OSTsakStackBotton,SP
185 ** 调用模块: 无
186 **
187 ** 作 者: 陈明计
188 ** 日 期: 2002年2月22日
189 **-------------------------------------------------------------------------------------------------------
190 ** 修改人: 陈明计
191 ** 日 期: 2002年12月2日
192 **-------------------------------------------------------------------------------------------------------
193 ** 修改人: 陈明计
194 ** 日 期: 2002年12月30日
195 **-------------------------------------------------------------------------------------------------------
196 ** 修改人:
197 ** 日 期:
198 **-------------------------------------------------------------------------------------------------------
199 ********************************************************************************************************/
200 void OSStart(void)
201 {
202 uint8 idata *cp;
203 uint8 i;
204
205 cp = STACK;
206
207 OSTsakStackBotton[0] = STACK;
208 OSTsakStackBotton[OS_MAX_TASKS + 1] = (uint8 idata *)(IDATA_RAM_SIZE % 256);
209
210 /* 初始化优先级最高的任务堆栈,使返回地址为任务开始地址 */
211 *cp++ = ((uint16)(TaskFuction[0])) % 256;
212 SP = (uint8) cp;
213 *cp = ((uint16)(TaskFuction[0])) / 256;
214
215 /* 初始化优先级最低的任务堆栈 */
216 cp = (uint8 idata *)(IDATA_RAM_SIZE - 1) ;
217 *cp-- = 0;
218 *cp-- = ((uint16)(OSIdle)) / 256;
219 OSTsakStackBotton[OS_MAX_TASKS] = cp;
220 *cp-- = ((uint16)(OSIdle)) % 256;
221
222 /* 初始化其它优先级的任务堆栈 */
223 for(i = OS_MAX_TASKS - 1; i > 0; i--)
224 {
225 *cp-- = 0;
226 *cp-- = ((uint16)(TaskFuction[i])) / 256;
227 OSTsakStackBotton[i] = cp;
228 *cp-- = ((uint16)(TaskFuction[i])) % 256;
229 }
230 /* 允许中断 */
231 Os_Enter_Sum = 1;
232 OS_EXIT_CRITICAL();
233 /* 函数返回优先级最高的任务 */
234 }
235
236 /*********************************************************************************************************
C51 COMPILER V7.01 OS_CPU_C 03/06/2003 10:20:05 PAGE 5
237 ** 函数名称: OSTickISR
238 ** 功能描述: 系统时钟中断服务函数
239 ** 输 入: 无
240 ** 输 出 : 无
241 ** 全局变量: 无
242 ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
243 **
244 ** 作 者: 陈明计
245 ** 日 期: 2002年2月22日
246 **-------------------------------------------------------------------------------------------------------
247 ** 修改人: 陈明计
248 ** 日 期: 2002年10月23日
249 **-------------------------------------------------------------------------------------------------------
250 ** 修改人:
251 ** 日 期:
252 **-------------------------------------------------------------------------------------------------------
253 ********************************************************************************************************/
254 #if EN_OS_INT_ENTER >0
*** WARNING C322 IN LINE 254 OF ..\KEILC51\OS_CPU_C.C: unknown identifier
#pragma disable /* 除非最高优先级中断,否则,必须加上这一句
- */
#endif
257 void OSTickISR(void) interrupt OS_TIME_ISR
258
259 {
260 #if TICK_TIMER_SHARING >1
*** WARNING C322 IN LINE 260 OF ..\KEILC51\OS_CPU_C.C: unknown identifier
static uint8 TickSum = 0;
#endif
263
264 #if EN_USER_TICK_TIMER > 0
*** WARNING C322 IN LINE 264 OF ..\KEILC51\OS_CPU_C.C: unknown identifier
UserTickTimer(); /* 用户函数
- */
#endif
267
268 #if TICK_TIMER_SHARING >1
*** WARNING C322 IN LINE 268 OF ..\KEILC51\OS_CPU_C.C: unknown identifier
TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
if (TickSum != 0)
{
return;
}
#endif
275
276 #if EN_OS_INT_ENTER > 0
*** WARNING C322 IN LINE 276 OF ..\KEILC51\OS_CPU_C.C: unknown identifier
OS_INT_ENTER(); /* 中断开始处理
- */
#endif
279
280
281 #if EN_TIMER_SHARING > 0
*** WARNING C322 IN LINE 281 OF ..\KEILC51\OS_CPU_C.C: unknown identifier
OSTimeTick(); /* 调用系统时钟处理函数
- */
#else
284 OSIntSendSignal(TIME_ISR_TASK_ID); /* 唤醒ID为TIME_ISR_TASK_ID的任务
-*/
285 #endif
286
287 OSIntExit(); /* 中断结束处理
C51 COMPILER V7.01 OS_CPU_C 03/06/2003 10:20:05 PAGE 6
- */
288 }
C51 COMPILATION COMPLETE. 8 WARNING(S), 2 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -