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

📄 os_q.lst

📁 AVR平台下的ucos版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
 480:os/source/os_q.c **** #endif
 481:os/source/os_q.c ****     OS_ENTER_CRITICAL();
 748               	.LM95:
 749               	/* #APP */
 750 026e F894      		cli
 482:os/source/os_q.c ****     if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on queue          
 752               	.LM96:
 753               	/* #NOAPP */
 754 0270 8181      		ldd r24,Z+1
 755 0272 8823      		tst r24
 756 0274 41F0      		breq .L26
 483:os/source/os_q.c ****         OS_EventTaskRdy(pevent, msg, OS_STAT_Q);      /* Ready highest priority task waiting on eve
 758               	.LM97:
 759 0276 44E0      		ldi r20,lo8(4)
 760 0278 CF01      		movw r24,r30
 761 027a 0E94 0000 		call OS_EventTaskRdy
 484:os/source/os_q.c ****         OS_EXIT_CRITICAL();
 763               	.LM98:
 764               	/* #APP */
 765 027e 7894      		sei
 485:os/source/os_q.c ****         OS_Sched();                                   /* Find highest priority task ready to run   
 767               	.LM99:
 768               	/* #NOAPP */
 769 0280 0E94 0000 		call OS_Sched
 770 0284 27C0      		rjmp .L29
 771               	.L26:
 486:os/source/os_q.c ****         return (OS_NO_ERR);
 487:os/source/os_q.c ****     }
 488:os/source/os_q.c ****     pq = (OS_Q *)pevent->OSEventPtr;                  /* Point to queue control block              
 773               	.LM100:
 774 0286 A481      		ldd r26,Z+4
 775 0288 B581      		ldd r27,Z+5
 489:os/source/os_q.c ****     if (pq->OSQEntries >= pq->OSQSize) {              /* Make sure queue is not full               
 777               	.LM101:
 778 028a ED01      		movw r28,r26
 779 028c 4C85      		ldd r20,Y+12
 780 028e 5D85      		ldd r21,Y+13
 781 0290 8A85      		ldd r24,Y+10
 782 0292 9B85      		ldd r25,Y+11
 783 0294 4817      		cp r20,r24
 784 0296 5907      		cpc r21,r25
 785 0298 20F0      		brlo .L27
 490:os/source/os_q.c ****         OS_EXIT_CRITICAL();
 787               	.LM102:
 788               	/* #APP */
 789 029a 7894      		sei
 491:os/source/os_q.c ****         return (OS_Q_FULL);
 791               	.LM103:
 792               	/* #NOAPP */
 793 029c 8EE1      		ldi r24,lo8(30)
 794 029e 90E0      		ldi r25,hi8(30)
 795 02a0 1BC0      		rjmp .L25
 796               	.L27:
 492:os/source/os_q.c ****     }
 493:os/source/os_q.c ****     if (pq->OSQOut == pq->OSQStart) {                 /* Wrap OUT ptr if we are at the 1st queue en
 798               	.LM104:
 799 02a2 FD01      		movw r30,r26
 800 02a4 2085      		ldd r18,Z+8
 801 02a6 3185      		ldd r19,Z+9
 802 02a8 8281      		ldd r24,Z+2
 803 02aa 9381      		ldd r25,Z+3
 804 02ac 2817      		cp r18,r24
 805 02ae 3907      		cpc r19,r25
 806 02b0 21F4      		brne .L28
 494:os/source/os_q.c ****         pq->OSQOut = pq->OSQEnd;
 808               	.LM105:
 809 02b2 8481      		ldd r24,Z+4
 810 02b4 9581      		ldd r25,Z+5
 811 02b6 9187      		std Z+9,r25
 812 02b8 8087      		std Z+8,r24
 813               	.L28:
 495:os/source/os_q.c ****     }
 496:os/source/os_q.c ****     pq->OSQOut--;
 815               	.LM106:
 816 02ba ED01      		movw r28,r26
 817 02bc E885      		ldd r30,Y+8
 818 02be F985      		ldd r31,Y+9
 819 02c0 3297      		sbiw r30,2
 820 02c2 F987      		std Y+9,r31
 821 02c4 E887      		std Y+8,r30
 497:os/source/os_q.c ****     *pq->OSQOut = msg;                                /* Insert message into queue                 
 823               	.LM107:
 824 02c6 7183      		std Z+1,r23
 825 02c8 6083      		st Z,r22
 498:os/source/os_q.c ****     pq->OSQEntries++;                                 /* Update the nbr of entries in the queue    
 827               	.LM108:
 828 02ca 4F5F      		subi r20,lo8(-(1))
 829 02cc 5F4F      		sbci r21,hi8(-(1))
 830 02ce 5D87      		std Y+13,r21
 831 02d0 4C87      		std Y+12,r20
 499:os/source/os_q.c ****     OS_EXIT_CRITICAL();
 833               	.LM109:
 834               	/* #APP */
 835 02d2 7894      		sei
 836               	/* #NOAPP */
 837               	.L29:
 500:os/source/os_q.c ****     return (OS_NO_ERR);
 839               	.LM110:
 840 02d4 80E0      		ldi r24,lo8(0)
 841 02d6 90E0      		ldi r25,hi8(0)
 842               	.L25:
 843               	/* epilogue: frame size=0 */
 844 02d8 DF91      		pop r29
 845 02da CF91      		pop r28
 846 02dc 0895      		ret
 847               	/* epilogue end (size=3) */
 848               	/* function OSQPostFront size 63 (58) */
 853               	.Lscope5:
 858               	.global	OSQPostOpt
 860               	OSQPostOpt:
 501:os/source/os_q.c **** }
 502:os/source/os_q.c **** #endif
 503:os/source/os_q.c **** /*$PAGE*/
 504:os/source/os_q.c **** /*
 505:os/source/os_q.c **** ***************************************************************************************************
 506:os/source/os_q.c **** *                                        POST MESSAGE TO A QUEUE
 507:os/source/os_q.c **** *
 508:os/source/os_q.c **** * Description: This function sends a message to a queue.  This call has been added to reduce code s
 509:os/source/os_q.c **** *              since it can replace both OSQPost() and OSQPostFront().  Also, this function adds th
 510:os/source/os_q.c **** *              capability to broadcast a message to ALL tasks waiting on the message queue.
 511:os/source/os_q.c **** *
 512:os/source/os_q.c **** * Arguments  : pevent        is a pointer to the event control block associated with the desired qu
 513:os/source/os_q.c **** *
 514:os/source/os_q.c **** *              msg           is a pointer to the message to send.  You MUST NOT send a NULL pointer
 515:os/source/os_q.c **** *
 516:os/source/os_q.c **** *              opt           determines the type of POST performed:
 517:os/source/os_q.c **** *                            OS_POST_OPT_NONE         POST to a single waiting task 
 518:os/source/os_q.c **** *                                                     (Identical to OSQPost())
 519:os/source/os_q.c **** *                            OS_POST_OPT_BROADCAST    POST to ALL tasks that are waiting on the que
 520:os/source/os_q.c **** *                            OS_POST_OPT_FRONT        POST as LIFO (Simulates OSQPostFront())
 521:os/source/os_q.c **** *
 522:os/source/os_q.c **** *                            Below is a list of ALL the possible combination of these flags:
 523:os/source/os_q.c **** *
 524:os/source/os_q.c **** *                                 1) OS_POST_OPT_NONE
 525:os/source/os_q.c **** *                                    identical to OSQPost()
 526:os/source/os_q.c **** *
 527:os/source/os_q.c **** *                                 2) OS_POST_OPT_FRONT  
 528:os/source/os_q.c **** *                                    identical to OSQPostFront()
 529:os/source/os_q.c **** *
 530:os/source/os_q.c **** *                                 3) OS_POST_OPT_BROADCAST
 531:os/source/os_q.c **** *                                    identical to OSQPost() but will broadcast 'msg' to ALL waiting
 532:os/source/os_q.c **** *
 533:os/source/os_q.c **** *                                 4) OS_POST_OPT_FRONT + OS_POST_OPT_BROADCAST  is identical to
 534:os/source/os_q.c **** *                                    OSQPostFront() except that will broadcast 'msg' to ALL waiting
 535:os/source/os_q.c **** *
 536:os/source/os_q.c **** * Returns    : OS_NO_ERR             The call was successful and the message was sent
 537:os/source/os_q.c **** *              OS_Q_FULL             If the queue cannot accept any more messages because it is ful
 538:os/source/os_q.c **** *              OS_ERR_EVENT_TYPE     If you didn't pass a pointer to a queue.
 539:os/source/os_q.c **** *              OS_ERR_PEVENT_NULL    If 'pevent' is a NULL pointer
 540:os/source/os_q.c **** *              OS_ERR_POST_NULL_PTR  If you are attempting to post a NULL pointer
 541:os/source/os_q.c **** *
 542:os/source/os_q.c **** * Warning    : Interrupts can be disabled for a long time if you do a 'broadcast'.  In fact, the 
 543:os/source/os_q.c **** *              interrupt disable time is proportional to the number of tasks waiting on the queue.
 544:os/source/os_q.c **** ***************************************************************************************************
 545:os/source/os_q.c **** */
 546:os/source/os_q.c **** 
 547:os/source/os_q.c **** #if OS_Q_POST_OPT_EN > 0
 548:os/source/os_q.c **** INT8U  OSQPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
 549:os/source/os_q.c **** {
 862               	.LM111:
 863               	/* prologue: frame size=0 */
 864 02de 0F93      		push r16
 865 02e0 1F93      		push r17
 866 02e2 CF93      		push r28
 867 02e4 DF93      		push r29
 868               	/* prologue end (size=4) */
 869 02e6 EC01      		movw r28,r24
 870 02e8 8B01      		movw r16,r22
 550:os/source/os_q.c **** #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register       
 551:os/source/os_q.c ****     OS_CPU_SR  cpu_sr;
 552:os/source/os_q.c **** #endif    
 553:os/source/os_q.c ****     OS_Q      *pq;
 554:os/source/os_q.c **** 
 555:os/source/os_q.c **** 
 556:os/source/os_q.c **** #if OS_ARG_CHK_EN > 0
 557:os/source/os_q.c ****     if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                         
 558:os/source/os_q.c ****         return (OS_ERR_PEVENT_NULL);
 559:os/source/os_q.c ****     }
 560:os/source/os_q.c ****     if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointe
 561:os/source/os_q.c ****         return (OS_ERR_POST_NULL_PTR);
 562:os/source/os_q.c ****     }
 563:os/source/os_q.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                 
 564:os/source/os_q.c ****         return (OS_ERR_EVENT_TYPE);
 565:os/source/os_q.c ****     }
 566:os/source/os_q.c **** #endif
 567:os/source/os_q.c ****     OS_ENTER_CRITICAL();
 872               	.LM112:
 873               	/* #APP */
 874 02ea F894      		cli
 568:os/source/os_q.c ****     if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on queue          
 876               	.LM113:
 877               	/* #NOAPP */
 878 02ec 8981      		ldd r24,Y+1
 879 02ee 8823      		tst r24
 880 02f0 99F0      		breq .L31
 569:os/source/os_q.c ****         if ((opt & OS_POST_OPT_BROADCAST) != 0x00) {  /* Do we need to post msg to ALL waiting task
 882               	.LM114:
 883 02f2 40FF      		sbrs r20,0
 884 02f4 09C0      		rjmp .L32
 885               	.L35:
 570:os/source/os_q.c ****             while (pevent->OSEventGrp != 0x00) {      /* Yes, Post to ALL tasks waiting on queue   
 571:os/source/os_q.c ****                 OS_EventTaskRdy(pevent, msg, OS_STAT_Q);    
 887               	.LM115:
 888 02f6 44E0      		ldi r20,lo8(4)
 889 02f8 B801      		movw r22,r16
 890 02fa CE01      		movw r24,r28
 891 02fc 0E94 0000 		call OS_EventTaskRdy
 892 0300 8981      		ldd r24,Y+1
 893 0302 8823      		tst r24
 894 0304 C1F7      		brne .L35
 895 0306 04C0      		rjmp .L36
 896               	.L32:
 572:os/source/os_q.c ****             }
 573:os/source/os_q.c ****         } else {
 574:os/source/os_q.c ****             OS_EventTaskRdy(pevent, msg, OS_STAT_Q);  /* No,  Post to HPT waiting on queue         
 898               	.LM116:
 899 0308 44E0      		ldi r20,lo8(4)
 900 030a CE01      		movw r24,r28
 901 030c 0E94 0000 		call OS_EventTaskRdy
 902               	.L36:
 575:os/source/os_q.c ****         }
 576:os/source/os_q.c ****         OS_EXIT_CRITICAL();
 904               	.LM117:
 905               	/* #APP */
 906 0310 7894      		sei
 577:os/source/os_q.c ****         OS_Sched();                                   /* Find highest priority task ready to run   
 908               	.LM118:
 909               	/* #NOAPP */
 910 0312 0E94 0000 		call OS_Sched
 911 0316 3BC0      		rjmp .L44
 912               	.L31:
 578:os/source/os_q.c ****         return (OS_NO_ERR);
 579:os/source/os_q.c ****     }
 580:os/source/os_q.c ****     pq = (OS_Q *)pevent->OSEventPtr;                  /* Point to queue control block              
 914               	.LM119:
 915 0318 AC81      		ldd r26,Y+4
 916 031a BD81      		ldd r27,Y+5
 581:os/source/os_q.c ****     if (pq->OSQEntries >= pq->O

⌨️ 快捷键说明

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