📄 os_cpu_c.lst
字号:
165 ** 功能描述: 优先级最低的任务
166 ** 输 入: 无
167 ** 输 出 : 无
168 ** 全局变量: 无
169 ** 调用模块: 无
170 **
171 ** 作 者: 陈明计
172 ** 日 期: 2002年12月2日
173 **-------------------------------------------------------------------------------------------------------
174 ** 修改人:
175 ** 日 期:
176 **-------------------------------------------------------------------------------------------------------
177 ********************************************************************************************************/
178
C51 COMPILER V7.50 OS_CPU_C 12/29/2004 20:23:48 PAGE 4
179 void OSIdle(void)
180 {
181 1 while(1)
182 1 {
183 2 // PCON = PCON | 0x01; /* CPU进入休眠状态 */
184 2
185 2 }
186 1 }
187
188 /*********************************************************************************************************
189 ** 函数名称: OSStart
190 ** 功能描述: Small RTOS 51初始化函数,调用此函数后多任务开始运行,首先执ID为0的任务
191 ** 输 入: 无
192 ** 输 出 : 无
193 ** 全局变量: OSTsakStackBotton,SP
194 ** 调用模块: 无
195 **
196 ** 作 者: 陈明计
197 ** 日 期: 2002年2月22日
198 **-------------------------------------------------------------------------------------------------------
199 ** 修改人: 陈明计
200 ** 日 期: 2002年12月2日
201 **-------------------------------------------------------------------------------------------------------
202 ** 修改人: 陈明计
203 ** 日 期: 2002年12月30日
204 **-------------------------------------------------------------------------------------------------------
205 ** 修改人:
206 ** 日 期:
207 **-------------------------------------------------------------------------------------------------------
208 ********************************************************************************************************/
209 void OSStart(void)
210
211 {
212 1 uint8 idata *cp;
213 1 uint8 i;
214 1
215 1 cp = STACK;
216 1
217 1 OSTsakStackBotton[0] = STACK;
218 1 OSTsakStackBotton[OS_MAX_TASKS + 1] = (uint8 idata *)(IDATA_RAM_SIZE % 256);
219 1
220 1 /* 初始化优先级最高的任务堆栈,使返回地址为任务开始地址 */
221 1 *cp++ = ((uint16)(TaskFuction[0])) % 256;
222 1 SP = (uint8) cp;
223 1 *cp = ((uint16)(TaskFuction[0])) / 256;
224 1
225 1 /* 初始化优先级最低的任务堆栈 */
226 1 cp = (uint8 idata *)(IDATA_RAM_SIZE - 1) ;
227 1 *cp-- = 0;
228 1 *cp-- = ((uint16)(OSIdle)) / 256;
229 1 OSTsakStackBotton[OS_MAX_TASKS] = cp;
230 1 *cp-- = ((uint16)(OSIdle)) % 256;
231 1
232 1 /* 初始化其它优先级的任务堆栈 */
233 1 for(i = OS_MAX_TASKS - 1; i > 0; i--)
234 1 {
235 2 *cp-- = 0;
236 2 *cp-- = ((uint16)(TaskFuction[i])) / 256;
237 2 OSTsakStackBotton[i] = cp;
238 2 *cp-- = ((uint16)(TaskFuction[i])) % 256;
239 2 }
240 1 /* 允许中断 */
C51 COMPILER V7.50 OS_CPU_C 12/29/2004 20:23:48 PAGE 5
241 1 Os_Enter_Sum = 1;
242 1 OS_EXIT_CRITICAL();
243 1
244 1 /* 函数返回优先级最高的任务 */
245 1 }
246
247 /*********************************************************************************************************
248 ** 函数名称: OSTickISR
249 ** 功能描述: 系统时钟中断服务函数
250 ** 输 入: 无
251 ** 输 出 : 无
252 ** 全局变量: 无
253 ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
254 **
255 ** 作 者: 陈明计
256 ** 日 期: 2002年2月22日
257 **-------------------------------------------------------------------------------------------------------
258 ** 修改人: 陈明计
259 ** 日 期: 2002年10月23日
260 **-------------------------------------------------------------------------------------------------------
261 ** 修改人:
262 ** 日 期:
263 **-------------------------------------------------------------------------------------------------------
264 ********************************************************************************************************/
265 #if EN_OS_INT_ENTER >0
266 #pragma disable /* 除非最高优先级中断,否则,必须加上这一句
- */
267 #endif
268 void OSTickISR(void) interrupt OS_TIME_ISR
269
270 {
271 1
272 1 #if TICK_TIMER_SHARING >1
static uint8 TickSum = 0;
#endif
275 1
276 1 #if OS_TIME_ISR == 1
extern uint8 _Reg_TH0; //TH0缓存
extern uint8 _Reg_TL0; //TL0缓存
#endif
280 1
281 1
282 1
283 1 #if OS_TIME_ISR == 1
TR0=0;
TH0 = _Reg_TH0;
TL0 = _Reg_TL0;
TR0=1;
#endif
289 1
290 1
291 1 #if EN_USER_TICK_TIMER > 0
292 1 UserTickTimer(); /* 用户函数
- */
293 1 #endif
294 1
295 1 #if TICK_TIMER_SHARING >1
TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
if (TickSum != 0)
{
return;
}
C51 COMPILER V7.50 OS_CPU_C 12/29/2004 20:23:48 PAGE 6
#endif
302 1
303 1 #if EN_OS_INT_ENTER > 0
304 1 OS_INT_ENTER(); /* 中断开始处理
- */
305 1 #endif
306 1
307 1
308 1 #if EN_TIMER_SHARING > 0
309 1 OSTimeTick(); /* 调用系统时钟处理函数
- */
310 1 #else
OSIntSendSignal(TIME_ISR_TASK_ID); /* 唤醒ID为TIME_ISR_TASK_ID的任务
-*/
#endif
313 1
314 1 OSIntExit(); /* 中断结束处理
- */
315 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 204 ----
CONSTANT SIZE = 9 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -