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

📄 ucos_ii.ls

📁 ucos在所有cpu下的移植范例
💻 LS
📖 第 1 页 / 共 5 页
字号:
2996  024f e6ea0008      	ldab	_OSUnMapTbl,y
2997  0253 7b0a1f        	stab	L736_OSIntExitY
2998                     ; 415         OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
3000                     ;***** ldab L736_OSIntExitY ***** L1
3001                     ;***** clra  ***** C0
3002  0256 b746          	tfr	d,y
3003  0258 e6ea0aae      	ldab	_OSRdyTbl,y
3004                     ;***** clra  ***** C0
3005  025c b746          	tfr	d,y
3006  025e f60a1f        	ldab	L736_OSIntExitY
3007  0261 58            	lslb	
3008  0262 58            	lslb	
3009  0263 58            	lslb	
3010  0264 ebea0008      	addb	_OSUnMapTbl,y
3011  0268 7b0ab7        	stab	_OSPrioHighRdy
3012                     ; 416         if (OSPrioHighRdy != OSPrioCur) {        /* No context switch if current task is highest ready */
3014                     ;***** ldab _OSPrioHighRdy ***** L1
3015  026b f10ab8        	cmpb	_OSPrioCur
3016  026e 2720          	beq	L3711
3017                     ; 417             OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];
3019                     ;***** ldab _OSPrioHighRdy ***** L1
3020                     ;***** clra  ***** C0
3021  0270 59            	lsld	
3022  0271 b746          	tfr	d,y
3023  0273 ecea0a24      	ldd	_OSTCBPrioTbl,y
3024  0277 7c0aa6        	std	_OSTCBHighRdy
3025                     ; 418             OSCtxSwCtr++;                        /* Keep track of the number of context switches       */
3027  027a fc0b59        	ldd	_OSCtxSwCtr+2
3028  027d c30001        	addd	#1
3029  0280 7c0b59        	std	_OSCtxSwCtr+2
3030  0283 2408          	bcc	L02
3031  0285 720b58        	inc	_OSCtxSwCtr+1
3032  0288 2603          	bne	L02
3033  028a 720b57        	inc	_OSCtxSwCtr
3034  028d               L02:
3035                     ; 419             OSIntCtxSw();                        /* Perform interrupt level context switch             */
3037  028d 160000        	jsr	_OSIntCtxSw
3039  0290               L3711:
3040                     ; 422     OS_EXIT_CRITICAL();
3042  0290 10ef          	cli	
3043                     ; 423 }
3046  0292 3d            	rts	
3086                     ; 442 void OSSched (void)
3086                     ; 443 {
3087                     	switch	.text
3088  0293               _OSSched:
3090  0293 37            	pshb	
3091       00000001      OFST:	set	1
3094                     ; 447     OS_ENTER_CRITICAL();
3096  0294 1410          	sei	
3097                     ; 448     if ((OSLockNesting | OSIntNesting) == 0) {   /* Task scheduling must be enabled and not ISR level  */
3099  0296 f60ab9        	ldab	_OSLockNesting
3100  0299 fa0aba        	orab	_OSIntNesting
3101  029c 2643          	bne	L1121
3102                     ; 449         y             = OSUnMapTbl[OSRdyGrp];    /* Get pointer to highest priority task ready to run  */
3104  029e f60ab6        	ldab	_OSRdyGrp
3105  02a1 87            	clra	
3106  02a2 b746          	tfr	d,y
3107  02a4 e6ea0008      	ldab	_OSUnMapTbl,y
3108  02a8 6b80          	stab	OFST-1,s
3109                     ; 450         OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
3111                     ;***** ldab OFST-1,s ***** L1
3112                     ;***** clra  ***** C0
3113  02aa b746          	tfr	d,y
3114  02ac e6ea0aae      	ldab	_OSRdyTbl,y
3115                     ;***** clra  ***** C0
3116  02b0 b746          	tfr	d,y
3117  02b2 e680          	ldab	OFST-1,s
3118  02b4 58            	lslb	
3119  02b5 58            	lslb	
3120  02b6 58            	lslb	
3121  02b7 ebea0008      	addb	_OSUnMapTbl,y
3122  02bb 7b0ab7        	stab	_OSPrioHighRdy
3123                     ; 451         if (OSPrioHighRdy != OSPrioCur) {         /* No context switch if current task is highest ready */
3125                     ;***** ldab _OSPrioHighRdy ***** L1
3126  02be f10ab8        	cmpb	_OSPrioCur
3127  02c1 271e          	beq	L1121
3128                     ; 452             OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
3130                     ;***** ldab _OSPrioHighRdy ***** L1
3131                     ;***** clra  ***** C0
3132  02c3 59            	lsld	
3133  02c4 b746          	tfr	d,y
3134  02c6 ecea0a24      	ldd	_OSTCBPrioTbl,y
3135  02ca 7c0aa6        	std	_OSTCBHighRdy
3136                     ; 453             OSCtxSwCtr++;                        /* Increment context switch counter                   */
3138  02cd fc0b59        	ldd	_OSCtxSwCtr+2
3139  02d0 c30001        	addd	#1
3140  02d3 7c0b59        	std	_OSCtxSwCtr+2
3141  02d6 2408          	bcc	L42
3142  02d8 720b58        	inc	_OSCtxSwCtr+1
3143  02db 2603          	bne	L42
3144  02dd 720b57        	inc	_OSCtxSwCtr
3145  02e0               L42:
3146                     ; 454             OS_TASK_SW();                        /* Perform a context switch                           */
3148  02e0 3f            	swi	
3149  02e1               L1121:
3150                     ; 457     OS_EXIT_CRITICAL();
3152  02e1 10ef          	cli	
3153                     ; 458 }
3156  02e3 1b81          	leas	1,s
3157  02e5 3d            	rts	
3179                     ; 476 void OSSchedLock (void)
3179                     ; 477 {
3180                     	switch	.text
3181  02e6               _OSSchedLock:
3185                     ; 478     if (OSRunning == TRUE) {                     /* Make sure multitasking is running                  */
3187  02e6 f60aad        	ldab	_OSRunning
3188                     ;***** cmpb #1 ***** C6
3189                     ;***** bne L3221 ***** C6
3190  02e9 042107        	dbne	b,L3221
3191                     ; 479         OS_ENTER_CRITICAL();
3193  02ec 1410          	sei	
3194                     ; 480         OSLockNesting++;                         /* Increment lock nesting level                       */
3196  02ee 720ab9        	inc	_OSLockNesting
3197                     ; 481         OS_EXIT_CRITICAL();
3199  02f1 10ef          	cli	
3200  02f3               L3221:
3201                     ; 483 }
3204  02f3 3d            	rts	
3229                     ; 500 void OSSchedUnlock (void)
3229                     ; 501 {
3230                     	switch	.text
3231  02f4               _OSSchedUnlock:
3235                     ; 502     if (OSRunning == TRUE) {                           /* Make sure multitasking is running            */
3237  02f4 f60aad        	ldab	_OSRunning
3238                     ;***** cmpb #1 ***** C6
3239                     ;***** bne L3321 ***** C6
3240  02f7 042119        	dbne	b,L3321
3241                     ; 503         OS_ENTER_CRITICAL();
3243  02fa 1410          	sei	
3244                     ; 504         if (OSLockNesting > 0) {                       /* Do not decrement if already 0                */
3246  02fc f60ab9        	ldab	_OSLockNesting
3247  02ff 2710          	beq	L7321
3248                     ; 505             OSLockNesting--;                           /* Decrement lock nesting level                 */
3250  0301 730ab9        	dec	_OSLockNesting
3251                     ; 506             if ((OSLockNesting | OSIntNesting) == 0) { /* See if scheduling re-enabled and not an ISR  */
3253  0304 f60ab9        	ldab	_OSLockNesting
3254  0307 fa0aba        	orab	_OSIntNesting
3255  030a 2605          	bne	L7321
3256                     ; 507                 OS_EXIT_CRITICAL();
3258  030c 10ef          	cli	
3259                     ; 508                 OSSched();                             /* See if a higher priority task is ready       */
3261  030e 0783          	jsr	_OSSched
3264                     ;***** bra L3321 ***** B1
3266  0310 3d            	rts	
3267  0311               L7321:
3268                     ; 510                 OS_EXIT_CRITICAL();
3270                     ;***** cli  ***** F0
3271                     ;***** jbr L5321 ***** B4
3272                     ; 513             OS_EXIT_CRITICAL();
3274  0311 10ef          	cli	
3275  0313               L3321:
3276                     ; 516 }
3279  0313 3d            	rts	
3325                     ; 536 void OSStart (void)
3325                     ; 537 {
3326                     	switch	.text
3327  0314               _OSStart:
3329  0314 3b            	pshd	
3330       00000002      OFST:	set	2
3333                     ; 542     if (OSRunning == FALSE) {
3335  0315 f60aad        	ldab	_OSRunning
3336  0318 2637          	bne	L1621
3337                     ; 543         y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task priority number   */
3339  031a f60ab6        	ldab	_OSRdyGrp
3340  031d 87            	clra	
3341  031e b746          	tfr	d,y
3342  0320 e6ea0008      	ldab	_OSUnMapTbl,y
3343  0324 6b80          	stab	OFST-2,s
3344                     ; 544         x             = OSUnMapTbl[OSRdyTbl[y]];
3346                     ;***** ldab OFST-2,s ***** L1
3347                     ;***** clra  ***** C0
3348  0326 b746          	tfr	d,y
3349  0328 e6ea0aae      	ldab	_OSRdyTbl,y
3350                     ;***** clra  ***** C0
3351  032c b746          	tfr	d,y
3352  032e e6ea0008      	ldab	_OSUnMapTbl,y
3353  0332 6b81          	stab	OFST-1,s
3354                     ; 545         OSPrioHighRdy = (INT8U)((y << 3) + x);
3356  0334 e680          	ldab	OFST-2,s
3357  0336 58            	lslb	
3358  0337 58            	lslb	
3359  0338 58            	lslb	
3360  0339 eb81          	addb	OFST-1,s
3361  033b 7b0ab7        	stab	_OSPrioHighRdy
3362                     ; 546         OSPrioCur     = OSPrioHighRdy;
3364                     ;***** ldab _OSPrioHighRdy ***** L1
3365  033e 7b0ab8        	stab	_OSPrioCur
3366                     ; 547         OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
3368                     ;***** ldab _OSPrioHighRdy ***** L1
3369                     ;***** clra  ***** C0
3370  0341 59            	lsld	
3371  0342 b746          	tfr	d,y
3372  0344 ecea0a24      	ldd	_OSTCBPrioTbl,y
3373  0348 7c0aa6        	std	_OSTCBHighRdy
3374                     ; 548         OSTCBCur      = OSTCBHighRdy;
3376                     ;***** ldd _OSTCBHighRdy ***** L1
3377  034b 7c0aaa        	std	_OSTCBCur
3378                     ; 549         OSStartHighRdy();                            /* Execute target specific code to start task     */
3380  034e 160000        	jsr	_OSStartHighRdy
3382  0351               L1621:
3383                     ; 551 }
3386  0351 31            	puly	
3387  0352 3d            	rts	
3412                     ; 574 void OSStatInit (void)
3412                     ; 575 {
3413                     	switch	.text
3414  0353               _OSStatInit:
3418                     ; 576     OSTimeDly(2);                                /* Synchronize with clock tick                        */
3420  0353 cc0002        	ldd	#2
3421  0356 1611fc        	jsr	_OSTimeDly
3423                     ; 577     OS_ENTER_CRITICAL();
3425  0359 1410          	sei	
3426                     ; 578     OSIdleCtr    = 0L;                           /* Clear idle counter                                 */
3428                     ;***** ldd #0 ***** L0
3429  035b 87            	clra	
3430  035c c7            	clrb	
3431  035d 7c0ac7        	std	_OSIdleCtr+2
3432                     ;***** ldd #0 ***** L0
3433                     ;***** clra  ***** C0
3434                     ;***** clrb  ***** C0
3435  0360 7c0ac5        	std	_OSIdleCtr
3436                     ; 579     OS_EXIT_CRITICAL();
3438  0363 10ef          	cli	
3439                     ; 580     OSTimeDly(OS_TICKS_PER_SEC);                 /* Determine MAX. idle counter value for 1 second     */
3441                     ;***** ldd #20 ***** L0
3442  0365 c614          	ldab	#20
3443  0367 1611fc        	jsr	_OSTimeDly
3445                     ; 581     OS_ENTER_CRITICAL();
3447  036a 1410          	sei	
3448                     ; 582     OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1 second       */
3450                     ;***** ldd _OSIdleCtr+2 ***** M2
3451                     ;***** std _OSIdleCtrMax+2 ***** M2
3452  036c 18040ac70ac2  	movw	_OSIdleCtr+2,_OSIdleCtrMax+2
3453                     ;***** ldd _OSIdleCtr ***** M2
3454                     ;***** std _OSIdleCtrMax ***** M2
3455  0372 18040ac50ac0  	movw	_OSIdleCtr,_OSIdleCtrMax
3456                     ; 583     OSStatRdy    = TRUE;
3458  0378 c601          	ldab	#1
3459  037a 7b0abb        	stab	_OSStatRdy
3460                     ; 584     OS_EXIT_CRITICAL();
3462  037d 10ef          	cli	
3463                     ; 585 }
3466  037f 3d            	rts	
3498                     ; 601 void OSTaskIdle (void *pdata)
3498                     ; 602 {
3499                     	switch	.text
3500  0380               _OSTaskIdle:
3502  0380 3b            	pshd	
3503       00000000      OFST:	set	0
3506                     ; 603     pdata = pdata;                               /* Prevent compiler warning for not using 'pdata'     */
3508                     ;***** ldd OFST+0,s ***** L2
3509  0381 6c80          	std	OFST+0,s
3510  0383 fc0ac7        	ldd	_OSIdleCtr+2
3511  0386               L5031:
3512                     ; 605         OS_ENTER_CRITICAL();
3514  0386 1410          	sei	
3515                     ; 606         OSIdleCtr++;
3517                     ;***** ldd _OSIdleCtr+2 ***** M4
3518  0388 c30001        	addd	#1
3519  038b 7c0ac7        	std	_OSIdleCtr+2
3520  038e 2408          	bcc	L04
3521  0390 720ac6        	inc	_OSIdleCtr+1
3522  0393 2603          	bne	L04
3523  0395 720ac5        	inc	_OSIdleCtr
3524  0398               L04:
3525                     ; 607         OS_EXIT_CRITICAL();

⌨️ 快捷键说明

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