os_task.lst
来自「atmega单片机用的ucos系统 占用内存适中 是atmega单片机合适的操作」· LST 代码 · 共 1,070 行 · 第 1/5 页
LST
1,070 行
483:OSsrc/os_task.c **** * value is OS_TASK_DEL_REQ, another task requested a task delete. Task #10 would look
484:OSsrc/os_task.c **** * this:
485:OSsrc/os_task.c **** *
486:OSsrc/os_task.c **** * void Task(void *p_arg)
487:OSsrc/os_task.c **** * {
488:OSsrc/os_task.c **** * .
489:OSsrc/os_task.c **** * .
490:OSsrc/os_task.c **** * while (1) {
491:OSsrc/os_task.c **** * OSTimeDly(1);
492:OSsrc/os_task.c **** * if (OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ) {
493:OSsrc/os_task.c **** * Release any owned resources;
494:OSsrc/os_task.c **** * De-allocate any dynamic memory;
495:OSsrc/os_task.c **** * OSTaskDel(OS_PRIO_SELF);
496:OSsrc/os_task.c **** * }
497:OSsrc/os_task.c **** * }
498:OSsrc/os_task.c **** * }
499:OSsrc/os_task.c **** *
500:OSsrc/os_task.c **** * Arguments : prio is the priority of the task to request the delete from
501:OSsrc/os_task.c **** *
502:OSsrc/os_task.c **** * Returns : OS_NO_ERR if the task exist and the request has been registered
503:OSsrc/os_task.c **** * OS_TASK_NOT_EXIST if the task has been deleted. This allows the caller to know whe
504:OSsrc/os_task.c **** * the request has been executed.
505:OSsrc/os_task.c **** * OS_TASK_DEL_ERR if the task is assigned to a Mutex.
506:OSsrc/os_task.c **** * OS_TASK_DEL_IDLE if you requested to delete uC/OS-II's idle task
507:OSsrc/os_task.c **** * OS_PRIO_INVALID if the priority you specify is higher that the maximum allowed
508:OSsrc/os_task.c **** * (i.e. >= OS_LOWEST_PRIO) or, you have not specified OS_PRIO_SELF.
509:OSsrc/os_task.c **** * OS_TASK_DEL_REQ if a task (possibly another task) requested that the running task
510:OSsrc/os_task.c **** * deleted.
511:OSsrc/os_task.c **** ***************************************************************************************************
512:OSsrc/os_task.c **** */
513:OSsrc/os_task.c **** /*$PAGE*/
514:OSsrc/os_task.c **** #if OS_TASK_DEL_EN > 0
515:OSsrc/os_task.c **** INT8U OSTaskDelReq (INT8U prio)
516:OSsrc/os_task.c **** {
517:OSsrc/os_task.c **** INT8U stat;
518:OSsrc/os_task.c **** OS_TCB *ptcb;
519:OSsrc/os_task.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
520:OSsrc/os_task.c **** OS_CPU_SR cpu_sr;
521:OSsrc/os_task.c ****
522:OSsrc/os_task.c ****
523:OSsrc/os_task.c ****
524:OSsrc/os_task.c **** cpu_sr = 0; /* Prevent compiler warning
525:OSsrc/os_task.c **** #endif
526:OSsrc/os_task.c **** #if OS_ARG_CHK_EN > 0
527:OSsrc/os_task.c **** if (prio == OS_IDLE_PRIO) { /* Not allowed to delete idle task
528:OSsrc/os_task.c **** return (OS_TASK_DEL_IDLE);
529:OSsrc/os_task.c **** }
530:OSsrc/os_task.c **** if (prio >= OS_LOWEST_PRIO) { /* Task priority valid ? */
531:OSsrc/os_task.c **** if (prio != OS_PRIO_SELF) {
532:OSsrc/os_task.c **** return (OS_PRIO_INVALID);
533:OSsrc/os_task.c **** }
534:OSsrc/os_task.c **** }
535:OSsrc/os_task.c **** #endif
536:OSsrc/os_task.c **** if (prio == OS_PRIO_SELF) { /* See if a task is requesting to .
537:OSsrc/os_task.c **** OS_ENTER_CRITICAL(); /* ... this task to delete itself
538:OSsrc/os_task.c **** stat = OSTCBCur->OSTCBDelReq; /* Return request status to caller
539:OSsrc/os_task.c **** OS_EXIT_CRITICAL();
540:OSsrc/os_task.c **** return (stat);
541:OSsrc/os_task.c **** }
542:OSsrc/os_task.c **** OS_ENTER_CRITICAL();
543:OSsrc/os_task.c **** ptcb = OSTCBPrioTbl[prio];
544:OSsrc/os_task.c **** if (ptcb == (OS_TCB *)0) { /* Task to delete must exist
545:OSsrc/os_task.c **** OS_EXIT_CRITICAL();
546:OSsrc/os_task.c **** return (OS_TASK_NOT_EXIST); /* Task must already be deleted
547:OSsrc/os_task.c **** }
548:OSsrc/os_task.c **** if (ptcb == (OS_TCB *)1) { /* Must NOT be assigned to a Mutex
549:OSsrc/os_task.c **** OS_EXIT_CRITICAL();
550:OSsrc/os_task.c **** return (OS_TASK_DEL_ERR);
551:OSsrc/os_task.c **** }
552:OSsrc/os_task.c **** ptcb->OSTCBDelReq = OS_TASK_DEL_REQ; /* Set flag indicating task to be D
553:OSsrc/os_task.c **** OS_EXIT_CRITICAL();
554:OSsrc/os_task.c **** return (OS_NO_ERR);
555:OSsrc/os_task.c **** }
556:OSsrc/os_task.c **** #endif
557:OSsrc/os_task.c **** /*$PAGE*/
558:OSsrc/os_task.c **** /*
559:OSsrc/os_task.c **** ***************************************************************************************************
560:OSsrc/os_task.c **** * GET THE NAME OF A TASK
561:OSsrc/os_task.c **** *
562:OSsrc/os_task.c **** * Description: This function is called to obtain the name of a task.
563:OSsrc/os_task.c **** *
564:OSsrc/os_task.c **** * Arguments : prio is the priority of the task that you want to obtain the name from.
565:OSsrc/os_task.c **** *
566:OSsrc/os_task.c **** * pname is a pointer to an ASCII string that will receive the name of the task. T
567:OSsrc/os_task.c **** * string must be able to hold at least OS_TASK_NAME_SIZE characters.
568:OSsrc/os_task.c **** *
569:OSsrc/os_task.c **** * err is a pointer to an error code that can contain one of the following values
570:OSsrc/os_task.c **** *
571:OSsrc/os_task.c **** * OS_NO_ERR if the requested task is resumed
572:OSsrc/os_task.c **** * OS_TASK_NOT_EXIST if the task has not been created or is assigned
573:OSsrc/os_task.c **** * OS_PRIO_INVALID if you specified an invalid priority:
574:OSsrc/os_task.c **** * A higher value than the idle task or not OS_PRI
575:OSsrc/os_task.c **** * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
576:OSsrc/os_task.c **** *
577:OSsrc/os_task.c **** * Returns : The length of the string or 0 if the task does not exist.
578:OSsrc/os_task.c **** ***************************************************************************************************
579:OSsrc/os_task.c **** */
580:OSsrc/os_task.c ****
581:OSsrc/os_task.c **** #if OS_TASK_NAME_SIZE > 1
582:OSsrc/os_task.c **** INT8U OSTaskNameGet (INT8U prio, char *pname, INT8U *err)
583:OSsrc/os_task.c **** {
270 .LM22:
271 /* prologue: frame size=0 */
272 00d2 CF93 push r28
273 00d4 DF93 push r29
274 /* prologue end (size=2) */
275 00d6 9B01 movw r18,r22
276 00d8 EA01 movw r28,r20
584:OSsrc/os_task.c **** OS_TCB *ptcb;
585:OSsrc/os_task.c **** INT8U len;
586:OSsrc/os_task.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status registe
587:OSsrc/os_task.c **** OS_CPU_SR cpu_sr;
588:OSsrc/os_task.c ****
589:OSsrc/os_task.c ****
590:OSsrc/os_task.c ****
591:OSsrc/os_task.c **** cpu_sr = 0; /* Prevent compiler warning
592:OSsrc/os_task.c **** #endif
593:OSsrc/os_task.c **** #if OS_ARG_CHK_EN > 0
594:OSsrc/os_task.c **** if (prio > OS_LOWEST_PRIO) { /* Task priority valid ?
278 .LM23:
279 00da 8034 cpi r24,lo8(64)
280 00dc 20F0 brlo .L9
595:OSsrc/os_task.c **** if (prio != OS_PRIO_SELF) {
282 .LM24:
283 00de 8F3F cpi r24,lo8(-1)
284 00e0 11F0 breq .L9
596:OSsrc/os_task.c **** *err = OS_PRIO_INVALID; /* No
286 .LM25:
287 00e2 8AE2 ldi r24,lo8(42)
288 00e4 25C0 rjmp .L16
289 .L9:
597:OSsrc/os_task.c **** return (0);
598:OSsrc/os_task.c **** }
599:OSsrc/os_task.c **** }
600:OSsrc/os_task.c **** if (pname == (char *)0) { /* Is 'pname' a NULL pointer?
291 .LM26:
292 00e6 2115 cp r18,__zero_reg__
293 00e8 3105 cpc r19,__zero_reg__
294 00ea 21F4 brne .L11
601:OSsrc/os_task.c **** *err = OS_ERR_PNAME_NULL; /* Yes */
296 .LM27:
297 00ec 8FE0 ldi r24,lo8(15)
298 00ee 8883 st Y,r24
602:OSsrc/os_task.c **** return (0);
300 .LM28:
301 00f0 B901 movw r22,r18
302 00f2 2CC0 rjmp .L8
303 .L11:
603:OSsrc/os_task.c **** }
604:OSsrc/os_task.c **** #endif
605:OSsrc/os_task.c **** OS_ENTER_CRITICAL();
305 .LM29:
306 /* #APP */
307 00f4 0FB6 in __tmp_reg__,__SREG__
308 00f6 F894 cli
309 00f8 0F92 push __tmp_reg__
606:OSsrc/os_task.c **** if (prio == OS_PRIO_SELF) { /* See if caller desires it's own name
311 .LM30:
312 /* #NOAPP */
313 00fa 8F3F cpi r24,lo8(-1)
314 00fc 29F4 brne .L12
607:OSsrc/os_task.c **** prio = OSTCBCur->OSTCBPrio;
316 .LM31:
317 00fe E091 0000 lds r30,OSTCBCur
318 0102 F091 0000 lds r31,(OSTCBCur)+1
319 0106 8685 ldd r24,Z+14
320 .L12:
608:OSsrc/os_task.c **** }
609:OSsrc/os_task.c **** ptcb = OSTCBPrioTbl[prio];
322 .LM32:
323 0108 E82F mov r30,r24
324 010a FF27 clr r31
325 010c EE0F add r30,r30
326 010e FF1F adc r31,r31
327 0110 E050 subi r30,lo8(-(OSTCBPrioTbl))
328 0112 F040 sbci r31,hi8(-(OSTCBPrioTbl))
329 0114 6081 ld r22,Z
330 0116 7181 ldd r23,Z+1
610:OSsrc/os_task.c **** if (ptcb == (OS_TCB *)0) { /* Does task exist?
332 .LM33:
333 0118 6115 cp r22,__zero_reg__
334 011a 7105 cpc r23,__zero_reg__
335 011c 19F4 brne .L13
611:OSsrc/os_task.c **** OS_EXIT_CRITICAL(); /* No
337 .LM34:
338 /* #APP */
339 011e 0F90 pop __tmp_reg__
340 0120 0FBE out __SREG__,__tmp_reg__
341 /* #NOAPP */
342 0122 05C0 rjmp .L15
343 .L13:
612:OSsrc/os_task.c **** *err = OS_TASK_NOT_EXIST;
613:OSsrc/os_task.c **** return (0);
614:OSsrc/os_task.c **** }
615:OSsrc/os_task.c **** if (ptcb == (OS_TCB *)1) { /* Task assigned to a Mutex?
345 .LM35:
346 0124 6130 cpi r22,1
347 0126 7105 cpc r23,__zero_reg__
348 0128 39F4 brne .L14
616:OSsrc/os_task.c **** OS_EXIT_CRITICAL(); /* Yes
350 .LM36:
351 /* #APP */
352 012a 0F90 pop __tmp_reg__
353 012c 0FBE out __SREG__,__tmp_reg__
354 /* #NOAPP */
355 .L15:
617:OSsrc/os_task.c **** *err = OS_TASK_NOT_EXIST;
357 .LM37:
358 012e 8BE0 ldi r24,lo8(11)
359 .L16:
360 0130 8883 st Y,r24
618:OSsrc/os_task.c **** return (0);
362 .LM38:
363 0132 60E0 ldi r22,lo8(0)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?