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 + -
显示快捷键?