test.lst
来自「uCOS-II工程文件,使用ICC编译。」· LST 代码 · 共 1,555 行 · 第 1/5 页
LST
1,555 行
0556 2433 CLR R3
0557 0E28 ADD R2,R24
0558 1E39 ADC R3,R25
0559 91E00196 LDS R30,OSTCBCur
055B 91F00197 LDS R31,OSTCBCur+1
055D 8446 LDD R4,Z+14
055E 9440 COM R4
055F 01F1 MOVW R30,R2
0560 8050 LDD R5,Z+0
0561 2054 AND R5,R4
0562 8250 STD Z+0,R5
(0705) if (OSRdyTbl[y] == 0x00) {
0563 2FE4 MOV R30,R20
0564 27FF CLR R31
0565 0FE8 ADD R30,R24
0566 1FF9 ADC R31,R25
0567 8020 LDD R2,Z+0
0568 2022 TST R2
0569 F459 BNE 0x0575
(0706) OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pending */
056A 91E00196 LDS R30,OSTCBCur
056C 91F00197 LDS R31,OSTCBCur+1
056E 8427 LDD R2,Z+15
056F 9420 COM R2
0570 90300203 LDS R3,OSRdyGrp
0572 2032 AND R3,R2
0573 92300203 STS OSRdyGrp,R3
(0707) }
(0708) pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting list */
0575 01C8 MOVW R24,R16
0576 9606 ADIW R24,6
0577 91E00196 LDS R30,OSTCBCur
0579 91F00197 LDS R31,OSTCBCur+1
057B 8425 LDD R2,Z+13
057C 2433 CLR R3
057D 0E28 ADD R2,R24
057E 1E39 ADC R3,R25
057F 91E00196 LDS R30,OSTCBCur
0581 91F00197 LDS R31,OSTCBCur+1
0583 8446 LDD R4,Z+14
0584 01F1 MOVW R30,R2
0585 8050 LDD R5,Z+0
0586 2854 OR R5,R4
0587 8250 STD Z+0,R5
(0709) pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
0588 01C8 MOVW R24,R16
0589 9601 ADIW R24,1
058A 91E00196 LDS R30,OSTCBCur
058C 91F00197 LDS R31,OSTCBCur+1
058E 8447 LDD R4,Z+15
058F 01FC MOVW R30,R24
0590 8050 LDD R5,Z+0
0591 2854 OR R5,R4
0592 8250 STD Z+0,R5
0593 940E12ED CALL pop_gset1
0595 9508 RET
_OS_EventTO:
y --> R20
pevent --> R16
0596 940E12EA CALL push_gset1
(0710) }
(0711) #endif
(0712) /*$PAGE*/
(0713) /*
(0714) *********************************************************************************************************
(0715) * MAKE TASK READY TO RUN BASED ON EVENT TIMEOUT
(0716) *
(0717) * Description: This function is called by other uC/OS-II services to make a task ready to run because a
(0718) * timeout occurred.
(0719) *
(0720) * Arguments : pevent is a pointer to the event control block which is readying a task.
(0721) *
(0722) * Returns : none
(0723) *
(0724) * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
(0725) *********************************************************************************************************
(0726) */
(0727) #if OS_EVENT_EN > 0
(0728) void OS_EventTO (OS_EVENT *pevent)
(0729) {
(0730) INT8U y;
(0731)
(0732)
(0733) y = OSTCBCur->OSTCBY;
0598 91E00196 LDS R30,OSTCBCur
059A 91F00197 LDS R31,OSTCBCur+1
059C 8545 LDD R20,Z+13
(0734) pevent->OSEventTbl[y] &= ~OSTCBCur->OSTCBBitX;
059D 01C8 MOVW R24,R16
059E 9606 ADIW R24,6
059F 2E24 MOV R2,R20
05A0 2433 CLR R3
05A1 0E28 ADD R2,R24
05A2 1E39 ADC R3,R25
05A3 91E00196 LDS R30,OSTCBCur
05A5 91F00197 LDS R31,OSTCBCur+1
05A7 8446 LDD R4,Z+14
05A8 9440 COM R4
05A9 01F1 MOVW R30,R2
05AA 8050 LDD R5,Z+0
05AB 2054 AND R5,R4
05AC 8250 STD Z+0,R5
(0735) if (pevent->OSEventTbl[y] == 0x00) {
05AD 01C8 MOVW R24,R16
05AE 9606 ADIW R24,6
05AF 2FE4 MOV R30,R20
05B0 27FF CLR R31
05B1 0FE8 ADD R30,R24
05B2 1FF9 ADC R31,R25
05B3 8020 LDD R2,Z+0
05B4 2022 TST R2
05B5 F461 BNE 0x05C2
(0736) pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
05B6 01C8 MOVW R24,R16
05B7 9601 ADIW R24,1
05B8 91E00196 LDS R30,OSTCBCur
05BA 91F00197 LDS R31,OSTCBCur+1
05BC 8447 LDD R4,Z+15
05BD 9440 COM R4
05BE 01FC MOVW R30,R24
05BF 8050 LDD R5,Z+0
05C0 2054 AND R5,R4
05C1 8250 STD Z+0,R5
(0737) }
(0738) OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
05C2 2422 CLR R2
05C3 91E00196 LDS R30,OSTCBCur
05C5 91F00197 LDS R31,OSTCBCur+1
05C7 8622 STD Z+10,R2
(0739) OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
05C8 2433 CLR R3
05C9 91E00196 LDS R30,OSTCBCur
05CB 91F00197 LDS R31,OSTCBCur+1
05CD 8237 STD Z+7,R3
05CE 8226 STD Z+6,R2
05CF 940E12ED CALL pop_gset1
05D1 9508 RET
_OS_EventWaitListInit:
ptbl --> R20
pevent --> R16
05D2 940E12EA CALL push_gset1
(0740) }
(0741) #endif
(0742) /*$PAGE*/
(0743) /*
(0744) *********************************************************************************************************
(0745) * INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST
(0746) *
(0747) * Description: This function is called by other uC/OS-II services to initialize the event wait list.
(0748) *
(0749) * Arguments : pevent is a pointer to the event control block allocated to the event.
(0750) *
(0751) * Returns : none
(0752) *
(0753) * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
(0754) *********************************************************************************************************
(0755) */
(0756) #if OS_EVENT_EN > 0
(0757) void OS_EventWaitListInit (OS_EVENT *pevent)
(0758) {
(0759) INT8U *ptbl;
(0760)
(0761)
(0762) pevent->OSEventGrp = 0x00; /* No task waiting on event */
05D4 2422 CLR R2
05D5 01F8 MOVW R30,R16
05D6 8221 STD Z+1,R2
(0763) ptbl = &pevent->OSEventTbl[0];
05D7 01A8 MOVW R20,R16
05D8 5F4A SUBI R20,0xFA
05D9 4F5F SBCI R21,0xFF
(0764)
(0765) #if OS_EVENT_TBL_SIZE > 0
(0766) *ptbl++ = 0x00;
05DA 01FA MOVW R30,R20
05DB 9221 ST R2,Z+
05DC 01AF MOVW R20,R30
05DD 940E12ED CALL pop_gset1
05DF 9508 RET
(0767) #endif
(0768)
(0769) #if OS_EVENT_TBL_SIZE > 1
(0770) *ptbl++ = 0x00;
(0771) #endif
(0772)
(0773) #if OS_EVENT_TBL_SIZE > 2
(0774) *ptbl++ = 0x00;
(0775) #endif
(0776)
(0777) #if OS_EVENT_TBL_SIZE > 3
(0778) *ptbl++ = 0x00;
(0779) #endif
(0780)
(0781) #if OS_EVENT_TBL_SIZE > 4
(0782) *ptbl++ = 0x00;
(0783) #endif
(0784)
(0785) #if OS_EVENT_TBL_SIZE > 5
(0786) *ptbl++ = 0x00;
(0787) #endif
(0788)
(0789) #if OS_EVENT_TBL_SIZE > 6
(0790) *ptbl++ = 0x00;
(0791) #endif
(0792)
(0793) #if OS_EVENT_TBL_SIZE > 7
(0794) *ptbl = 0x00;
(0795) #endif
(0796) }
(0797) #endif
(0798) /*$PAGE*/
(0799) /*
(0800) *********************************************************************************************************
(0801) * INITIALIZATION
(0802) * INITIALIZE THE FREE LIST OF EVENT CONTROL BLOCKS
(0803) *
(0804) * Description: This function is called by OSInit() to initialize the free list of event control blocks.
(0805) *
(0806) * Arguments : none
(0807) *
(0808) * Returns : none
(0809) *********************************************************************************************************
(0810) */
(0811)
(0812) static void OS_InitEventList (void)
(0813) {
(0814) #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
(0815) #if (OS_MAX_EVENTS > 1)
(0816) INT16U i;
(0817) OS_EVENT *pevent1;
(0818) OS_EVENT *pevent2;
(0819)
(0820)
(0821) OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl)); /* Clear the event table */
(0822) pevent1 = &OSEventTbl[0];
(0823) pevent2 = &OSEventTbl[1];
(0824) for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
(0825) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
(0826) pevent1->OSEventPtr = pevent2;
(0827) #if OS_EVENT_NAME_SIZE > 1
(0828) pevent1->OSEventName[0] = '?'; /* Unknown name */
(0829) pevent1->OSEventName[1] = OS_ASCII_NUL;
(0830) #endif
(0831) pevent1++;
(0832) pevent2++;
(0833) }
(0834) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
(0835) pevent1->OSEventPtr = (OS_EVENT *)0;
(0836) #if OS_EVENT_NAME_SIZE > 1
(0837) pevent1->OSEventName[0] = '?';
(0838) pevent1->OSEventName[1] = OS_ASCII_NUL;
(0839) #endif
(0840) OSEventFreeList = &OSEventTbl[0];
(0841) #else
(0842) OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
_OS_InitEventList:
05E0 E787 LDI R24,0x77
05E1 E092 LDI R25,2
05E2 9390027F STS OSEventFreeList+1,R25
05E4 9380027E STS OSEventFreeList,R24
(0843) OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
05E6 2422 CLR R2
05E7 01FC MOVW R30,R24
05E8 8220 STD Z+0,R2
(0844) OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
05E9 2433 CLR R3
05EA 91E0027E LDS R30,OSEventFreeList
05EC 91F0027F LDS R31,OSEventFreeList+1
05EE 8235 STD Z+5,R3
05EF 8224 STD Z+4,R2
05F0 9508 RET
_OS_InitMisc:
05F1 940E12E8 CALL push_gset2
(0845) #if OS_EVENT_NAME_SIZE > 1
(0846) OSEventFreeList->OSEventName[0] = '?'; /* Unknown name */
(0847) OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
(0848) #endif
(0849) #endif
(0850) #endif
(0851) }
(0852) /*$PAGE*/
(0853) /*
(0854) *********************************************************************************************************
(0855) * INITIALIZATION
(0856) * INITIALIZE MISCELLANEOUS VARIABLES
(0857) *
(0858) * Description: This function is called by OSInit() to initialize miscellaneous variables.
(0859) *
(0860) * Arguments : none
(0861) *
(0862) * Returns : none
(0863) *********************************************************************************************************
(0864) */
(0865)
(0866) static void OS_InitMisc (void)
(0867) {
(0868) #if OS_TIME_GET_SET_EN > 0
(0869) OSTime = 0L; /* Clear the 32-bit system clock */
(0870) #endif
(0871)
(0872) OSIntNesting = 0; /* Clear the interrupt nesting counter */
05F3 2422 CLR R2
05F4 92200208 STS OSIntNesting,R2
(0873) OSLockNesting = 0; /* Clear the scheduling lock counter */
05F6 92200206 STS OSLockNesting,R2
(0874)
(0875) OSTaskCtr = 0; /* Clear the number of tasks */
05F8 92200200 STS OSTaskCtr,R2
(0876)
(0877) OSRunning = FALSE; /* Indicate that multitasking not started */
05FA 92200
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?