📄 test.lst
字号:
0283 9508 RET
0284 D5CB RCALL _OSTaskSwHook
0285 9100030D LDS R16,_OSRunning
0287 9503 INC R16
(0705) if (OSRdyTbl[y] == 0x00) {
0288 9300030D STS _OSRunning,R16
028A 940E0B20 CALL 0xB20
028C 91C1 LD R28,Z+
(0706) OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pending */
028D 91D1 LD R29,Z+
028E 9109 LD R16,Y+
028F BF0D OUT 0x3D,R16
0290 9109 LD R16,Y+
0291 BF0E OUT 0x3E,R16
0292 9109 LD R16,Y+
0293 BF0F OUT 0x3F,R16
0294 9109 LD R16,Y+
0295 BF0B OUT 0x3B,R16
0296 91F9 LD R31,Y+
0297 91E9 LD R30,Y+
0298 940E0ABA CALL 0xABA
(0707) }
(0708) pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting list */
029A 9179 LD R23,Y+
029B 9169 LD R22,Y+
029C 9159 LD R21,Y+
029D 9149 LD R20,Y+
029E 9139 LD R19,Y+
029F 9129 LD R18,Y+
02A0 9119 LD R17,Y+
02A1 9109 LD R16,Y+
02A2 90F9 LD R15,Y+
02A3 90E9 LD R14,Y+
02A4 90D9 LD R13,Y+
02A5 940E0AAA CALL 0xAAA
(0709) pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
02A7 9069 LD R6,Y+
02A8 9059 LD R5,Y+
02A9 9049 LD R4,Y+
02AA 9039 LD R3,Y+
02AB 9029 LD R2,Y+
02AC 9019 LD R1,Y+
02AD 9009 LD R0,Y+
02AE 9508 RET
02AF 920A ST R0,-Y
(0710) }
02B0 921A ST R1,-Y
02B1 922A ST R2,-Y
02B2 923A ST R3,-Y
_OS_EventTO:
y --> R20
pevent --> R16
02B3 924A ST R4,-Y
02B4 925A ST R5,-Y
(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;
02B5 926A ST R6,-Y
02B6 927A ST R7,-Y
02B7 928A ST R8,-Y
02B8 929A ST R9,-Y
02B9 92AA ST R10,-Y
(0734) pevent->OSEventTbl[y] &= ~OSTCBCur->OSTCBBitX;
02BA 92BA ST R11,-Y
02BB 92CA ST R12,-Y
02BC 92DA ST R13,-Y
02BD 92EA ST R14,-Y
02BE 92FA ST R15,-Y
02BF 930A ST R16,-Y
02C0 931A ST R17,-Y
02C1 932A ST R18,-Y
02C2 933A ST R19,-Y
02C3 934A ST R20,-Y
02C4 935A ST R21,-Y
02C5 936A ST R22,-Y
02C6 937A ST R23,-Y
02C7 938A ST R24,-Y
02C8 939A ST R25,-Y
02C9 93AA ST R26,-Y
(0735) if (pevent->OSEventTbl[y] == 0x00) {
02CA 93BA ST R27,-Y
02CB 93EA ST R30,-Y
02CC 93FA ST R31,-Y
02CD B70B IN R16,0x3B
02CE 930A ST R16,-Y
02CF B70F IN R16,0x3F
02D0 940E0B37 CALL 0xB37
02D2 940E0A6F CALL 0xA6F
(0736) pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
02D4 93C1 ST R28,Z+
02D5 93D1 ST R29,Z+
02D6 D579 RCALL _OSTaskSwHook
02D7 91000311 LDS R16,_OSPrioHighRdy
(0737) }
(0738) OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
02D9 93000312 STS _OSPrioCur,R16
02DB 940E0B20 CALL 0xB20
(0739) OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
02DD 93E00206 STS _OSTCBCur,R30
02DF 93F00207 STS _OSTCBCur+1,R31
02E1 91C1 LD R28,Z+
02E2 91D1 LD R29,Z+
02E3 9109 LD R16,Y+
(0740) }
02E4 BF0D OUT 0x3D,R16
02E5 9109 LD R16,Y+
02E6 BF0E OUT 0x3E,R16
_OS_EventWaitListInit:
ptbl --> R20
pevent --> R16
02E7 9109 LD R16,Y+
02E8 BF0F OUT 0x3F,R16
(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 */
02E9 9109 LD R16,Y+
02EA BF0B OUT 0x3B,R16
02EB 91F9 LD R31,Y+
(0763) ptbl = &pevent->OSEventTbl[0];
02EC 91E9 LD R30,Y+
02ED 940E0ABA CALL 0xABA
(0764)
(0765) #if OS_EVENT_TBL_SIZE > 0
(0766) *ptbl++ = 0x00;
(0767) #endif
(0768)
(0769) #if OS_EVENT_TBL_SIZE > 1
(0770) *ptbl++ = 0x00;
02EF 9179 LD R23,Y+
02F0 9169 LD R22,Y+
(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) }
02F1 9159 LD R21,Y+
02F2 9149 LD R20,Y+
02F3 9139 LD R19,Y+
_OS_InitEventList:
pevent2 --> R20
i --> R22
pevent1 --> R10
02F4 9129 LD R18,Y+
02F5 9119 LD R17,Y+
(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 */
02F6 9109 LD R16,Y+
02F7 90F9 LD R15,Y+
02F8 90E9 LD R14,Y+
02F9 90D9 LD R13,Y+
02FA 940E0AAA CALL 0xAAA
(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 */
02FC 9069 LD R6,Y+
02FD 9059 LD R5,Y+
02FE 9049 LD R4,Y+
(0825) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
02FF 9039 LD R3,Y+
0300 9029 LD R2,Y+
0301 9019 LD R1,Y+
(0826) pevent1->OSEventPtr = pevent2;
0302 9009 LD R0,Y+
0303 9508 RET
(0827) #if OS_EVENT_NAME_SIZE > 1
(0828) pevent1->OSEventName[0] = '?'; /* Unknown name */
(0829) pevent1->OSEventName[1] = OS_ASCII_NUL;
(0830) #endif
(0831) pevent1++;
0304 D54B RCALL _OSTaskSwHook
0305 91000311 LDS R16,_OSPrioHighRdy
(0832) pevent2++;
0307 93000312 STS _OSPrioCur,R16
0309 940E0B20 CALL 0xB20
030B 93E00206 STS _OSTCBCur,R30
(0833) }
(0834) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
030D 93F00207 STS _OSTCBCur+1,R31
(0835) pevent1->OSEventPtr = (OS_EVENT *)0;
030F 91C1 LD R28,Z+
0310 91D1 LD R29,Z+
0311 9109 LD R16,Y+
(0836) #if OS_EVENT_NAME_SIZE > 1
(0837) pevent1->OSEventName[0] = '?';
(0838) pevent1->OSEventName[1] = OS_ASCII_NUL;
(0839) #endif
(0840) OSEventFreeList = &OSEventTbl[0];
0312 BF0D OUT 0x3D,R16
0313 9109 LD R16,Y+
0314 BF0E OUT 0x3E,R16
0315 9109 LD R16,Y+
0316 BF0F OUT 0x3F,R16
0317 9109 LD R16,Y+
(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) }
0318 BF0B OUT 0x3B,R16
0319 91F9 LD R31,Y+
031A 91E9 LD R30,Y+
_OS_InitMisc:
031B 940E0ABA CALL 0xABA
(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 */
031D 9179 LD R23,Y+
(0873) OSLockNesting = 0; /* Clear the scheduling lock counter */
031E 9169 LD R22,Y+
031F 9159 LD R21,Y+
(0874)
(0875) OSTaskCtr = 0; /* Clear the number of tasks */
0320 9149 LD R20,Y+
0321 9139 LD R19,Y+
(0876)
(0877) OSRunning = FALSE; /* Indicate that multitasking not started */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -