📄 test.lst
字号:
034F 8446 LDD R4,Z+14
0350 01F1 MOVW R30,R2
0351 8050 LDD R5,Z+0
0352 2854 OR R5,R4
0353 8250 STD Z+0,R5
(0709) pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
0354 01C8 MOVW R24,R16
0355 9601 ADIW R24,1
0356 91E00206 LDS R30,OSTCBCur
0358 91F00207 LDS R31,OSTCBCur+1
035A 8447 LDD R4,Z+15
035B 01FC MOVW R30,R24
035C 8050 LDD R5,Z+0
035D 2854 OR R5,R4
035E 8250 STD Z+0,R5
035F 940E0E1B CALL pop_gset1
0361 9508 RET
_OS_EventTO:
y --> R20
pevent --> R16
0362 940E0E18 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;
0364 91E00206 LDS R30,OSTCBCur
0366 91F00207 LDS R31,OSTCBCur+1
0368 8545 LDD R20,Z+13
(0734) pevent->OSEventTbl[y] &= ~OSTCBCur->OSTCBBitX;
0369 01C8 MOVW R24,R16
036A 9606 ADIW R24,6
036B 2E24 MOV R2,R20
036C 2433 CLR R3
036D 0E28 ADD R2,R24
036E 1E39 ADC R3,R25
036F 91E00206 LDS R30,OSTCBCur
0371 91F00207 LDS R31,OSTCBCur+1
0373 8446 LDD R4,Z+14
0374 9440 COM R4
0375 01F1 MOVW R30,R2
0376 8050 LDD R5,Z+0
0377 2054 AND R5,R4
0378 8250 STD Z+0,R5
(0735) if (pevent->OSEventTbl[y] == 0x00) {
0379 01C8 MOVW R24,R16
037A 9606 ADIW R24,6
037B 2FE4 MOV R30,R20
037C 27FF CLR R31
037D 0FE8 ADD R30,R24
037E 1FF9 ADC R31,R25
037F 8020 LDD R2,Z+0
0380 2022 TST R2
0381 F461 BNE 0x038E
(0736) pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
0382 01C8 MOVW R24,R16
0383 9601 ADIW R24,1
0384 91E00206 LDS R30,OSTCBCur
0386 91F00207 LDS R31,OSTCBCur+1
0388 8447 LDD R4,Z+15
0389 9440 COM R4
038A 01FC MOVW R30,R24
038B 8050 LDD R5,Z+0
038C 2054 AND R5,R4
038D 8250 STD Z+0,R5
(0737) }
(0738) OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
038E 2422 CLR R2
038F 91E00206 LDS R30,OSTCBCur
0391 91F00207 LDS R31,OSTCBCur+1
0393 8622 STD Z+10,R2
(0739) OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
0394 2433 CLR R3
0395 91E00206 LDS R30,OSTCBCur
0397 91F00207 LDS R31,OSTCBCur+1
0399 8237 STD Z+7,R3
039A 8226 STD Z+6,R2
039B 940E0E1B CALL pop_gset1
039D 9508 RET
_OS_EventWaitListInit:
ptbl --> R20
pevent --> R16
039E 940E0E18 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 */
03A0 2422 CLR R2
03A1 01F8 MOVW R30,R16
03A2 8221 STD Z+1,R2
(0763) ptbl = &pevent->OSEventTbl[0];
03A3 01A8 MOVW R20,R16
03A4 5F4A SUBI R20,0xFA
03A5 4F5F SBCI R21,0xFF
(0764)
(0765) #if OS_EVENT_TBL_SIZE > 0
(0766) *ptbl++ = 0x00;
03A6 01FA MOVW R30,R20
03A7 9221 ST R2,Z+
(0767) #endif
(0768)
(0769) #if OS_EVENT_TBL_SIZE > 1
(0770) *ptbl++ = 0x00;
03A8 9221 ST R2,Z+
03A9 01AF MOVW R20,R30
03AA 940E0E1B CALL pop_gset1
03AC 9508 RET
_OS_InitEventList:
pevent2 --> R20
i --> R22
pevent1 --> R10
03AD 940E0E14 CALL push_gset3
(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 */
03AF E228 LDI R18,0x28
03B0 E030 LDI R19,0
03B1 E106 LDI R16,0x16
03B2 E013 LDI R17,3
03B3 D0AC RCALL _OS_MemClr
(0822) pevent1 = &OSEventTbl[0];
03B4 E186 LDI R24,0x16
03B5 E093 LDI R25,3
03B6 015C MOVW R10,R24
(0823) pevent2 = &OSEventTbl[1];
03B7 E14E LDI R20,0x1E
03B8 E053 LDI R21,3
(0824) for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
03B9 2766 CLR R22
03BA 2777 CLR R23
03BB C00C RJMP 0x03C8
(0825) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
03BC 2422 CLR R2
03BD 01F5 MOVW R30,R10
03BE 8220 STD Z+0,R2
(0826) pevent1->OSEventPtr = pevent2;
03BF 8355 STD Z+5,R21
03C0 8344 STD Z+4,R20
(0827) #if OS_EVENT_NAME_SIZE > 1
(0828) pevent1->OSEventName[0] = '?'; /* Unknown name */
(0829) pevent1->OSEventName[1] = OS_ASCII_NUL;
(0830) #endif
(0831) pevent1++;
03C1 01C5 MOVW R24,R10
03C2 9608 ADIW R24,0x8
03C3 015C MOVW R10,R24
(0832) pevent2++;
03C4 5F48 SUBI R20,0xF8
03C5 4F5F SBCI R21,0xFF
03C6 5F6F SUBI R22,0xFF
03C7 4F7F SBCI R23,0xFF
03C8 3064 CPI R22,4
03C9 E0E0 LDI R30,0
03CA 077E CPC R23,R30
03CB F380 BCS 0x03BC
(0833) }
(0834) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
03CC 2422 CLR R2
03CD 01F5 MOVW R30,R10
03CE 8220 STD Z+0,R2
(0835) pevent1->OSEventPtr = (OS_EVENT *)0;
03CF 2433 CLR R3
03D0 8235 STD Z+5,R3
03D1 8224 STD Z+4,R2
(0836) #if OS_EVENT_NAME_SIZE > 1
(0837) pevent1->OSEventName[0] = '?';
(0838) pevent1->OSEventName[1] = OS_ASCII_NUL;
(0839) #endif
(0840) OSEventFreeList = &OSEventTbl[0];
03D2 E186 LDI R24,0x16
03D3 E093 LDI R25,3
03D4 9390033F STS OSEventFreeList+1,R25
03D6 9380033E STS OSEventFreeList,R24
03D8 940E0E07 CALL pop_gset3
03DA 9508 RET
_OS_InitMisc:
03DB 940E0E16 CALL push_gset2
(0841) #else
(0842) OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
(0843) OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
(0844) OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
(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 */
03DD 2422 CLR R2
03DE 92200315 STS OSIntNesting,R2
(0873) OSLockNesting = 0; /* Clear the scheduling lock counter */
03E0 92200313 STS OSLockNesting,R2
(0874)
(0875) OSTaskCtr = 0; /* Clear the number of tasks */
03E2 9220030C STS OSTaskCtr,R2
(0876)
(0877) OSRunning = FALSE; /* Indicate that multitasking not started */
03E4 9220030D STS OSRunning,R2
(0878)
(0879) OSCtxSwCtr = 0; /* Clear the context switch counter */
03E6 E040
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -