📄 os_sem.lst
字号:
455:../OSsrc/os_sem.c **** #endif
456:../OSsrc/os_sem.c ****
457:../OSsrc/os_sem.c ****
458:../OSsrc/os_sem.c ****
459:../OSsrc/os_sem.c **** #if OS_ARG_CHK_EN > 0
460:../OSsrc/os_sem.c **** if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'
829 .LM123:
830 02b4 892B or r24,r25
831 02b6 19F4 brne .L60
461:../OSsrc/os_sem.c **** return (OS_ERR_PEVENT_NULL);
833 .LM124:
834 02b8 84E0 ldi r24,lo8(4)
835 02ba 90E0 ldi r25,hi8(4)
836 02bc 0895 ret
837 .L60:
462:../OSsrc/os_sem.c **** }
463:../OSsrc/os_sem.c **** #endif
464:../OSsrc/os_sem.c **** if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type
839 .LM125:
840 02be 8081 ld r24,Z
841 02c0 8330 cpi r24,lo8(3)
842 02c2 19F0 breq .L61
465:../OSsrc/os_sem.c **** return (OS_ERR_EVENT_TYPE);
844 .LM126:
845 02c4 81E0 ldi r24,lo8(1)
846 02c6 90E0 ldi r25,hi8(1)
847 02c8 0895 ret
848 .L61:
466:../OSsrc/os_sem.c **** }
467:../OSsrc/os_sem.c **** OS_ENTER_CRITICAL();
850 .LM127:
851 /* #APP */
852 02ca F894 cli
468:../OSsrc/os_sem.c **** if (pevent->OSEventGrp != 0) { /* See if any task waiting for semaphore
854 .LM128:
855 /* #NOAPP */
856 02cc 8581 ldd r24,Z+5
857 02ce 8823 tst r24
858 02d0 59F0 breq .L62
469:../OSsrc/os_sem.c **** /* Ready HPT waiting on event
470:../OSsrc/os_sem.c **** (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK);
860 .LM129:
861 02d2 20E0 ldi r18,lo8(0)
862 02d4 41E0 ldi r20,lo8(1)
863 02d6 60E0 ldi r22,lo8(0)
864 02d8 70E0 ldi r23,hi8(0)
865 02da CF01 movw r24,r30
866 02dc 0E94 0000 call OS_EventTaskRdy
471:../OSsrc/os_sem.c **** OS_EXIT_CRITICAL();
868 .LM130:
869 /* #APP */
870 02e0 7894 sei
472:../OSsrc/os_sem.c **** OS_Sched(); /* Find HPT ready to run
872 .LM131:
873 /* #NOAPP */
874 02e2 0E94 0000 call OS_Sched
875 02e6 0AC0 rjmp .L64
876 .L62:
473:../OSsrc/os_sem.c **** return (OS_ERR_NONE);
474:../OSsrc/os_sem.c **** }
475:../OSsrc/os_sem.c **** if (pevent->OSEventCnt < 65535u) { /* Make sure semaphore will not overflow
878 .LM132:
879 02e8 8381 ldd r24,Z+3
880 02ea 9481 ldd r25,Z+4
881 02ec 2FEF ldi r18,hi8(-1)
882 02ee 8F3F cpi r24,lo8(-1)
883 02f0 9207 cpc r25,r18
884 02f2 39F0 breq .L63
476:../OSsrc/os_sem.c **** pevent->OSEventCnt++; /* Increment semaphore count to register even
886 .LM133:
887 02f4 0196 adiw r24,1
888 02f6 9483 std Z+4,r25
889 02f8 8383 std Z+3,r24
477:../OSsrc/os_sem.c **** OS_EXIT_CRITICAL();
891 .LM134:
892 /* #APP */
893 02fa 7894 sei
894 /* #NOAPP */
895 .L64:
478:../OSsrc/os_sem.c **** return (OS_ERR_NONE);
897 .LM135:
898 02fc 80E0 ldi r24,lo8(0)
899 02fe 90E0 ldi r25,hi8(0)
900 0300 0895 ret
901 .L63:
479:../OSsrc/os_sem.c **** }
480:../OSsrc/os_sem.c **** OS_EXIT_CRITICAL(); /* Semaphore value has reached its maximum
903 .LM136:
904 /* #APP */
905 0302 7894 sei
481:../OSsrc/os_sem.c **** return (OS_ERR_SEM_OVF);
907 .LM137:
908 /* #NOAPP */
909 0304 82E3 ldi r24,lo8(50)
910 0306 90E0 ldi r25,hi8(50)
482:../OSsrc/os_sem.c **** }
912 .LM138:
913 0308 0895 ret
914 /* epilogue: frame size=0 */
915 /* epilogue: noreturn */
916 /* epilogue end (size=0) */
917 /* function OSSemPost size 48 (48) */
919 .Lscope5:
923 .global OSSemQuery
925 OSSemQuery:
483:../OSsrc/os_sem.c ****
484:../OSsrc/os_sem.c **** /*$PAGE*/
485:../OSsrc/os_sem.c **** /*
486:../OSsrc/os_sem.c **** ***************************************************************************************************
487:../OSsrc/os_sem.c **** * QUERY A SEMAPHORE
488:../OSsrc/os_sem.c **** *
489:../OSsrc/os_sem.c **** * Description: This function obtains information about a semaphore
490:../OSsrc/os_sem.c **** *
491:../OSsrc/os_sem.c **** * Arguments : pevent is a pointer to the event control block associated with the desired
492:../OSsrc/os_sem.c **** * semaphore
493:../OSsrc/os_sem.c **** *
494:../OSsrc/os_sem.c **** * p_sem_data is a pointer to a structure that will contain information about the
495:../OSsrc/os_sem.c **** * semaphore.
496:../OSsrc/os_sem.c **** *
497:../OSsrc/os_sem.c **** * Returns : OS_ERR_NONE The call was successful and the message was sent
498:../OSsrc/os_sem.c **** * OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non semaphore.
499:../OSsrc/os_sem.c **** * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.
500:../OSsrc/os_sem.c **** * OS_ERR_PDATA_NULL If 'p_sem_data' is a NULL pointer
501:../OSsrc/os_sem.c **** ***************************************************************************************************
502:../OSsrc/os_sem.c **** */
503:../OSsrc/os_sem.c ****
504:../OSsrc/os_sem.c **** #if OS_SEM_QUERY_EN > 0
505:../OSsrc/os_sem.c **** INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data)
506:../OSsrc/os_sem.c **** {
927 .LM139:
928 /* prologue: frame size=0 */
929 030a CF93 push r28
930 030c DF93 push r29
931 /* prologue end (size=2) */
932 030e FC01 movw r30,r24
933 0310 DB01 movw r26,r22
507:../OSsrc/os_sem.c **** #if OS_LOWEST_PRIO <= 63
508:../OSsrc/os_sem.c **** INT8U *psrc;
509:../OSsrc/os_sem.c **** INT8U *pdest;
510:../OSsrc/os_sem.c **** #else
511:../OSsrc/os_sem.c **** INT16U *psrc;
512:../OSsrc/os_sem.c **** INT16U *pdest;
513:../OSsrc/os_sem.c **** #endif
514:../OSsrc/os_sem.c **** INT8U i;
515:../OSsrc/os_sem.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status regis
516:../OSsrc/os_sem.c **** OS_CPU_SR cpu_sr = 0;
517:../OSsrc/os_sem.c **** #endif
518:../OSsrc/os_sem.c ****
519:../OSsrc/os_sem.c ****
520:../OSsrc/os_sem.c ****
521:../OSsrc/os_sem.c **** #if OS_ARG_CHK_EN > 0
522:../OSsrc/os_sem.c **** if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'
935 .LM140:
936 0312 892B or r24,r25
937 0314 19F4 brne .L66
523:../OSsrc/os_sem.c **** return (OS_ERR_PEVENT_NULL);
939 .LM141:
940 0316 84E0 ldi r24,lo8(4)
941 0318 90E0 ldi r25,hi8(4)
942 031a 27C0 rjmp .L65
943 .L66:
524:../OSsrc/os_sem.c **** }
525:../OSsrc/os_sem.c **** if (p_sem_data == (OS_SEM_DATA *)0) { /* Validate 'p_sem_data'
945 .LM142:
946 031c 6115 cp r22,__zero_reg__
947 031e 7105 cpc r23,__zero_reg__
948 0320 19F4 brne .L67
526:../OSsrc/os_sem.c **** return (OS_ERR_PDATA_NULL);
950 .LM143:
951 0322 89E0 ldi r24,lo8(9)
952 0324 90E0 ldi r25,hi8(9)
953 0326 21C0 rjmp .L65
954 .L67:
527:../OSsrc/os_sem.c **** }
528:../OSsrc/os_sem.c **** #endif
529:../OSsrc/os_sem.c **** if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type
956 .LM144:
957 0328 8081 ld r24,Z
958 032a 8330 cpi r24,lo8(3)
959 032c 19F0 breq .L68
530:../OSsrc/os_sem.c **** return (OS_ERR_EVENT_TYPE);
961 .LM145:
962 032e 81E0 ldi r24,lo8(1)
963 0330 90E0 ldi r25,hi8(1)
964 0332 1BC0 rjmp .L65
965 .L68:
531:../OSsrc/os_sem.c **** }
532:../OSsrc/os_sem.c **** OS_ENTER_CRITICAL();
967 .LM146:
968 /* #APP */
969 0334 F894 cli
533:../OSsrc/os_sem.c **** p_sem_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list
971 .LM147:
972 /* #NOAPP */
973 0336 8581 ldd r24,Z+5
974 0338 EB01 movw r28,r22
975 033a 8A87 std Y+10,r24
534:../OSsrc/os_sem.c **** psrc = &pevent->OSEventTbl[0];
977 .LM148:
978 033c 9F01 movw r18,r30
979 033e 2A5F subi r18,lo8(-(6))
980 0340 3F4F sbci r19,hi8(-(6))
535:../OSsrc/os_sem.c **** pdest = &p_sem_data->OSEventTbl[0];
982 .LM149:
983 0342 AB01 movw r20,r22
984 0344 4E5F subi r20,lo8(-(2))
985 0346 5F4F sbci r21,hi8(-(2))
986 0348 97E0 ldi r25,lo8(7)
987 .L72:
536:../OSsrc/os_sem.c **** for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
537:../OSsrc/os_sem.c **** *pdest++ = *psrc++;
989 .LM150:
990 034a E901 movw r28,r18
991 034c 8991 ld r24,Y+
992 034e 9E01 movw r18,r28
993 0350 EA01 movw r28,r20
994 0352 8993 st Y+,r24
995 0354 AE01 movw r20,r28
997 .LM151:
998 0356 9150 subi r25,lo8(-(-1))
999 0358 97FF sbrs r25,7
1000 035a F7CF rjmp .L72
538:../OSsrc/os_sem.c **** }
539:../OSsrc/os_sem.c **** p_sem_data->OSCnt = pevent->OSEventCnt; /* Get semaphore count
1002 .LM152:
1003 035c 8381 ldd r24,Z+3
1004 035e 9481 ldd r25,Z+4
1005 0360 8D93 st X+,r24
1006 0362 9C93 st X,r25
540:../OSsrc/os_sem.c **** OS_EXIT_CRITICAL();
1008 .LM153:
1009 /* #APP */
1010 0364 7894 sei
541:../OSsrc/os_sem.c **** return (OS_ERR_NONE);
1012 .LM154:
1013 /* #NOAPP */
1014 0366 80E0 ldi r24,lo8(0)
1015 0368 90E0 ldi r25,hi8(0)
1016 .L65:
1017 /* epilogue: frame size=0 */
1018 036a DF91 pop r29
1019 036c CF91 pop r28
1020 036e 0895 ret
1021 /* epilogue end (size=3) */
1022 /* function OSSemQuery size 53 (48) */
1029 .Lscope6:
1034 .global OSSemSet
1036 OSSemSet:
542:../OSsrc/os_sem.c **** }
543:../OSsrc/os_sem.c **** #endif /* OS_SEM_QUERY_EN
544:../OSsrc/os_sem.c ****
545:../OSsrc/os_sem.c **** /*$PAGE*/
546:../OSsrc/os_sem.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -