📄 os_q.lst
字号:
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 + -