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

📄 os-task-switch.lis

📁 ucos-ii-at90S-icc-avr
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 03E8           ; 
 03E8           ; /*init event structure*/
 03E8           ; void  OSEventInit(OS_EVENT *pevent)
 03E8           ; {
 03E8                   .dbline 388
 03E8           ;       INT8U i;
 03E8           ;       if(0==pevent)
 03E8 0030              cpi R16,0
 03EA 0107              cpc R16,R17
 03EC 09F4              brne L87
 03EE           X18:
 03EE                   .dbline 389
 03EE           ;               return;
 03EE 16C0              rjmp L86
 03F0           L87:
 03F0                   .dbline 390
 03F0           ;     for(i=0;i<OS_TASK_COUNT;i++)
 03F0 4427              clr R20
 03F2 0BC0              rjmp L92
 03F4           L89:
 03F4                   .dbline 391
 03F4 E42F              mov R30,R20
 03F6 FF27              clr R31
 03F8 EE0F              lsl R30
 03FA FF1F              rol R31
 03FC E00F              add R30,R16
 03FE F11F              adc R31,R17
 0400 2224              clr R2
 0402 3324              clr R3
 0404 2082              std z+0,R2
 0406 3182              std z+1,R3
 0408           L90:
 0408                   .dbline 390
 0408 4395              inc R20
 040A           L92:
 040A                   .dbline 390
 040A 4330              cpi R20,3
 040C 98F3              brlo L89
 040E                   .dbline 392
 040E           ;               pevent->OSTaskTbl[i]=0;
 040E           ;     pevent->OSEventCnt=0;
 040E 2224              clr R2
 0410 3324              clr R3
 0412 E02F              mov R30,R16
 0414 F12F              mov R31,R17
 0416 2682              std z+6,R2
 0418 3782              std z+7,R3
 041A                   .dbline 393
 041A           ;     pevent->OSEventType=OS_EVENT_TYPE_INVALID;                   /* OS_EVENT_TYPE_MBOX, OS_EVENT_TYPE_Q or OS_EVENT_TYPE_SEM */
 041A 2086              std z+8,R2
 041C                   .dbline -2
 041C                   .dbline 394
 041C           ; }
 041C           L86:
 041C 00D0              rcall pop_gset1
 041E                   .dbline 0 ; func end
 041E 0895              ret
 0420                   .dbsym r i 20 c
 0420                   .dbsym r pevent 16 pX
 0420                   .dbend
 0420                   .dbfunc e OSEventGetHighPrioRdy _OSEventGetHighPrioRdy fc
 0420           ;           ptcb -> R20,R21
 0420           ;              i -> R22
 0420           ;         pevent -> R16,R17
                        .even
 0420           _OSEventGetHighPrioRdy::
 0420 00D0              rcall push_gset2
 0422                   .dbline -1
 0422                   .dbline 400
 0422           ; 
 0422           ; /*get highest prio from event's waiting task list,
 0422           ;   ignore OSTCBStat and OSTCBDly.
 0422           ;   Find first tcb in pevent->OSTaskTbl which is not null*/
 0422           ; INT8U OSEventGetHighPrioRdy(OS_EVENT *pevent)
 0422           ; {
 0422                   .dbline 403
 0422           ;       INT8U i;
 0422           ;       OS_TCB *ptcb;
 0422           ;       if(0==pevent)
 0422 0030              cpi R16,0
 0424 0107              cpc R16,R17
 0426 11F4              brne L94
 0428           X19:
 0428                   .dbline 404
 0428           ;               return OS_TASK_COUNT;//error
 0428 03E0              ldi R16,3
 042A 15C0              rjmp L93
 042C           L94:
 042C                   .dbline 405
 042C           ;     for(i=0;i<OS_TASK_COUNT;i++)
 042C 6627              clr R22
 042E 10C0              rjmp L99
 0430           L96:
 0430                   .dbline 406
 0430           ;       {
 0430                   .dbline 407
 0430           ;               ptcb=pevent->OSTaskTbl[i];
 0430 E62F              mov R30,R22
 0432 FF27              clr R31
 0434 EE0F              lsl R30
 0436 FF1F              rol R31
 0438 E00F              add R30,R16
 043A F11F              adc R31,R17
 043C 4081              ldd R20,z+0
 043E 5181              ldd R21,z+1
 0440                   .dbline 408
 0440           ;               if(ptcb)
 0440 4030              cpi R20,0
 0442 4507              cpc R20,R21
 0444 21F0              breq L100
 0446           X20:
 0446                   .dbline 409
 0446           ;               {
 0446                   .dbline 410
 0446           ;                       return ptcb->OSTCBPrio;
 0446 E42F              mov R30,R20
 0448 F52F              mov R31,R21
 044A 0581              ldd R16,z+5
 044C 04C0              rjmp L93
 044E           L100:
 044E                   .dbline 412
 044E           L97:
 044E                   .dbline 405
 044E 6395              inc R22
 0450           L99:
 0450                   .dbline 405
 0450 6330              cpi R22,3
 0452 70F3              brlo L96
 0454                   .dbline 413
 0454           ;               }
 0454           ;       }
 0454           ;       return OS_TASK_COUNT;//error
 0454 03E0              ldi R16,3
 0456                   .dbline -2
 0456           L93:
 0456 00D0              rcall pop_gset2
 0458                   .dbline 0 ; func end
 0458 0895              ret
 045A                   .dbsym r ptcb 20 pX
 045A                   .dbsym r i 22 c
 045A                   .dbsym r pevent 16 pX
 045A                   .dbend
 045A                   .dbfunc e OSEventTaskRdy _OSEventTaskRdy fV
 045A           ;           prio -> R22
 045A           ;           ptcb -> R22,R23
 045A           ;            msk -> R20
 045A           ;         pevent -> R22,R23
                        .even
 045A           _OSEventTaskRdy::
 045A 00D0              rcall push_gset2
 045C 422F              mov R20,R18
 045E 602F              mov R22,R16
 0460 712F              mov R23,R17
 0462                   .dbline -1
 0462                   .dbline 418
 0462           ; }
 0462           ; 
 0462           ; /*when OSSemPend success,call OSEventTaskRdy to remove task from event waitting task list*/
 0462           ; void  OSEventTaskRdy (OS_EVENT *pevent, INT8U msk)
 0462           ; {
 0462                   .dbline 422
 0462           ;     OS_TCB *ptcb;
 0462           ;     INT8U   prio;
 0462           ; 
 0462           ;       prio=OSEventGetHighPrioRdy(pevent);
 0462 062F              mov R16,R22
 0464 172F              mov R17,R23
 0466 DCDF              rcall _OSEventGetHighPrioRdy
 0468 602F              mov R22,R16
 046A                   .dbline 424
 046A           ; #if OS_STRICT
 046A           ;       if(prio>OS_LOWEST_PRIO)
 046A 82E0              ldi R24,2
 046C 8017              cp R24,R16
 046E 10F4              brsh L103
 0470                   .dbline 425
 0470           ;               OSError(0);
 0470 0027              clr R16
 0472 00D0              rcall _OSError
 0474           L103:
 0474                   .dbline 427
 0474           ; #endif
 0474           ;     ptcb                 =  OSpTCBList[prio];       /* Point to this task's OS_TCB                   */
 0474 80E0              ldi R24,<_OSpTCBList
 0476 90E0              ldi R25,>_OSpTCBList
 0478 E62F              mov R30,R22
 047A FF27              clr R31
 047C EE0F              lsl R30
 047E FF1F              rol R31
 0480 E80F              add R30,R24
 0482 F91F              adc R31,R25
 0484 6081              ldd R22,z+0
 0486 7181              ldd R23,z+1
 0488                   .dbline 429
 0488           ; #if OS_STRICT
 0488           ;       if(0==ptcb)
 0488 6030              cpi R22,0
 048A 6707              cpc R22,R23
 048C 11F4              brne L105
 048E           X21:
 048E                   .dbline 430
 048E           ;               OSError(0);
 048E 0027              clr R16
 0490 00D0              rcall _OSError
 0492           L105:
 0492                   .dbline 433
 0492           ; #endif
 0492           ;       //clear event flags
 0492           ;     ptcb->OSTCBDly       =  0;                        /* Prevent OSTimeTick() from readying task       */
 0492 2224              clr R2
 0494 3324              clr R3
 0496 E62F              mov R30,R22
 0498 F72F              mov R31,R23
 049A 2282              std z+2,R2
 049C 3382              std z+3,R3
 049E                   .dbline 434
 049E           ;     ptcb->OSTCBStat     &= ~msk;                      /* Clear bit associated with event type          */
 049E 862F              mov R24,R22
 04A0 972F              mov R25,R23
 04A2 0496              adiw R24,4
 04A4 442E              mov R4,R20
 04A6 4094              com R4
 04A8 E82F              mov R30,R24
 04AA F92F              mov R31,R25
 04AC 5080              ldd R5,z+0
 04AE 5420              and R5,R4
 04B0 5082              std z+0,R5
 04B2                   .dbline -2
 04B2                   .dbline 435
 04B2           ; }
 04B2           L102:
 04B2 00D0              rcall pop_gset2
 04B4                   .dbline 0 ; func end
 04B4 0895              ret
 04B6                   .dbsym r prio 22 c
 04B6                   .dbsym r ptcb 22 pX
 04B6                   .dbsym r msk 20 c
 04B6                   .dbsym r pevent 22 pX
 04B6                   .dbend
 04B6                   .dbfunc e OSEventTaskWait _OSEventTaskWait fV
 04B6           ;         pevent -> R20,R21
                        .even
 04B6           _OSEventTaskWait::
 04B6 00D0              rcall push_gset1
 04B8 402F              mov R20,R16
 04BA 512F              mov R21,R17
 04BC                   .dbline -1
 04BC                   .dbline 453
 04BC                   .dbline 455
 04BC 20909D01          lds R2,_OSTCBCur
 04C0 30909E01          lds R3,_OSTCBCur+1
 04C4 2220              tst R2
 04C6 21F4              brne L108
 04C8 3320              tst R3
 04CA 11F4              brne L108
 04CC           X22:
 04CC                   .dbline 456
 04CC 0027              clr R16
 04CE 00D0              rcall _OSError
 04D0           L108:
 04D0                   .dbline -2
 04D0                   .dbline 458
 04D0           ; 
 04D0           ; 
 04D0           ; /*
 04D0           ; *********************************************************************************************************
 04D0           ; *                                   MAKE TASK WAIT FOR EVENT TO OCCUR
 04D0           ; *
 04D0           ; * Description: This function is called by other uC/OS-II services to suspend a task because an event has
 04D0           ; *              not occurred.
 04D0           ; *
 04D0           ; * Arguments  : pevent   is a pointer to the event control block for which the task will be waiting for.
 04D0           ; *
 04D0           ; * Returns    : none
 04D0           ; *
 04D0           ; * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
 04D0           ; *********************************************************************************************************
 04D0           ; */
 04D0           ; void  OSEventTaskWait (OS_EVENT *pevent)
 04D0           ; {
 04D0           ; #if OS_STRICT
 04D0           ;       if(!OSTCBCur)
 04D0           ;               OSError(0);
 04D0           ; #endif
 04D0           ; }
 04D0           L107:
 04D0 00D0              rcall pop_gset1
 04D2                   .dbline 0 ; func end
 04D2 0895              ret
 04D4                   .dbsym r pevent 20 pX
 04D4                   .dbend
 04D4                   .dbfunc e OSEventTO _OSEventTO fV
 04D4           ;         pevent -> R16,R17
                        .even
 04D4           _OSEventTO::
 04D4                   .dbline -1
 04D4                   .dbline 474
 04D4           ; /*
 04D4           ; *********************************************************************************************************
 04D4           ; *                              MAKE TASK READY TO RUN BASED ON EVENT TIMEOUT
 04D4           ; *
 04D4           ; * Description: This function is called by other uC/O

⌨️ 快捷键说明

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