os_sem.lst

来自「atmega单片机用的ucos系统 占用内存适中 是atmega单片机合适的操作」· LST 代码 · 共 1,188 行 · 第 1/4 页

LST
1,188
字号
 275:OSsrc/os_sem.c ****         *err = OS_ERR_PEND_ISR;                       /* ... can't PEND from an ISR                
 487               	.LM67:
 488 0186 82E0      		ldi r24,lo8(2)
 489 0188 3FC0      		rjmp .L35
 490               	.L29:
 276:OSsrc/os_sem.c ****         return;
 277:OSsrc/os_sem.c ****     }
 278:OSsrc/os_sem.c **** #if OS_ARG_CHK_EN > 0
 279:OSsrc/os_sem.c ****     if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                         
 492               	.LM68:
 493 018a 2097      		sbiw r28,0
 494 018c 11F4      		brne .L30
 280:OSsrc/os_sem.c ****         *err = OS_ERR_PEVENT_NULL;
 496               	.LM69:
 497 018e 84E0      		ldi r24,lo8(4)
 498 0190 3BC0      		rjmp .L35
 499               	.L30:
 281:OSsrc/os_sem.c ****         return;
 282:OSsrc/os_sem.c ****     }
 283:OSsrc/os_sem.c **** #endif
 284:OSsrc/os_sem.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                 
 501               	.LM70:
 502 0192 8881      		ld r24,Y
 503 0194 8330      		cpi r24,lo8(3)
 504 0196 11F0      		breq .L31
 285:OSsrc/os_sem.c ****         *err = OS_ERR_EVENT_TYPE;
 506               	.LM71:
 507 0198 81E0      		ldi r24,lo8(1)
 508 019a 36C0      		rjmp .L35
 509               	.L31:
 286:OSsrc/os_sem.c ****         return;
 287:OSsrc/os_sem.c ****     }
 288:OSsrc/os_sem.c ****     OS_ENTER_CRITICAL();
 511               	.LM72:
 512               	/* #APP */
 513 019c 0FB6      		in __tmp_reg__,__SREG__
 514 019e F894      		cli
 515 01a0 0F92      		push __tmp_reg__
 289:OSsrc/os_sem.c ****     if (pevent->OSEventCnt > 0) {                     /* If sem. is positive, resource available ..
 517               	.LM73:
 518               	/* #NOAPP */
 519 01a2 8A81      		ldd r24,Y+2
 520 01a4 9B81      		ldd r25,Y+3
 521 01a6 0097      		sbiw r24,0
 522 01a8 31F0      		breq .L32
 290:OSsrc/os_sem.c ****         pevent->OSEventCnt--;                         /* ... decrement semaphore only if positive. 
 524               	.LM74:
 525 01aa 0197      		sbiw r24,1
 526 01ac 8A83      		std Y+2,r24
 527 01ae 9B83      		std Y+3,r25
 291:OSsrc/os_sem.c ****         OS_EXIT_CRITICAL();
 529               	.LM75:
 530               	/* #APP */
 531 01b0 0F90      		pop __tmp_reg__
 532 01b2 0FBE      		out __SREG__,__tmp_reg__
 533               	/* #NOAPP */
 534 01b4 30C0      		rjmp .L34
 535               	.L32:
 292:OSsrc/os_sem.c ****         *err = OS_NO_ERR;
 293:OSsrc/os_sem.c ****         return;
 294:OSsrc/os_sem.c ****     }
 295:OSsrc/os_sem.c ****                                                       /* Otherwise, must wait until event occurs   
 296:OSsrc/os_sem.c ****     OSTCBCur->OSTCBStat   |= OS_STAT_SEM;             /* Resource not available, pend on semaphore 
 537               	.LM76:
 538 01b6 E091 0000 		lds r30,OSTCBCur
 539 01ba F091 0000 		lds r31,(OSTCBCur)+1
 540 01be 8485      		ldd r24,Z+12
 541 01c0 8160      		ori r24,lo8(1)
 542 01c2 8487      		std Z+12,r24
 297:OSsrc/os_sem.c ****     OSTCBCur->OSTCBPendTO  = FALSE;
 544               	.LM77:
 545 01c4 E091 0000 		lds r30,OSTCBCur
 546 01c8 F091 0000 		lds r31,(OSTCBCur)+1
 547 01cc 1586      		std Z+13,__zero_reg__
 298:OSsrc/os_sem.c ****     OSTCBCur->OSTCBDly     = timeout;                 /* Store pend timeout in TCB                 
 549               	.LM78:
 550 01ce E091 0000 		lds r30,OSTCBCur
 551 01d2 F091 0000 		lds r31,(OSTCBCur)+1
 552 01d6 6287      		std Z+10,r22
 553 01d8 7387      		std Z+11,r23
 299:OSsrc/os_sem.c ****     OS_EventTaskWait(pevent);                         /* Suspend task until event or timeout occurs
 555               	.LM79:
 556 01da CE01      		movw r24,r28
 557 01dc 0E94 0000 		call OS_EventTaskWait
 300:OSsrc/os_sem.c ****     OS_EXIT_CRITICAL();
 559               	.LM80:
 560               	/* #APP */
 561 01e0 0F90      		pop __tmp_reg__
 562 01e2 0FBE      		out __SREG__,__tmp_reg__
 301:OSsrc/os_sem.c ****     OS_Sched();                                       /* Find next highest priority task ready     
 564               	.LM81:
 565               	/* #NOAPP */
 566 01e4 0E94 0000 		call OS_Sched
 302:OSsrc/os_sem.c ****     OS_ENTER_CRITICAL();
 568               	.LM82:
 569               	/* #APP */
 570 01e8 0FB6      		in __tmp_reg__,__SREG__
 571 01ea F894      		cli
 572 01ec 0F92      		push __tmp_reg__
 303:OSsrc/os_sem.c ****     if (OSTCBCur->OSTCBPendTO == TRUE) {              /* See if we timedout                        
 574               	.LM83:
 575               	/* #NOAPP */
 576 01ee E091 0000 		lds r30,OSTCBCur
 577 01f2 F091 0000 		lds r31,(OSTCBCur)+1
 578 01f6 8585      		ldd r24,Z+13
 579 01f8 8130      		cpi r24,lo8(1)
 580 01fa 49F4      		brne .L33
 304:OSsrc/os_sem.c ****         OS_EventTO(pevent);
 582               	.LM84:
 583 01fc CE01      		movw r24,r28
 584 01fe 0E94 0000 		call OS_EventTO
 305:OSsrc/os_sem.c ****         OS_EXIT_CRITICAL();
 586               	.LM85:
 587               	/* #APP */
 588 0202 0F90      		pop __tmp_reg__
 589 0204 0FBE      		out __SREG__,__tmp_reg__
 306:OSsrc/os_sem.c ****         *err = OS_TIMEOUT;                            /* Indicate that didn't get event within TO  
 591               	.LM86:
 592               	/* #NOAPP */
 593 0206 8AE0      		ldi r24,lo8(10)
 594               	.L35:
 595 0208 F801      		movw r30,r16
 596 020a 8083      		st Z,r24
 307:OSsrc/os_sem.c ****         return;
 598               	.LM87:
 599 020c 06C0      		rjmp .L28
 600               	.L33:
 308:OSsrc/os_sem.c ****     }
 309:OSsrc/os_sem.c ****     OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
 602               	.LM88:
 603 020e 1682      		std Z+6,__zero_reg__
 604 0210 1782      		std Z+7,__zero_reg__
 310:OSsrc/os_sem.c ****     OS_EXIT_CRITICAL();
 606               	.LM89:
 607               	/* #APP */
 608 0212 0F90      		pop __tmp_reg__
 609 0214 0FBE      		out __SREG__,__tmp_reg__
 610               	/* #NOAPP */
 611               	.L34:
 311:OSsrc/os_sem.c ****     *err = OS_NO_ERR;
 613               	.LM90:
 614 0216 F801      		movw r30,r16
 615 0218 1082      		st Z,__zero_reg__
 616               	.L28:
 617               	/* epilogue: frame size=0 */
 618 021a DF91      		pop r29
 619 021c CF91      		pop r28
 620 021e 1F91      		pop r17
 621 0220 0F91      		pop r16
 622 0222 0895      		ret
 623               	/* epilogue end (size=5) */
 624               	/* function OSSemPend size 103 (94) */
 626               	.Lscope3:
 629               	.global	OSSemPost
 631               	OSSemPost:
 312:OSsrc/os_sem.c **** }
 313:OSsrc/os_sem.c **** /*$PAGE*/
 314:OSsrc/os_sem.c **** /*
 315:OSsrc/os_sem.c **** ***************************************************************************************************
 316:OSsrc/os_sem.c **** *                                         POST TO A SEMAPHORE
 317:OSsrc/os_sem.c **** *
 318:OSsrc/os_sem.c **** * Description: This function signals a semaphore
 319:OSsrc/os_sem.c **** *
 320:OSsrc/os_sem.c **** * Arguments  : pevent        is a pointer to the event control block associated with the desired
 321:OSsrc/os_sem.c **** *                            semaphore.
 322:OSsrc/os_sem.c **** *
 323:OSsrc/os_sem.c **** * Returns    : OS_NO_ERR           The call was successful and the semaphore was signaled.
 324:OSsrc/os_sem.c **** *              OS_SEM_OVF          If the semaphore count exceeded its limit.  In other words, you 
 325:OSsrc/os_sem.c **** *                                  signalled the semaphore more often than you waited on it with ei
 326:OSsrc/os_sem.c **** *                                  OSSemAccept() or OSSemPend().
 327:OSsrc/os_sem.c **** *              OS_ERR_EVENT_TYPE   If you didn't pass a pointer to a semaphore
 328:OSsrc/os_sem.c **** *              OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer.
 329:OSsrc/os_sem.c **** ***************************************************************************************************
 330:OSsrc/os_sem.c **** */
 331:OSsrc/os_sem.c **** 
 332:OSsrc/os_sem.c **** INT8U  OSSemPost (OS_EVENT *pevent)
 333:OSsrc/os_sem.c **** {
 633               	.LM91:
 634               	/* prologue: frame size=0 */
 635               	/* prologue end (size=0) */
 636 0224 FC01      		movw r30,r24
 334:OSsrc/os_sem.c **** #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status regis
 335:OSsrc/os_sem.c ****     OS_CPU_SR  cpu_sr;                               
 336:OSsrc/os_sem.c **** 
 337:OSsrc/os_sem.c **** 
 338:OSsrc/os_sem.c **** 
 339:OSsrc/os_sem.c ****     cpu_sr = 0;                                            /* Prevent compiler warning             
 340:OSsrc/os_sem.c **** #endif    
 341:OSsrc/os_sem.c **** #if OS_ARG_CHK_EN > 0
 342:OSsrc/os_sem.c ****     if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                    
 638               	.LM92:
 639 0226 892B      		or r24,r25
 640 0228 19F4      		brne .L37
 343:OSsrc/os_sem.c ****         return (OS_ERR_PEVENT_NULL);
 642               	.LM93:
 643 022a 84E0      		ldi r24,lo8(4)
 644 022c 90E0      		ldi r25,hi8(4)
 645 022e 0895      		ret
 646               	.L37:
 344:OSsrc/os_sem.c ****     }
 345:OSsrc/os_sem.c **** #endif
 346:OSsrc/os_sem.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type            
 648               	.LM94:
 649 0230 8081      		ld r24,Z
 650 0232 8330      		cpi r24,lo8(3)
 651 0234 19F0      		breq .L38
 347:OSsrc/os_sem.c ****         return (OS_ERR_EVENT_TYPE);
 653               	.LM95:
 654 0236 81E0      		ldi r24,lo8(1)
 655 0238 90E0      		ldi r25,hi8(1)
 656 023a 0895      		ret
 657               	.L38:
 348:OSsrc/os_sem.c ****     }
 349:OSsrc/os_sem.c ****     OS_ENTER_CRITICAL();
 659               	.LM96:
 660               	/* #APP */
 661 023c 0FB6      		in __tmp_reg__,__SREG__
 662 023e F894      		cli
 663 0240 0F92      		push __tmp_reg__
 350:OSsrc/os_sem.c ****     if (pevent->OSEventGrp != 0x00) {                          /* See if any task waiting for semap
 665               	.LM97:
 666               	/* #NOAPP */
 667 0242 8181      		ldd r24,Z+1
 668 0244 8823      		tst r24
 669 0246 59F0      		breq .L39
 351:OSsrc/os_sem.c ****         (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM); /* Ready HPT waiting on event       
 671               	.LM98:
 672 0248 41E0      		ldi r20,lo8(1)
 673 024a 60E0      		ldi r22,lo8(0)
 674 024c 70E0      		ldi r23,hi8(0)
 675 024e CF01      		movw r24,r30
 676 0250 0E94 0000 		call OS_EventTaskRdy
 352:OSsrc/os_sem.c ****         OS_EXIT_CRITICAL();
 678               	.LM99:
 679               	/* #APP */
 680 0254 0F90      		pop __tmp_reg__
 681 0256 0FBE      		out __SREG__,__tmp_reg__
 353:OSsrc/os_sem.c ****         OS_Sched();                                            /* Find HPT ready to run            
 683               	.LM100:
 684               	/* #NOAPP */
 685 0258 0E94 0000 		call OS_Sched
 686 025c 0BC0      		rjmp .L41
 687               	.L39:
 354:OSsrc/os_sem.c ****         return (OS_NO_ERR);
 355:OSsrc/os_sem.c ****     }
 356:OSsrc/os_sem.c ****     if (pevent->OSEventCnt < 65535u) {                /* Make sure semaphore will not overflow     
 689               	.LM101:
 690 025e 8281      		ldd r24,Z+2
 691 0260 9381      		ldd r25,Z+3
 692 0262 2FEF      		ldi r18,hi8(-1)
 693 0264 8F3F      		cpi r24,lo8(-1)
 694 0266 9207      		cpc r25,r18
 695 0268 41F0      		breq .L40
 357:OSsrc/os_sem.c ****         pevent->OSEventCnt++;                         /* Increment semaphore count to register even
 697               	.LM102:
 698 026a 0196      		adiw r24,1
 699 026c 8283      		std Z+2,r24
 700 026e 9383      		std Z+3,r25
 358:OSsrc/os_sem.c ****         OS_EXIT_CRITICAL();
 702               	.LM103:
 703               	/* #APP */
 704 0270 0F90      		pop __tmp_reg__
 705 0272 0FBE      		out __SREG__,__tmp_reg__
 706               	/* #NOAPP */
 707               	.L41:
 359:OSsrc/os_sem.c ****         return (OS_NO_ERR);
 709               	.LM104:
 710 0274 80E0      		ldi r24,lo8(0)
 711 0276 90E0      		ldi r25,hi8(0)
 712 0278 0895      		ret
 713               	.L40:
 360:OSsrc/os_sem.c ****     }
 361:OSsrc/os_sem.c ****     OS_EXIT_CRITICAL();                               /* Semaphore value has reached its maximum   
 715               	.LM105:
 716               	/* #APP */
 717 027a 0F90      		pop __tmp_reg__
 718 027c 0FBE      		out __SREG__,__tmp_reg__
 362:OSsrc/os_sem.c ****     return (OS_SEM_OVF);
 720               	.LM106:
 721               	/* #NOAPP */
 722 027e 82E3      		ldi r24,lo8(50)
 723 0280 90E0      		ldi r25,hi8(50)
 363:OSsrc/os_sem.c **** }
 725               	.LM107:
 726 0282 0895      		ret
 727               	/* epilogue: frame size=0 */
 728 0284 0895      		ret
 729               	/* epilogue end (size=1) */
 730               	/* function OSSemPost size 58 (57) */
 732               	.Lscope4:
 736               	.global	OSSemQuery
 738               	OSSemQuery:
 364:OSsrc/os_sem.c **** /*$PAGE*/
 365:OSsrc/os_sem.c **** /*
 366:OSsrc/os_sem.c **** ***************************************************************************************************
 367:OSsrc/os_sem.c **** *                                          QUERY A SEMAPHORE
 368:OSsrc/os_sem.c **** *

⌨️ 快捷键说明

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