📄 os_cpu_c.lst
字号:
177 #endif
178 *cp = 0;
C51 COMPILER V6.23a OS_CPU_C 01/01/2001 02:30:57 PAGE 4
179 }
180 */
181
182
183 /*********************************************************************************************************
184 ** 函数名称: OSTaskStkDel
185 ** 功能描述: 任务堆栈删除
186 ** 输 入: 无
187 ** 输 出 : 无
188 ** 全局变量: OSTaskID,OSTsakStackBotton,SP
189 ** 调用模块: LoadCtx
190 **
191 ** 作 者: 陈明计
192 ** 日 期: 2002年2月22日
193 **-------------------------------------------------------------------------------------------------------
194 ** 修改人:
195 ** 日 期:
196 **-------------------------------------------------------------------------------------------------------
197 ********************************************************************************************************/
198
199 void StkDelA(uint8 TaskID)
200 {
201 1 uint8 idata *cp;
202 1 uint8 idata *cp1;
203 1 uint8 temp, i;
204 1
205 1 cp = OSTsakStackBotton[TaskID];
206 1 cp1 = OSTsakStackBotton[TaskID + 1];
207 1 temp = cp1 - cp;
208 1 for (i = TaskID + 1; i <= OSRunningTaskID(); i++)
209 1 {
210 2 OSTsakStackBotton[i] -= temp;
211 2 }
212 1 i = SP - (uint8)(cp1) + 1;
213 1 do
214 1 {
215 2 *cp++ = *cp1++;
216 2 } while (--i != 0);
217 1 SP = SP - temp;
218 1 }
219
220
221 void StkDelB(uint8 TaskID)
222 {
223 1 uint8 idata *cp;
224 1 uint8 idata *cp1;
225 1 uint8 temp, i;
226 1
227 1 cp = OSTsakStackBotton[TaskID];
228 1 cp1 = OSTsakStackBotton[TaskID + 1];
229 1 i = OSTsakStackBotton[TaskID] - OSTsakStackBotton[OSRunningTaskID() + 1];
230 1 if (i != 0)
231 1 {
232 2 do
233 2 {
234 3 *cp1++ = *cp++;
235 3 } while (--i != 0);
236 2 }
237 1 temp = cp1 - cp;
238 1 for (i = OSRunningTaskID() + 1; i <= TaskID; i++)
239 1 {
240 2 OSTsakStackBotton[i] += temp;
C51 COMPILER V6.23a OS_CPU_C 01/01/2001 02:30:57 PAGE 5
241 2 }
242 1 }
243
244 void StkDelC(uint8 TaskID)
245 {
246 1 uint8 idata *cp;
247 1 extern void C_OSCtxSw(void);
248 1
249 1
250 1 cp = OSTsakStackBotton[TaskID];
251 1 *cp++ = (uint16)C_OSCtxSw % 256;
252 1 *cp = (uint16)C_OSCtxSw / 256;
253 1 SP = (uint8) cp;
254 1 OSFindNextRunningTask();
255 1 }
256
257 void OSTaskStkDel(uint8 TaskID) small
258 {
259 1 uint8 temp;
260 1
261 1 temp = 1;
262 1 if (TaskID == OSRunningTaskID())
263 1 {
264 2 temp = 2;
265 2 }
266 1 else if (TaskID < OSRunningTaskID())
267 1 {
268 2 temp = 0;
269 2 }
270 1 switch (temp)
271 1 {
272 2 case 0:
273 2 StkDelA(TaskID);
274 2 break;
275 2 case 1:
276 2 StkDelB(TaskID);
277 2 break;
278 2 case 2:
279 2 StkDelC(TaskID);
280 2 break;
281 2 default:
282 2 break;
283 2 }
284 1 }
285
286 /*********************************************************************************************************
287 ** 函数名称: OSTickISR
288 ** 功能描述: 系统时钟中断服务函数
289 ** 输 入: 无
290 ** 输 出 : 无
291 ** 全局变量: 无
292 ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
293 **
294 ** 作 者: 陈明计
295 ** 日 期: 2002年2月22日
296 **-------------------------------------------------------------------------------------------------------
297 ** 修改人: 陈明计
298 ** 日 期: 2002年10月23日
299 **-------------------------------------------------------------------------------------------------------
300 ** 修改人:
301 ** 日 期:
302 **-------------------------------------------------------------------------------------------------------
C51 COMPILER V6.23a OS_CPU_C 01/01/2001 02:30:57 PAGE 6
303 ********************************************************************************************************/
304 #pragma disable /* 除非最高优先级中断,否则,必须加上这一句
- */
305
306 void OSTickISR(void) interrupt OS_TIME_ISR
307
308 {
309 1 #if TICK_TIMER_SHARING >1
static uint8 TickSum = 0;
#endif
312 1
313 1 #if EN_USER_TICK_TIMER > 0
314 1 UserTickTimer(); /* 用户函数
- */
315 1 #endif
316 1
317 1 #if TICK_TIMER_SHARING >1
TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
if (TickSum != 0)
{
return;
}
#endif
324 1
325 1 OS_INT_ENTER(); /* 中断开始处理
- */
326 1
327 1 #if EN_TIMER_SHARING > 0
328 1 OSTimeTick(); /* 调用系统时钟处理函数
- */
329 1 #else
OSIntSendSignal(TIME_ISR_TASK_ID); /* 唤醒ID为TIME_ISR_TASK_ID的任务
-*/
#endif
332 1
333 1 OSIntExit(); /* 中断结束处理
- */
334 1 }
335
336 /*********************************************************************************************************
337 ** End Of File
338 ********************************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 291 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -