📄 test.lst
字号:
31A 84A5 LDD R10,Z+13
31B 24BB CLR R11
31C 0EA8 ADD R10,R24
31D 1EB9 ADC R11,R25
31E 8426 LDD R2,Z+14
31F 01F5 MOVW R30,R10
320 8030 LDD R3,Z+0
321 2832 OR R3,R2
322 8230 STD Z+0,R3
(0709) pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
323 01A8 MOVW R20,R16
324 5F4F SUBI R20,0xFF
325 4F5F SBCI R21,0xFF
326 91E0 0A36 LDS R30,OSTCBCur
328 91F0 0A37 LDS R31,OSTCBCur+1
32A 8427 LDD R2,Z+15
32B 01FA MOVW R30,R20
32C 8030 LDD R3,Z+0
32D 2832 OR R3,R2
32E 8230 STD Z+0,R3
32F 940C 0F9D JMP pop_xgset300C
_OS_EventTO:
y --> R10
pevent --> R16
331 92AA ST R10,-Y
(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;
332 91E0 0A36 LDS R30,OSTCBCur
334 91F0 0A37 LDS R31,OSTCBCur+1
336 84A5 LDD R10,Z+13
(0734) pevent->OSEventTbl[y] &= ~OSTCBCur->OSTCBBitX;
337 01C8 MOVW R24,R16
338 9606 ADIW R24,6
339 2C2A MOV R2,R10
33A 2433 CLR R3
33B 0E28 ADD R2,R24
33C 1E39 ADC R3,R25
33D 0121 MOVW R4,R2
33E 8426 LDD R2,Z+14
33F 9420 COM R2
340 01F2 MOVW R30,R4
341 8030 LDD R3,Z+0
342 2032 AND R3,R2
343 8230 STD Z+0,R3
(0735) if (pevent->OSEventTbl[y] == 0x00) {
344 01C8 MOVW R24,R16
345 9606 ADIW R24,6
346 2DEA MOV R30,R10
347 27FF CLR R31
348 0FE8 ADD R30,R24
349 1FF9 ADC R31,R25
34A 8020 LDD R2,Z+0
34B 2022 TST R2
34C F461 BNE 0x0359
(0736) pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
34D 01C8 MOVW R24,R16
34E 9601 ADIW R24,1
34F 91E0 0A36 LDS R30,OSTCBCur
351 91F0 0A37 LDS R31,OSTCBCur+1
353 8427 LDD R2,Z+15
354 9420 COM R2
355 01FC MOVW R30,R24
356 8030 LDD R3,Z+0
357 2032 AND R3,R2
358 8230 STD Z+0,R3
(0737) }
(0738) OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
359 2422 CLR R2
35A 91E0 0A36 LDS R30,OSTCBCur
35C 91F0 0A37 LDS R31,OSTCBCur+1
35E 8622 STD Z+10,R2
(0739) OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
35F 2433 CLR R3
360 91E0 0A36 LDS R30,OSTCBCur
362 91F0 0A37 LDS R31,OSTCBCur+1
364 8237 STD Z+7,R3
365 8226 STD Z+6,R2
366 90A9 LD R10,Y+
367 9508 RET
_OS_EventWaitListInit:
ptbl --> R20
pevent --> R16
368 934A ST R20,-Y
369 935A ST R21,-Y
(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 */
36A 2422 CLR R2
36B 01F8 MOVW R30,R16
36C 8221 STD Z+1,R2
(0763) ptbl = &pevent->OSEventTbl[0];
36D 01AF MOVW R20,R30
36E 5F4A SUBI R20,0xFA
36F 4F5F SBCI R21,0xFF
(0764)
(0765) #if OS_EVENT_TBL_SIZE > 0
(0766) *ptbl++ = 0x00;
370 01FA MOVW R30,R20
371 9221 ST R2,Z+
(0767) #endif
(0768)
(0769) #if OS_EVENT_TBL_SIZE > 1
(0770) *ptbl++ = 0x00;
372 9221 ST R2,Z+
(0771) #endif
(0772)
(0773) #if OS_EVENT_TBL_SIZE > 2
(0774) *ptbl++ = 0x00;
373 9221 ST R2,Z+
(0775) #endif
(0776)
(0777) #if OS_EVENT_TBL_SIZE > 3
(0778) *ptbl++ = 0x00;
374 9221 ST R2,Z+
(0779) #endif
(0780)
(0781) #if OS_EVENT_TBL_SIZE > 4
(0782) *ptbl++ = 0x00;
375 9221 ST R2,Z+
(0783) #endif
(0784)
(0785) #if OS_EVENT_TBL_SIZE > 5
(0786) *ptbl++ = 0x00;
376 9221 ST R2,Z+
(0787) #endif
(0788)
(0789) #if OS_EVENT_TBL_SIZE > 6
(0790) *ptbl++ = 0x00;
377 9221 ST R2,Z+
378 01AF MOVW R20,R30
(0791) #endif
(0792)
(0793) #if OS_EVENT_TBL_SIZE > 7
(0794) *ptbl = 0x00;
379 8220 STD Z+0,R2
37A 9159 LD R21,Y+
37B 9149 LD R20,Y+
37C 9508 RET
os_core.c:OS_InitEventList:
_OS_InitEventList:
pevent2 --> R22
i --> R10
pevent1 --> R20
37D 940E 0FAC CALL push_xgsetF00C
(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 */
37F E426 LDI R18,0x46
380 E030 LDI R19,0
381 E40C LDI R16,0x4C
382 E01B LDI R17,0xB
383 D0A5 RCALL _OS_MemClr
(0822) pevent1 = &OSEventTbl[0];
384 E44C LDI R20,0x4C
385 E05B LDI R21,0xB
(0823) pevent2 = &OSEventTbl[1];
386 E56A LDI R22,0x5A
387 E07B LDI R23,0xB
(0824) for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
388 24AA CLR R10
389 24BB CLR R11
38A C00C RJMP 0x0397
(0825) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
38B 2422 CLR R2
38C 01FA MOVW R30,R20
38D 8220 STD Z+0,R2
(0826) pevent1->OSEventPtr = pevent2;
38E 8375 STD Z+5,R23
38F 8364 STD Z+4,R22
(0827) #if OS_EVENT_NAME_SIZE > 1
(0828) pevent1->OSEventName[0] = '?'; /* Unknown name */
(0829) pevent1->OSEventName[1] = OS_ASCII_NUL;
(0830) #endif
(0831) pevent1++;
390 5F42 SUBI R20,0xF2
391 4F5F SBCI R21,0xFF
(0832) pevent2++;
392 5F62 SUBI R22,0xF2
393 4F7F SBCI R23,0xFF
394 01C5 MOVW R24,R10
395 9601 ADIW R24,1
396 015C MOVW R10,R24
397 01C5 MOVW R24,R10
398 3084 CPI R24,4
399 E0E0 LDI R30,0
39A 079E CPC R25,R30
39B F378 BCS 0x038B
(0833) }
(0834) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
39C 2422 CLR R2
39D 01FA MOVW R30,R20
39E 8220 STD Z+0,R2
(0835) pevent1->OSEventPtr = (OS_EVENT *)0;
39F 2433 CLR R3
3A0 8235 STD Z+5,R3
3A1 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];
3A2 E48C LDI R24,0x4C
3A3 E09B LDI R25,0xB
3A4 9390 0B93 STS OSEventFreeList+1,R25
3A6 9380 0B92 STS OSEventFreeList,R24
3A8 940C 0FB3 JMP pop_xgsetF00C
(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 */
os_core.c:OS_InitMisc:
_OS_InitMisc:
3AA 2422 CLR R2
3AB 9220 0B4B STS OSIntNesting,R2
(0873) OSLockNesting = 0; /* Clear the scheduling lock counter */
3AD 9220 0B49 STS OSLockNesting,R2
(0874)
(0875) OSTaskCtr = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -