os_core.lis
来自「将本站的UCOSFORAVR128V276版本升级到了280版」· LIS 代码 · 共 1,342 行 · 第 1/5 页
LIS
1,342 行
01D8 .dbline 555
01D8 ; }
01D8 ; if (step == FALSE) { /* Return if waiting for step command */
01D8 4423 tst R20
01DA 09F4 brne L44
01DC .dbline 555
01DC .dbline 556
01DC ; return;
01DC 52C0 xjmp L35
01DE L44:
01DE .dbline 559
01DE ; }
01DE ; #endif
01DE ; ptcb = OSTCBList; /* Point at first TCB in TCB list */
01DE 40919100 lds R20,_OSTCBList
01E2 50919200 lds R21,_OSTCBList+1
01E6 48C0 xjmp L47
01E8 L46:
01E8 .dbline 560
01E8 ; while (ptcb->OSTCBPrio != OS_IDLE_PRIO) { /* Go through all TCBs in TCB list */
01E8 .dbline 561
01E8 ; OS_ENTER_CRITICAL();
01E8 0E940000 xcall _OS_CPU_SR_Save
01EC 602F mov R22,R16
01EE .dbline 562
01EE ; if (ptcb->OSTCBDly != 0) { /* No, Delayed or waiting for event with TO */
01EE FA01 movw R30,R20
01F0 2084 ldd R2,z+8
01F2 3184 ldd R3,z+9
01F4 2220 tst R2
01F6 19F4 brne X3
01F8 3320 tst R3
01FA 09F4 brne X6
01FC 37C0 xjmp L49
01FE X6:
01FE X3:
01FE .dbline 562
01FE .dbline 563
01FE ; if (--ptcb->OSTCBDly == 0) { /* Decrement nbr of ticks to end of delay */
01FE CA01 movw R24,R20
0200 0896 adiw R24,8
0202 FC01 movw R30,R24
0204 8081 ldd R24,z+0
0206 9181 ldd R25,z+1
0208 0197 sbiw R24,1
020A 2C01 movw R4,R24
020C 5182 std z+1,R5
020E 4082 std z+0,R4
0210 8030 cpi R24,0
0212 8907 cpc R24,R25
0214 09F0 breq X7
0216 2AC0 xjmp L51
0218 X7:
0218 X4:
0218 .dbline 563
0218 .dbline 565
0218 ; /* Check for timeout */
0218 ; if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
0218 FA01 movw R30,R20
021A 8285 ldd R24,z+10
021C 8773 andi R24,55
021E 51F0 breq L53
0220 .dbline 565
0220 .dbline 566
0220 ; ptcb->OSTCBStat &= ~OS_STAT_PEND_ANY; /* Yes, Clear status flag */
0220 CA01 movw R24,R20
0222 0A96 adiw R24,10
0224 FC01 movw R30,R24
0226 8081 ldd R24,z+0
0228 887C andi R24,200
022A 8083 std z+0,R24
022C .dbline 567
022C ; ptcb->OSTCBPendTO = TRUE; /* Indicate PEND timeout */
022C 81E0 ldi R24,1
022E FA01 movw R30,R20
0230 8387 std z+11,R24
0232 .dbline 568
0232 03C0 xjmp L54
0234 L53:
0234 .dbline 568
0234 ; } else {
0234 .dbline 569
0234 ; ptcb->OSTCBPendTO = FALSE;
0234 2224 clr R2
0236 FA01 movw R30,R20
0238 2386 std z+11,R2
023A .dbline 570
023A ; }
023A L54:
023A .dbline 572
023A ;
023A ; if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended? */
023A FA01 movw R30,R20
023C 2284 ldd R2,z+10
023E 3324 clr R3
0240 23FC sbrc R2,3
0242 14C0 rjmp L55
0244 .dbline 572
0244 .dbline 573
0244 ; OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make ready */
0244 FA01 movw R30,R20
0246 2088 ldd R2,z+16
0248 3090A101 lds R3,_OSRdyGrp
024C 3228 or R3,R2
024E 3092A101 sts _OSRdyGrp,R3
0252 .dbline 574
0252 ; OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
0252 80E0 ldi R24,<_OSRdyTbl
0254 90E0 ldi R25,>_OSRdyTbl
0256 FA01 movw R30,R20
0258 2684 ldd R2,z+14
025A 3324 clr R3
025C 280E add R2,R24
025E 391E adc R3,R25
0260 FA01 movw R30,R20
0262 4784 ldd R4,z+15
0264 F101 movw R30,R2
0266 5080 ldd R5,z+0
0268 5428 or R5,R4
026A 5082 std z+0,R5
026C .dbline 575
026C ; }
026C L55:
026C .dbline 576
026C ; }
026C L51:
026C .dbline 577
026C ; }
026C L49:
026C .dbline 578
026C FA01 movw R30,R20
026E 4281 ldd R20,z+2
0270 5381 ldd R21,z+3
0272 .dbline 579
0272 062F mov R16,R22
0274 0E940000 xcall _OS_CPU_SR_Restore
0278 .dbline 580
0278 L47:
0278 .dbline 560
0278 FA01 movw R30,R20
027A 8485 ldd R24,z+12
027C 8830 cpi R24,8
027E 09F0 breq X8
0280 B3CF xjmp L46
0282 X8:
0282 .dbline 581
0282 L36:
0282 .dbline -2
0282 L35:
0282 0E940000 xcall pop_gset2
0286 .dbline 0 ; func end
0286 0895 ret
0288 .dbsym r step 20 c
0288 .dbsym r cpu_sr 22 c
0288 .dbsym r ptcb 20 pS[os_tcb]
0288 .dbend
0288 .dbfunc e OSVersion _OSVersion fi
.even
0288 _OSVersion::
0288 .dbline -1
0288 .dbline 599
0288 ; ptcb = ptcb->OSTCBNext; /* Point at next TCB in TCB list */
0288 ; OS_EXIT_CRITICAL();
0288 ; }
0288 ; }
0288 ; }
0288 ; /*$PAGE*/
0288 ; /*
0288 ; *********************************************************************************************************
0288 ; * GET VERSION
0288 ; *
0288 ; * Description: This function is used to return the version number of uC/OS-II. The returned value
0288 ; * corresponds to uC/OS-II's version number multiplied by 100. In other words, version 2.00
0288 ; * would be returned as 200.
0288 ; *
0288 ; * Arguments : none
0288 ; *
0288 ; * Returns : the version number of uC/OS-II multiplied by 100.
0288 ; *********************************************************************************************************
0288 ; */
0288 ;
0288 ; INT16U OSVersion (void)
0288 ; {
0288 .dbline 600
0288 ; return (OS_VERSION);
0288 08E1 ldi R16,280
028A 11E0 ldi R17,1
028C .dbline -2
028C L57:
028C .dbline 0 ; func end
028C 0895 ret
028E .dbend
028E .dbfunc e OS_Dummy _OS_Dummy fV
.even
028E _OS_Dummy::
028E .dbline -1
028E .dbline 618
028E ; }
028E ;
028E ; /*$PAGE*/
028E ; /*
028E ; *********************************************************************************************************
028E ; * DUMMY FUNCTION
028E ; *
028E ; * Description: This function doesn't do anything. It is called by OSTaskDel().
028E ; *
028E ; * Arguments : none
028E ; *
028E ; * Returns : none
028E ; *********************************************************************************************************
028E ; */
028E ;
028E ; #if OS_TASK_DEL_EN > 0
028E ; void OS_Dummy (void)
028E ; {
028E .dbline -2
028E L58:
028E .dbline 0 ; func end
028E 0895 ret
0290 .dbend
0290 .dbfunc e OS_EventTaskRdy _OS_EventTaskRdy fc
0290 ; bity -> R12
0290 ; bitx -> R22
0290 ; prio -> R20
0290 ; x -> R20
0290 ; ptcb -> R14,R15
0290 ; y -> R10
0290 ; msk -> y+10
0290 ; msg -> R20,R21
0290 ; pevent -> R14,R15
.even
0290 _OS_EventTaskRdy::
0290 0E940000 xcall push_gset5
0294 A901 movw R20,R18
0296 7801 movw R14,R16
0298 .dbline -1
0298 .dbline 646
0298 ; }
0298 ; #endif
0298 ;
0298 ; /*$PAGE*/
0298 ; /*
0298 ; *********************************************************************************************************
0298 ; * MAKE TASK READY TO RUN BASED ON EVENT OCCURING
0298 ; *
0298 ; * Description: This function is called by other uC/OS-II services and is used to ready a task that was
0298 ; * waiting for an event to occur.
0298 ; *
0298 ; * Arguments : pevent is a pointer to the event control block corresponding to the event.
0298 ; *
0298 ; * msg is a pointer to a message. This pointer is used by message oriented services
0298 ; * such as MAILBOXEs and QUEUEs. The pointer is not used when called by other
0298 ; * service functions.
0298 ; *
0298 ; * msk is a mask that is used to clear the status byte of the TCB. For example,
0298 ; * OSSemPost() will pass OS_STAT_SEM, OSMboxPost() will pass OS_STAT_MBOX etc.
0298 ; *
0298 ; * Returns : none
0298 ; *
0298 ; * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
0298 ; *********************************************************************************************************
0298 ; */
0298 ; #if OS_EVENT_EN
0298 ; INT8U OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)
0298 ; {
0298
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?