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

📄 os_core.lst

📁 AVR平台下的ucos版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
 288:os/source/os_core.c **** * Notes      : 1) You MUST invoke OSIntEnter() and OSIntExit() in pair.  In other words, for every 
 289:os/source/os_core.c **** *                 to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() a
 290:os/source/os_core.c **** *                 end of the ISR.
 291:os/source/os_core.c **** *              2) Rescheduling is prevented when the scheduler is locked (see OSSchedLock())
 292:os/source/os_core.c **** ***************************************************************************************************
 293:os/source/os_core.c **** */
 294:os/source/os_core.c **** 
 295:os/source/os_core.c **** void  OSIntExit (void)
 296:os/source/os_core.c **** {
 649               	.LM42:
 650               	/* prologue: frame size=0 */
 651               	/* prologue end (size=0) */
 297:os/source/os_core.c **** #if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register 
 298:os/source/os_core.c ****     OS_CPU_SR  cpu_sr;
 299:os/source/os_core.c **** #endif
 300:os/source/os_core.c ****     
 301:os/source/os_core.c ****     
 302:os/source/os_core.c ****     OS_ENTER_CRITICAL();
 653               	.LM43:
 654               	/* #APP */
 655 0152 F894      		cli
 303:os/source/os_core.c ****     if (OSIntNesting > 0) {                            /* Prevent OSIntNesting from wrapping       
 657               	.LM44:
 658               	/* #NOAPP */
 659 0154 8091 0000 		lds r24,OSIntNesting
 660 0158 8823      		tst r24
 661 015a 19F0      		breq .L37
 304:os/source/os_core.c ****         OSIntNesting--;
 663               	.LM45:
 664 015c 8150      		subi r24,lo8(-(-1))
 665 015e 8093 0000 		sts OSIntNesting,r24
 666               	.L37:
 305:os/source/os_core.c ****     }
 306:os/source/os_core.c ****     if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Reschedule only if all ISRs complete ... 
 668               	.LM46:
 669 0162 8091 0000 		lds r24,OSIntNesting
 670 0166 8823      		tst r24
 671 0168 09F0      		breq .+2
 672 016a 44C0      		rjmp .L38
 673 016c 8091 0000 		lds r24,OSLockNesting
 674 0170 8823      		tst r24
 675 0172 09F0      		breq .+2
 676 0174 3FC0      		rjmp .L38
 307:os/source/os_core.c ****         OSIntExitY    = OSUnMapTbl[OSRdyGrp];          /* ... and not locked.                      
 678               	.LM47:
 679 0176 8091 0000 		lds r24,OSRdyGrp
 680 017a E82F      		mov r30,r24
 681 017c FF27      		clr r31
 682 017e E050      		subi r30,lo8(-(OSUnMapTbl))
 683 0180 F040      		sbci r31,hi8(-(OSUnMapTbl))
 684 0182 8081      		ld r24,Z
 685 0184 8093 0000 		sts OSIntExitY,r24
 308:os/source/os_core.c ****         OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
 687               	.LM48:
 688 0188 9927      		clr r25
 689 018a FC01      		movw r30,r24
 690 018c E050      		subi r30,lo8(-(OSRdyTbl))
 691 018e F040      		sbci r31,hi8(-(OSRdyTbl))
 692 0190 2081      		ld r18,Z
 693 0192 E22F      		mov r30,r18
 694 0194 FF27      		clr r31
 695 0196 E050      		subi r30,lo8(-(OSUnMapTbl))
 696 0198 F040      		sbci r31,hi8(-(OSUnMapTbl))
 697 019a E081      		ld r30,Z
 698 019c 23E0      		ldi r18,3
 699 019e 880F      	1:	lsl r24
 700 01a0 991F      		rol r25
 701 01a2 2A95      		dec r18
 702 01a4 E1F7      		brne 1b
 703 01a6 E80F      		add r30,r24
 704 01a8 E093 0000 		sts OSPrioHighRdy,r30
 309:os/source/os_core.c ****         if (OSPrioHighRdy != OSPrioCur) {              /* No Ctx Sw if current task is highest rdy 
 706               	.LM49:
 707 01ac 8091 0000 		lds r24,OSPrioCur
 708 01b0 E817      		cp r30,r24
 709 01b2 01F1      		breq .L38
 310:os/source/os_core.c ****             OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];
 711               	.LM50:
 712 01b4 FF27      		clr r31
 713 01b6 EE0F      		add r30,r30
 714 01b8 FF1F      		adc r31,r31
 715 01ba E050      		subi r30,lo8(-(OSTCBPrioTbl))
 716 01bc F040      		sbci r31,hi8(-(OSTCBPrioTbl))
 717 01be 8081      		ld r24,Z
 718 01c0 9181      		ldd r25,Z+1
 719 01c2 9093 0000 		sts (OSTCBHighRdy)+1,r25
 720 01c6 8093 0000 		sts OSTCBHighRdy,r24
 311:os/source/os_core.c ****             OSCtxSwCtr++;                              /* Keep track of the number of context switc
 722               	.LM51:
 723 01ca 8091 0000 		lds r24,OSCtxSwCtr
 724 01ce 9091 0000 		lds r25,(OSCtxSwCtr)+1
 725 01d2 A091 0000 		lds r26,(OSCtxSwCtr)+2
 726 01d6 B091 0000 		lds r27,(OSCtxSwCtr)+3
 727 01da 0196      		adiw r24,1
 728 01dc A11D      		adc r26,__zero_reg__
 729 01de B11D      		adc r27,__zero_reg__
 730 01e0 8093 0000 		sts OSCtxSwCtr,r24
 731 01e4 9093 0000 		sts (OSCtxSwCtr)+1,r25
 732 01e8 A093 0000 		sts (OSCtxSwCtr)+2,r26
 733 01ec B093 0000 		sts (OSCtxSwCtr)+3,r27
 312:os/source/os_core.c ****             OSIntCtxSw();                              /* Perform interrupt level context switch   
 735               	.LM52:
 736 01f0 0E94 0000 		call OSIntCtxSw
 737               	.L38:
 313:os/source/os_core.c ****         }
 314:os/source/os_core.c ****     }
 315:os/source/os_core.c ****     OS_EXIT_CRITICAL();
 739               	.LM53:
 740               	/* #APP */
 741 01f4 7894      		sei
 742               	/* #NOAPP */
 743               	/* epilogue: frame size=0 */
 744 01f6 0895      		ret
 745               	/* epilogue end (size=1) */
 746               	/* function OSIntExit size 84 (83) */
 748               	.Lscope2:
 750               	.global	OSStart
 752               	OSStart:
 316:os/source/os_core.c **** }
 317:os/source/os_core.c **** /*$PAGE*/
 318:os/source/os_core.c **** /*
 319:os/source/os_core.c **** ***************************************************************************************************
 320:os/source/os_core.c **** *                                          PREVENT SCHEDULING
 321:os/source/os_core.c **** *
 322:os/source/os_core.c **** * Description: This function is used to prevent rescheduling to take place.  This allows your appli
 323:os/source/os_core.c **** *              to prevent context switches until you are ready to permit context switching.
 324:os/source/os_core.c **** *
 325:os/source/os_core.c **** * Arguments  : none
 326:os/source/os_core.c **** *
 327:os/source/os_core.c **** * Returns    : none
 328:os/source/os_core.c **** *
 329:os/source/os_core.c **** * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other words, for e
 330:os/source/os_core.c **** *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
 331:os/source/os_core.c **** ***************************************************************************************************
 332:os/source/os_core.c **** */
 333:os/source/os_core.c **** 
 334:os/source/os_core.c **** #if OS_SCHED_LOCK_EN > 0
 335:os/source/os_core.c **** void  OSSchedLock (void)
 336:os/source/os_core.c **** {
 337:os/source/os_core.c **** #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register       
 338:os/source/os_core.c ****     OS_CPU_SR  cpu_sr;
 339:os/source/os_core.c **** #endif    
 340:os/source/os_core.c ****     
 341:os/source/os_core.c ****     
 342:os/source/os_core.c ****     if (OSRunning == TRUE) {                     /* Make sure multitasking is running              
 343:os/source/os_core.c ****         OS_ENTER_CRITICAL();
 344:os/source/os_core.c ****         if (OSLockNesting < 255) {               /* Prevent OSLockNesting from wrapping back to 0  
 345:os/source/os_core.c ****             OSLockNesting++;                     /* Increment lock nesting level                   
 346:os/source/os_core.c ****         }
 347:os/source/os_core.c ****         OS_EXIT_CRITICAL();
 348:os/source/os_core.c ****     }
 349:os/source/os_core.c **** }
 350:os/source/os_core.c **** #endif    
 351:os/source/os_core.c **** 
 352:os/source/os_core.c **** /*$PAGE*/
 353:os/source/os_core.c **** /*
 354:os/source/os_core.c **** ***************************************************************************************************
 355:os/source/os_core.c **** *                                          ENABLE SCHEDULING
 356:os/source/os_core.c **** *
 357:os/source/os_core.c **** * Description: This function is used to re-allow rescheduling.
 358:os/source/os_core.c **** *
 359:os/source/os_core.c **** * Arguments  : none
 360:os/source/os_core.c **** *
 361:os/source/os_core.c **** * Returns    : none
 362:os/source/os_core.c **** *
 363:os/source/os_core.c **** * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other words, for e
 364:os/source/os_core.c **** *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
 365:os/source/os_core.c **** ***************************************************************************************************
 366:os/source/os_core.c **** */
 367:os/source/os_core.c **** 
 368:os/source/os_core.c **** #if OS_SCHED_LOCK_EN > 0
 369:os/source/os_core.c **** void  OSSchedUnlock (void)
 370:os/source/os_core.c **** {
 371:os/source/os_core.c **** #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status regis
 372:os/source/os_core.c ****     OS_CPU_SR  cpu_sr;
 373:os/source/os_core.c **** #endif    
 374:os/source/os_core.c ****     
 375:os/source/os_core.c ****     
 376:os/source/os_core.c ****     if (OSRunning == TRUE) {                                   /* Make sure multitasking is running
 377:os/source/os_core.c ****         OS_ENTER_CRITICAL();
 378:os/source/os_core.c ****         if (OSLockNesting > 0) {                               /* Do not decrement if already 0    
 379:os/source/os_core.c ****             OSLockNesting--;                                   /* Decrement lock nesting level     
 380:os/source/os_core.c ****             if ((OSLockNesting == 0) && (OSIntNesting == 0)) { /* See if sched. enabled and not an 
 381:os/source/os_core.c ****                 OS_EXIT_CRITICAL();
 382:os/source/os_core.c ****                 OS_Sched();                                    /* See if a HPT is ready            
 383:os/source/os_core.c ****             } else {
 384:os/source/os_core.c ****                 OS_EXIT_CRITICAL();
 385:os/source/os_core.c ****             }
 386:os/source/os_core.c ****         } else {
 387:os/source/os_core.c ****             OS_EXIT_CRITICAL();
 388:os/source/os_core.c ****         }
 389:os/source/os_core.c ****     }
 390:os/source/os_core.c **** }
 391:os/source/os_core.c **** #endif    
 392:os/source/os_core.c **** 
 393:os/source/os_core.c **** /*$PAGE*/
 394:os/source/os_core.c **** /*
 395:os/source/os_core.c **** ***************************************************************************************************
 396:os/source/os_core.c **** *                                          START MULTITASKING
 397:os/source/os_core.c **** *
 398:os/source/os_core.c **** * Description: This function is used to start the multitasking process which lets uC/OS-II manages 
 399:os/source/os_core.c **** *              task that you have created.  Before you can call OSStart(), you MUST have called OSI
 400:os/source/os_core.c **** *              and you MUST have created at least one task.
 401:os/source/os_core.c **** *
 402:os/source/os_core.c **** * Arguments  : none
 403:os/source/os_core.c **** *
 404:os/source/os_core.c **** * Returns    : none
 405:os/source/os_core.c **** *
 406:os/source/os_core.c **** * Note       : OSStartHighRdy() MUST:
 407:os/source/os_core.c **** *                 a) Call OSTaskSwHook() then,
 408:os/source/os_core.c **** *                 b) Set OSRunning to TRUE.
 409:os/source/os_core.c **** ***************************************************************************************************
 410:os/source/os_core.c **** */
 411:os/source/os_core.c **** 
 412:os/source/os_core.c **** void  OSStart (void)
 413:os/source/os_core.c **** {
 754               	.LM54:
 755               	/* prologue: frame size=0 */
 756               	/* prologue end (size=0) */
 414:os/source/os_core.c ****     INT8U y;
 415:os/source/os_core.c ****     INT8U x;
 416:os/source/os_core.c **** 
 417:os/source/os_core.c **** 
 418:os/source/os_core.c ****     if (OSRunning == FALSE) {
 758               	.LM55:
 759 01f8 8091 0000 		lds r24,OSRunning
 760 01fc 8823      		tst r24
 761 01fe 69F5      		brne .L40
 419:os/source/os_core.c ****         y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task priority numbe
 763               	.LM56:
 764 0200 8091 0000 		lds r24,OSRdyGrp
 765 0204 E82F      		mov r30,r24
 766 0206 FF27      		clr r31
 767 0208 E050      		subi r30,lo8(-(OSUnMapTbl))
 768 020a F040      		sbci r31,hi8(-(OSUnMapTbl))
 769 020c 8081      		ld r24,Z
 420:os/source/os_core.c ****         x             = OSUnMapTbl[OSRdyTbl[y]];
 771               	.LM57:
 772 020e 9927      		clr r25
 773 0210 FC01      		movw r30,r24
 774 0212 E050      		subi r30,lo8(-(OSRdyTbl))
 775 0214 F040      		sbci r31,hi8(-(OSRdyTbl))
 776 0216 2081      		ld r18,Z
 777 0218 E22F      		mov r30,r18
 778 021a FF27      		clr r31
 779 021c E050      		subi r30,lo8(-(OSUnMapTbl))
 780 021e F040      		sbci r31,hi8(-(OSUnMapTbl))
 781 0220 2081      		ld r18,Z
 421:os/source/os_core.c ****         OSPrioHighRdy = (INT8U)((y << 3) + x);
 783               	.LM58:
 784 0222 33E0      		ldi r19,3
 785 0224 880F      	1:	lsl r24
 786 0226 991F      		rol r25

⌨️ 快捷键说明

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