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

📄 os_sem.lst

📁 称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可能已有人上传类似的了
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -