📄 os_cpu_c.lst
字号:
161 ** 全局变量: 无
162 ** 调用模块: 无
163 **
164 ** 作 者: 陈明计
165 ** 日 期: 2002年12月2日
166 **-------------------------------------------------------------------------------------------------------
167 ** 修改人:
168 ** 日 期:
169 **-------------------------------------------------------------------------------------------------------
170 ********************************************************************************************************/
171
172 void OSIdle(void)
173 {
174 1 uint8 temp;
175 1 while(1)
176 1 {
177 2 temp++;
178 2 if(temp==100)
C51 COMPILER V7.06 OS_CPU_C 12/21/2004 15:11:28 PAGE 4
179 2 {
180 3 temp=0;
181 3 // P32=!P32;
182 3 }
183 2 _nop_();//_PCON = PCON | 0x01; /* CPU进入休眠状态 */
184 2 }
185 1 }
186
187 /*********************************************************************************************************
188 ** 函数名称: OSStart
189 ** 功能描述: Small RTOS 51初始化函数,调用此函数后多任务开始运行,首先执ID为0的任务
190 ** 输 入: 无
191 ** 输 出 : 无
192 ** 全局变量: OSTsakStackBotton,SP
193 ** 调用模块: 无
194 **
195 ** 作 者: 陈明计
196 ** 日 期: 2002年2月22日
197 **-------------------------------------------------------------------------------------------------------
198 ** 修改人: 陈明计
199 ** 日 期: 2002年12月2日
200 **-------------------------------------------------------------------------------------------------------
201 ** 修改人: 陈明计
202 ** 日 期: 2002年12月30日
203 **-------------------------------------------------------------------------------------------------------
204 ** 修改人:
205 ** 日 期:
206 **-------------------------------------------------------------------------------------------------------
207 ********************************************************************************************************/
208 void OSStart(void)
209
210 {
211 1 uint8 idata *cp;
212 1 uint8 i;
213 1
214 1 cp = STACK;
215 1
216 1 OSTsakStackBotton[0] = STACK;
217 1 OSTsakStackBotton[OS_MAX_TASKS + 1] = (uint8 idata *)(IDATA_RAM_SIZE % 256);
218 1
219 1 /* 初始化优先级最高的任务堆栈,使返回地址为任务开始地址 */
220 1 *cp++ = ((uint16)(TaskFuction[0])) % 256;
221 1 SP = (uint8) cp;
222 1 *cp = ((uint16)(TaskFuction[0])) / 256;
223 1
224 1 /* 初始化优先级最低的任务堆栈 */
225 1 cp = (uint8 idata *)(IDATA_RAM_SIZE - 1) ;
226 1 *cp-- = 0;
227 1 *cp-- = ((uint16)(OSIdle)) / 256;
228 1 OSTsakStackBotton[OS_MAX_TASKS] = cp;
229 1 *cp-- = ((uint16)(OSIdle)) % 256;
230 1
231 1 /* 初始化其它优先级的任务堆栈 */
232 1 for(i = OS_MAX_TASKS - 1; i > 0; i--)
233 1 {
234 2 *cp-- = 0;
235 2 *cp-- = ((uint16)(TaskFuction[i])) / 256;
236 2 OSTsakStackBotton[i] = cp;
237 2 *cp-- = ((uint16)(TaskFuction[i])) % 256;
238 2 }
239 1 /* 允许中断 */
240 1 Os_Enter_Sum = 1;
C51 COMPILER V7.06 OS_CPU_C 12/21/2004 15:11:28 PAGE 5
241 1 OS_EXIT_CRITICAL();
242 1 /* 函数返回优先级最高的任务 */
243 1 }
244
245 /*********************************************************************************************************
246 ** 函数名称: OSTickISR
247 ** 功能描述: 系统时钟中断服务函数
248 ** 输 入: 无
249 ** 输 出 : 无
250 ** 全局变量: 无
251 ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
252 **
253 ** 作 者: 陈明计
254 ** 日 期: 2002年2月22日
255 **-------------------------------------------------------------------------------------------------------
256 ** 修改人: 陈明计
257 ** 日 期: 2002年10月23日
258 **-------------------------------------------------------------------------------------------------------
259 ** 修改人:
260 ** 日 期:
261 **-------------------------------------------------------------------------------------------------------
262 ********************************************************************************************************/
263 #if EN_OS_INT_ENTER >0
#pragma disable /* 除非最高优先级中断,否则,必须加上这一句
- */
#endif
266 void OSTickISR(void) interrupt OS_TIME_ISR
267
268 {
269 1 ////////////////////////////////////
270 1 uint16 data temp;
271 1 temp=0xEDFF;
272 1 temp+=TL0;
273 1 temp+=TH0*256;
274 1 TH0 = (uint8)(temp>>8);
275 1 TL0 = (uint8)(temp);
276 1 // TH0 = 0xED;
277 1 // TL0 = 0xFF;
278 1 ////////////////////////////////////
279 1 #if TICK_TIMER_SHARING >1
static uint8 TickSum = 0;
#endif
282 1
283 1 #if EN_USER_TICK_TIMER > 0
284 1 UserTickTimer(); /* 用户函数
- */
285 1 #endif
286 1
287 1 #if TICK_TIMER_SHARING >1
TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
if (TickSum != 0)
{
return;
}
#endif
294 1
295 1 #if EN_OS_INT_ENTER > 0
OS_INT_ENTER(); /* 中断开始处理
- */
#endif
298 1
299 1
C51 COMPILER V7.06 OS_CPU_C 12/21/2004 15:11:28 PAGE 6
300 1 #if EN_TIMER_SHARING > 0
301 1 OSTimeTick(); /* 调用系统时钟处理函数
- */
302 1 #else
OSIntSendSignal(TIME_ISR_TASK_ID); /* 唤醒ID为TIME_ISR_TASK_ID的任务
-*/
#endif
305 1
306 1 OSIntExit(); /* 中断结束处理
- */
307 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 244 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 1
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 + -