📄 os_sem.lst
字号:
642 .LM95:
643 020c 138A std Z+19,__zero_reg__
644 020e 128A std Z+18,__zero_reg__
343:../OSsrc/os_sem.c **** OS_EXIT_CRITICAL();
646 .LM96:
647 /* #APP */
648 0210 7894 sei
649 /* #NOAPP */
650 .L43:
344:../OSsrc/os_sem.c **** *perr = OS_ERR_NONE;
652 .LM97:
653 0212 1882 st Y,__zero_reg__
654 .L30:
655 /* epilogue: frame size=0 */
656 0214 DF91 pop r29
657 0216 CF91 pop r28
658 0218 1F91 pop r17
659 021a FF90 pop r15
660 021c EF90 pop r14
661 021e 0895 ret
662 /* epilogue end (size=6) */
663 /* function OSSemPend size 102 (91) */
668 .Lscope3:
673 .global OSSemPendAbort
675 OSSemPendAbort:
345:../OSsrc/os_sem.c **** }
346:../OSsrc/os_sem.c ****
347:../OSsrc/os_sem.c **** /*$PAGE*/
348:../OSsrc/os_sem.c **** /*
349:../OSsrc/os_sem.c **** ***************************************************************************************************
350:../OSsrc/os_sem.c **** * ABORT WAITING ON A SEMAPHORE
351:../OSsrc/os_sem.c **** *
352:../OSsrc/os_sem.c **** * Description: This function aborts & readies any tasks currently waiting on a semaphore. This fun
353:../OSsrc/os_sem.c **** * should be used to fault-abort the wait on the semaphore, rather than to normally sig
354:../OSsrc/os_sem.c **** * the semaphore via OSSemPost().
355:../OSsrc/os_sem.c **** *
356:../OSsrc/os_sem.c **** * Arguments : pevent is a pointer to the event control block associated with the desired
357:../OSsrc/os_sem.c **** * semaphore.
358:../OSsrc/os_sem.c **** *
359:../OSsrc/os_sem.c **** * opt determines the type of ABORT performed:
360:../OSsrc/os_sem.c **** * OS_PEND_OPT_NONE ABORT wait for a single task (HPT) waiting on
361:../OSsrc/os_sem.c **** * semaphore
362:../OSsrc/os_sem.c **** * OS_PEND_OPT_BROADCAST ABORT wait for ALL tasks that are waiting on
363:../OSsrc/os_sem.c **** * semaphore
364:../OSsrc/os_sem.c **** *
365:../OSsrc/os_sem.c **** * perr is a pointer to where an error message will be deposited. Possible er
366:../OSsrc/os_sem.c **** * messages are:
367:../OSsrc/os_sem.c **** *
368:../OSsrc/os_sem.c **** * OS_ERR_NONE No tasks were waiting on the semaphore.
369:../OSsrc/os_sem.c **** * OS_ERR_PEND_ABORT At least one task waiting on the semaphore was rea
370:../OSsrc/os_sem.c **** * and informed of the aborted wait; check return val
371:../OSsrc/os_sem.c **** * for the number of tasks whose wait on the semaphor
372:../OSsrc/os_sem.c **** * was aborted.
373:../OSsrc/os_sem.c **** * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore.
374:../OSsrc/os_sem.c **** * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.
375:../OSsrc/os_sem.c **** *
376:../OSsrc/os_sem.c **** * Returns : == 0 if no tasks were waiting on the semaphore, or upon error.
377:../OSsrc/os_sem.c **** * > 0 if one or more tasks waiting on the semaphore are now readied and info
378:../OSsrc/os_sem.c **** ***************************************************************************************************
379:../OSsrc/os_sem.c **** */
380:../OSsrc/os_sem.c ****
381:../OSsrc/os_sem.c **** #if OS_SEM_PEND_ABORT_EN > 0
382:../OSsrc/os_sem.c **** INT8U OSSemPendAbort (OS_EVENT *pevent, INT8U opt, INT8U *perr)
383:../OSsrc/os_sem.c **** {
677 .LM98:
678 /* prologue: frame size=0 */
679 0220 FF92 push r15
680 0222 0F93 push r16
681 0224 1F93 push r17
682 0226 CF93 push r28
683 0228 DF93 push r29
684 /* prologue end (size=5) */
685 022a EC01 movw r28,r24
686 022c 8A01 movw r16,r20
384:../OSsrc/os_sem.c **** INT8U nbr_tasks;
385:../OSsrc/os_sem.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
386:../OSsrc/os_sem.c **** OS_CPU_SR cpu_sr = 0;
387:../OSsrc/os_sem.c **** #endif
388:../OSsrc/os_sem.c ****
389:../OSsrc/os_sem.c ****
390:../OSsrc/os_sem.c ****
391:../OSsrc/os_sem.c **** #if OS_ARG_CHK_EN > 0
392:../OSsrc/os_sem.c **** if (perr == (INT8U *)0) { /* Validate 'perr'
688 .LM99:
689 022e 4115 cp r20,__zero_reg__
690 0230 5105 cpc r21,__zero_reg__
691 0232 C1F1 breq .L44
393:../OSsrc/os_sem.c **** return (0);
394:../OSsrc/os_sem.c **** }
395:../OSsrc/os_sem.c **** if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'
693 .LM100:
694 0234 892B or r24,r25
695 0236 29F4 brne .L46
396:../OSsrc/os_sem.c **** *perr = OS_ERR_PEVENT_NULL;
697 .LM101:
698 0238 84E0 ldi r24,lo8(4)
699 023a FA01 movw r30,r20
700 023c 8083 st Z,r24
397:../OSsrc/os_sem.c **** return (0);
702 .LM102:
703 023e AE01 movw r20,r28
704 0240 31C0 rjmp .L44
705 .L46:
398:../OSsrc/os_sem.c **** }
399:../OSsrc/os_sem.c **** #endif
400:../OSsrc/os_sem.c **** if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type
707 .LM103:
708 0242 8881 ld r24,Y
709 0244 8330 cpi r24,lo8(3)
710 0246 21F0 breq .L47
401:../OSsrc/os_sem.c **** *perr = OS_ERR_EVENT_TYPE;
712 .LM104:
713 0248 81E0 ldi r24,lo8(1)
714 024a FA01 movw r30,r20
715 024c 8083 st Z,r24
716 024e 28C0 rjmp .L58
717 .L47:
402:../OSsrc/os_sem.c **** return (0);
403:../OSsrc/os_sem.c **** }
404:../OSsrc/os_sem.c **** OS_ENTER_CRITICAL();
719 .LM105:
720 /* #APP */
721 0250 F894 cli
405:../OSsrc/os_sem.c **** if (pevent->OSEventGrp != 0) { /* See if any task waiting on semaphore?
723 .LM106:
724 /* #NOAPP */
725 0252 8D81 ldd r24,Y+5
726 0254 8823 tst r24
727 0256 09F1 breq .L48
406:../OSsrc/os_sem.c **** nbr_tasks = 0;
729 .LM107:
730 0258 FF24 clr r15
407:../OSsrc/os_sem.c **** switch (opt) {
732 .LM108:
733 025a 6130 cpi r22,lo8(1)
734 025c 61F4 brne .L55
735 .L53:
408:../OSsrc/os_sem.c **** case OS_PEND_OPT_BROADCAST: /* Do we need to abort ALL waiting tasks?
409:../OSsrc/os_sem.c **** while (pevent->OSEventGrp != 0) { /* Yes, ready ALL tasks waiting on semaphore
410:../OSsrc/os_sem.c **** (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_ABORT);
737 .LM109:
738 025e 22E0 ldi r18,lo8(2)
739 0260 41E0 ldi r20,lo8(1)
740 0262 60E0 ldi r22,lo8(0)
741 0264 70E0 ldi r23,hi8(0)
742 0266 CE01 movw r24,r28
743 0268 0E94 0000 call OS_EventTaskRdy
411:../OSsrc/os_sem.c **** nbr_tasks++;
745 .LM110:
746 026c F394 inc r15
747 026e 8D81 ldd r24,Y+5
748 0270 8823 tst r24
749 0272 A9F7 brne .L53
412:../OSsrc/os_sem.c **** }
413:../OSsrc/os_sem.c **** break;
751 .LM111:
752 0274 09C0 rjmp .L49
753 .L55:
414:../OSsrc/os_sem.c ****
415:../OSsrc/os_sem.c **** case OS_PEND_OPT_NONE: /* No, ready HPT waiting on semaphore
416:../OSsrc/os_sem.c **** default:
417:../OSsrc/os_sem.c **** (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_ABORT);
755 .LM112:
756 0276 22E0 ldi r18,lo8(2)
757 0278 41E0 ldi r20,lo8(1)
758 027a 60E0 ldi r22,lo8(0)
759 027c 70E0 ldi r23,hi8(0)
760 027e CE01 movw r24,r28
761 0280 0E94 0000 call OS_EventTaskRdy
418:../OSsrc/os_sem.c **** nbr_tasks++;
763 .LM113:
764 0284 21E0 ldi r18,lo8(1)
765 0286 F22E mov r15,r18
766 .L49:
419:../OSsrc/os_sem.c **** break;
420:../OSsrc/os_sem.c **** }
421:../OSsrc/os_sem.c **** OS_EXIT_CRITICAL();
768 .LM114:
769 /* #APP */
770 0288 7894 sei
422:../OSsrc/os_sem.c **** OS_Sched(); /* Find HPT ready to run
772 .LM115:
773 /* #NOAPP */
774 028a 0E94 0000 call OS_Sched
423:../OSsrc/os_sem.c **** *perr = OS_ERR_PEND_ABORT;
776 .LM116:
777 028e 8EE0 ldi r24,lo8(14)
778 0290 F801 movw r30,r16
779 0292 8083 st Z,r24
424:../OSsrc/os_sem.c **** return (nbr_tasks);
781 .LM117:
782 0294 4F2D mov r20,r15
783 0296 5527 clr r21
784 0298 05C0 rjmp .L44
785 .L48:
425:../OSsrc/os_sem.c **** }
426:../OSsrc/os_sem.c **** OS_EXIT_CRITICAL();
787 .LM118:
788 /* #APP */
789 029a 7894 sei
427:../OSsrc/os_sem.c **** *perr = OS_ERR_NONE;
791 .LM119:
792 /* #NOAPP */
793 029c FA01 movw r30,r20
794 029e 1082 st Z,__zero_reg__
795 .L58:
428:../OSsrc/os_sem.c **** return (0); /* No tasks waiting on semaphore
797 .LM120:
798 02a0 40E0 ldi r20,lo8(0)
799 02a2 50E0 ldi r21,hi8(0)
800 .L44:
429:../OSsrc/os_sem.c **** }
802 .LM121:
803 02a4 CA01 movw r24,r20
804 /* epilogue: frame size=0 */
805 02a6 DF91 pop r29
806 02a8 CF91 pop r28
807 02aa 1F91 pop r17
808 02ac 0F91 pop r16
809 02ae FF90 pop r15
810 02b0 0895 ret
811 /* epilogue end (size=6) */
812 /* function OSSemPendAbort size 76 (65) */
817 .Lscope4:
820 .global OSSemPost
822 OSSemPost:
430:../OSsrc/os_sem.c **** #endif
431:../OSsrc/os_sem.c ****
432:../OSsrc/os_sem.c **** /*$PAGE*/
433:../OSsrc/os_sem.c **** /*
434:../OSsrc/os_sem.c **** ***************************************************************************************************
435:../OSsrc/os_sem.c **** * POST TO A SEMAPHORE
436:../OSsrc/os_sem.c **** *
437:../OSsrc/os_sem.c **** * Description: This function signals a semaphore
438:../OSsrc/os_sem.c **** *
439:../OSsrc/os_sem.c **** * Arguments : pevent is a pointer to the event control block associated with the desired
440:../OSsrc/os_sem.c **** * semaphore.
441:../OSsrc/os_sem.c **** *
442:../OSsrc/os_sem.c **** * Returns : OS_ERR_NONE The call was successful and the semaphore was signaled.
443:../OSsrc/os_sem.c **** * OS_ERR_SEM_OVF If the semaphore count exceeded its limit. In other words, you
444:../OSsrc/os_sem.c **** * signalled the semaphore more often than you waited on it with ei
445:../OSsrc/os_sem.c **** * OSSemAccept() or OSSemPend().
446:../OSsrc/os_sem.c **** * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore
447:../OSsrc/os_sem.c **** * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.
448:../OSsrc/os_sem.c **** ***************************************************************************************************
449:../OSsrc/os_sem.c **** */
450:../OSsrc/os_sem.c ****
451:../OSsrc/os_sem.c **** INT8U OSSemPost (OS_EVENT *pevent)
452:../OSsrc/os_sem.c **** {
824 .LM122:
825 /* prologue: frame size=0 */
826 /* prologue end (size=0) */
827 02b2 FC01 movw r30,r24
453:../OSsrc/os_sem.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
454:../OSsrc/os_sem.c **** OS_CPU_SR cpu_sr = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -