⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_q.lst

📁 AVR平台下的ucos版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
 574 01ce 7894      		sei
 372:os/source/os_q.c ****         *err                    = OS_NO_ERR;
 576               	.LM73:
 577               	/* #NOAPP */
 578 01d0 F601      		movw r30,r12
 579 01d2 B082      		st Z,r11
 580 01d4 07C0      		rjmp .L18
 581               	.L17:
 373:os/source/os_q.c ****         return (msg);                            /* Return message received                        
 374:os/source/os_q.c ****     }
 375:os/source/os_q.c ****     OS_EventTO(pevent);                          /* Timed out                                      
 583               	.LM74:
 584 01d6 C701      		movw r24,r14
 585 01d8 0E94 0000 		call OS_EventTO
 376:os/source/os_q.c ****     OS_EXIT_CRITICAL();
 587               	.LM75:
 588               	/* #APP */
 589 01dc 7894      		sei
 377:os/source/os_q.c ****     *err = OS_TIMEOUT;                           /* Indicate a timeout occured                     
 591               	.LM76:
 592               	/* #NOAPP */
 593 01de 8AE0      		ldi r24,lo8(10)
 594 01e0 F601      		movw r30,r12
 595 01e2 8083      		st Z,r24
 596               	.L18:
 378:os/source/os_q.c ****     return ((void *)0);                          /* No message received                            
 598               	.LM77:
 599 01e4 C801      		movw r24,r16
 600               	.L13:
 601               	/* epilogue: frame size=0 */
 602 01e6 DF91      		pop r29
 603 01e8 CF91      		pop r28
 604 01ea 1F91      		pop r17
 605 01ec 0F91      		pop r16
 606 01ee FF90      		pop r15
 607 01f0 EF90      		pop r14
 608 01f2 DF90      		pop r13
 609 01f4 CF90      		pop r12
 610 01f6 BF90      		pop r11
 611 01f8 0895      		ret
 612               	/* epilogue end (size=10) */
 613               	/* function OSQPend size 118 (99) */
 619               	.Lscope3:
 623               	.global	OSQPost
 625               	OSQPost:
 379:os/source/os_q.c **** }
 380:os/source/os_q.c **** /*$PAGE*/
 381:os/source/os_q.c **** /*
 382:os/source/os_q.c **** ***************************************************************************************************
 383:os/source/os_q.c **** *                                        POST MESSAGE TO A QUEUE
 384:os/source/os_q.c **** *
 385:os/source/os_q.c **** * Description: This function sends a message to a queue
 386:os/source/os_q.c **** *
 387:os/source/os_q.c **** * Arguments  : pevent        is a pointer to the event control block associated with the desired qu
 388:os/source/os_q.c **** *
 389:os/source/os_q.c **** *              msg           is a pointer to the message to send.  You MUST NOT send a NULL pointer
 390:os/source/os_q.c **** *
 391:os/source/os_q.c **** * Returns    : OS_NO_ERR             The call was successful and the message was sent
 392:os/source/os_q.c **** *              OS_Q_FULL             If the queue cannot accept any more messages because it is ful
 393:os/source/os_q.c **** *              OS_ERR_EVENT_TYPE     If you didn't pass a pointer to a queue.
 394:os/source/os_q.c **** *              OS_ERR_PEVENT_NULL    If 'pevent' is a NULL pointer
 395:os/source/os_q.c **** *              OS_ERR_POST_NULL_PTR  If you are attempting to post a NULL pointer
 396:os/source/os_q.c **** ***************************************************************************************************
 397:os/source/os_q.c **** */
 398:os/source/os_q.c **** 
 399:os/source/os_q.c **** #if OS_Q_POST_EN > 0
 400:os/source/os_q.c **** INT8U  OSQPost (OS_EVENT *pevent, void *msg)
 401:os/source/os_q.c **** {
 627               	.LM78:
 628               	/* prologue: frame size=0 */
 629 01fa CF93      		push r28
 630 01fc DF93      		push r29
 631               	/* prologue end (size=2) */
 632 01fe FC01      		movw r30,r24
 402:os/source/os_q.c **** #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register       
 403:os/source/os_q.c ****     OS_CPU_SR  cpu_sr;
 404:os/source/os_q.c **** #endif    
 405:os/source/os_q.c ****     OS_Q      *pq;
 406:os/source/os_q.c **** 
 407:os/source/os_q.c **** 
 408:os/source/os_q.c **** #if OS_ARG_CHK_EN > 0
 409:os/source/os_q.c ****     if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                         
 410:os/source/os_q.c ****         return (OS_ERR_PEVENT_NULL);
 411:os/source/os_q.c ****     }
 412:os/source/os_q.c ****     if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointe
 413:os/source/os_q.c ****         return (OS_ERR_POST_NULL_PTR);
 414:os/source/os_q.c ****     }
 415:os/source/os_q.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                 
 416:os/source/os_q.c ****         return (OS_ERR_EVENT_TYPE);
 417:os/source/os_q.c ****     }
 418:os/source/os_q.c **** #endif
 419:os/source/os_q.c ****     OS_ENTER_CRITICAL();
 634               	.LM79:
 635               	/* #APP */
 636 0200 F894      		cli
 420:os/source/os_q.c ****     if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on queue          
 638               	.LM80:
 639               	/* #NOAPP */
 640 0202 8181      		ldd r24,Z+1
 641 0204 8823      		tst r24
 642 0206 41F0      		breq .L21
 421:os/source/os_q.c ****         OS_EventTaskRdy(pevent, msg, OS_STAT_Q);      /* Ready highest priority task waiting on eve
 644               	.LM81:
 645 0208 44E0      		ldi r20,lo8(4)
 646 020a CF01      		movw r24,r30
 647 020c 0E94 0000 		call OS_EventTaskRdy
 422:os/source/os_q.c ****         OS_EXIT_CRITICAL();
 649               	.LM82:
 650               	/* #APP */
 651 0210 7894      		sei
 423:os/source/os_q.c ****         OS_Sched();                                   /* Find highest priority task ready to run   
 653               	.LM83:
 654               	/* #NOAPP */
 655 0212 0E94 0000 		call OS_Sched
 656 0216 23C0      		rjmp .L24
 657               	.L21:
 424:os/source/os_q.c ****         return (OS_NO_ERR);
 425:os/source/os_q.c ****     }
 426:os/source/os_q.c ****     pq = (OS_Q *)pevent->OSEventPtr;                  /* Point to queue control block              
 659               	.LM84:
 660 0218 A481      		ldd r26,Z+4
 661 021a B581      		ldd r27,Z+5
 427:os/source/os_q.c ****     if (pq->OSQEntries >= pq->OSQSize) {              /* Make sure queue is not full               
 663               	.LM85:
 664 021c ED01      		movw r28,r26
 665 021e 2C85      		ldd r18,Y+12
 666 0220 3D85      		ldd r19,Y+13
 667 0222 8A85      		ldd r24,Y+10
 668 0224 9B85      		ldd r25,Y+11
 669 0226 2817      		cp r18,r24
 670 0228 3907      		cpc r19,r25
 671 022a 20F0      		brlo .L22
 428:os/source/os_q.c ****         OS_EXIT_CRITICAL();
 673               	.LM86:
 674               	/* #APP */
 675 022c 7894      		sei
 429:os/source/os_q.c ****         return (OS_Q_FULL);
 677               	.LM87:
 678               	/* #NOAPP */
 679 022e 8EE1      		ldi r24,lo8(30)
 680 0230 90E0      		ldi r25,hi8(30)
 681 0232 17C0      		rjmp .L20
 682               	.L22:
 430:os/source/os_q.c ****     }
 431:os/source/os_q.c ****     *pq->OSQIn++ = msg;                               /* Insert message into queue                 
 684               	.LM88:
 685 0234 ED01      		movw r28,r26
 686 0236 EE81      		ldd r30,Y+6
 687 0238 FF81      		ldd r31,Y+7
 688 023a 6193      		st Z+,r22
 689 023c 7193      		st Z+,r23
 690 023e FF83      		std Y+7,r31
 691 0240 EE83      		std Y+6,r30
 432:os/source/os_q.c ****     pq->OSQEntries++;                                 /* Update the nbr of entries in the queue    
 693               	.LM89:
 694 0242 2F5F      		subi r18,lo8(-(1))
 695 0244 3F4F      		sbci r19,hi8(-(1))
 696 0246 3D87      		std Y+13,r19
 697 0248 2C87      		std Y+12,r18
 433:os/source/os_q.c ****     if (pq->OSQIn == pq->OSQEnd) {                    /* Wrap IN ptr if we are at end of queue     
 699               	.LM90:
 700 024a 8C81      		ldd r24,Y+4
 701 024c 9D81      		ldd r25,Y+5
 702 024e E817      		cp r30,r24
 703 0250 F907      		cpc r31,r25
 704 0252 21F4      		brne .L23
 434:os/source/os_q.c ****         pq->OSQIn = pq->OSQStart;
 706               	.LM91:
 707 0254 8A81      		ldd r24,Y+2
 708 0256 9B81      		ldd r25,Y+3
 709 0258 9F83      		std Y+7,r25
 710 025a 8E83      		std Y+6,r24
 711               	.L23:
 435:os/source/os_q.c ****     }
 436:os/source/os_q.c ****     OS_EXIT_CRITICAL();
 713               	.LM92:
 714               	/* #APP */
 715 025c 7894      		sei
 716               	/* #NOAPP */
 717               	.L24:
 437:os/source/os_q.c ****     return (OS_NO_ERR);
 719               	.LM93:
 720 025e 80E0      		ldi r24,lo8(0)
 721 0260 90E0      		ldi r25,hi8(0)
 722               	.L20:
 723               	/* epilogue: frame size=0 */
 724 0262 DF91      		pop r29
 725 0264 CF91      		pop r28
 726 0266 0895      		ret
 727               	/* epilogue end (size=3) */
 728               	/* function OSQPost size 59 (54) */
 733               	.Lscope4:
 737               	.global	OSQPostFront
 739               	OSQPostFront:
 438:os/source/os_q.c **** }
 439:os/source/os_q.c **** #endif
 440:os/source/os_q.c **** /*$PAGE*/
 441:os/source/os_q.c **** /*
 442:os/source/os_q.c **** ***************************************************************************************************
 443:os/source/os_q.c **** *                                   POST MESSAGE TO THE FRONT OF A QUEUE
 444:os/source/os_q.c **** *
 445:os/source/os_q.c **** * Description: This function sends a message to a queue but unlike OSQPost(), the message is posted
 446:os/source/os_q.c **** *              the front instead of the end of the queue.  Using OSQPostFront() allows you to send
 447:os/source/os_q.c **** *              'priority' messages.
 448:os/source/os_q.c **** *
 449:os/source/os_q.c **** * Arguments  : pevent        is a pointer to the event control block associated with the desired qu
 450:os/source/os_q.c **** *
 451:os/source/os_q.c **** *              msg           is a pointer to the message to send.  You MUST NOT send a NULL pointer
 452:os/source/os_q.c **** *
 453:os/source/os_q.c **** * Returns    : OS_NO_ERR             The call was successful and the message was sent
 454:os/source/os_q.c **** *              OS_Q_FULL             If the queue cannot accept any more messages because it is ful
 455:os/source/os_q.c **** *              OS_ERR_EVENT_TYPE     If you didn't pass a pointer to a queue.
 456:os/source/os_q.c **** *              OS_ERR_PEVENT_NULL    If 'pevent' is a NULL pointer
 457:os/source/os_q.c **** *              OS_ERR_POST_NULL_PTR  If you are attempting to post to a non queue.
 458:os/source/os_q.c **** ***************************************************************************************************
 459:os/source/os_q.c **** */
 460:os/source/os_q.c **** 
 461:os/source/os_q.c **** #if OS_Q_POST_FRONT_EN > 0
 462:os/source/os_q.c **** INT8U  OSQPostFront (OS_EVENT *pevent, void *msg)
 463:os/source/os_q.c **** {
 741               	.LM94:
 742               	/* prologue: frame size=0 */
 743 0268 CF93      		push r28
 744 026a DF93      		push r29
 745               	/* prologue end (size=2) */
 746 026c FC01      		movw r30,r24
 464:os/source/os_q.c **** #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register       
 465:os/source/os_q.c ****     OS_CPU_SR  cpu_sr;
 466:os/source/os_q.c **** #endif    
 467:os/source/os_q.c ****     OS_Q      *pq;
 468:os/source/os_q.c **** 
 469:os/source/os_q.c **** 
 470:os/source/os_q.c **** #if OS_ARG_CHK_EN > 0
 471:os/source/os_q.c ****     if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                         
 472:os/source/os_q.c ****         return (OS_ERR_PEVENT_NULL);
 473:os/source/os_q.c ****     }
 474:os/source/os_q.c ****     if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointe
 475:os/source/os_q.c ****         return (OS_ERR_POST_NULL_PTR);
 476:os/source/os_q.c ****     }
 477:os/source/os_q.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                 
 478:os/source/os_q.c ****         return (OS_ERR_EVENT_TYPE);
 479:os/source/os_q.c ****     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -