📄 ucos-port2.lst
字号:
(0100) #endif
(0101) OSCtxSwCtr = 0; /* Clear the context switch counter */
00F6 E040 LDI R20,0
00F7 E050 LDI R21,0
00F8 E060 LDI R22,0
00F9 E070 LDI R23,0
00FA 935001DA STS OSCtxSwCtr+1,R21
00FC 934001D9 STS OSCtxSwCtr,R20
00FE 937001DC STS OSCtxSwCtr+3,R23
0100 936001DB STS OSCtxSwCtr+2,R22
(0102) OSRdyGrp = 0x00; /* Clear the ready list */
0102 922001AD STS OSRdyGrp,R2
(0103) prdytbl = &OSRdyTbl[0];
0104 EA8A LDI R24,0xAA
0105 E091 LDI R25,1
0106 839E STD Y+6,R25
0107 838D STD Y+5,R24
(0104) for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
0108 2444 CLR R4
0109 2455 CLR R5
010A C009 RJMP 0x0114
(0105) *prdytbl++ = 0x00;
010B 2422 CLR R2
010C 81ED LDD R30,Y+5
010D 81FE LDD R31,Y+6
010E 9221 ST R2,Z+
010F 83FE STD Y+6,R31
0110 83ED STD Y+5,R30
0111 01C2 MOVW R24,R4
0112 9601 ADIW R24,1
0113 012C MOVW R4,R24
0114 01C2 MOVW R24,R4
0115 3083 CPI R24,3
0116 E0E0 LDI R30,0
0117 079E CPC R25,R30
0118 F390 BCS 0x010B
(0106) }
(0107)
(0108) OSPrioCur = 0;
0119 2422 CLR R2
011A 922001AF STS OSPrioCur,R2
(0109) OSPrioHighRdy = 0;
011C 922001AE STS OSPrioHighRdy,R2
(0110) OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
011E 2433 CLR R3
011F 9230011F STS OSTCBHighRdy+1,R3
0121 9220011E STS OSTCBHighRdy,R2
(0111) OSTCBCur = (OS_TCB *)0;
0123 92300123 STS OSTCBCur+1,R3
0125 92200122 STS OSTCBCur,R2
(0112) OSTCBList = (OS_TCB *)0;
0127 9230011D STS OSTCBList+1,R3
0129 9220011C STS OSTCBList,R2
(0113) for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
012B 2444 CLR R4
012C 2455 CLR R5
012D C010 RJMP 0x013E
(0114) OSTCBPrioTbl[i] = (OS_TCB *)0;
012E E002 LDI R16,2
012F E010 LDI R17,0
0130 0192 MOVW R18,R4
0131 DC1A RCALL empy16s
0132 01F8 MOVW R30,R16
0133 EF82 LDI R24,0xF2
0134 E090 LDI R25,0
0135 0FE8 ADD R30,R24
0136 1FF9 ADC R31,R25
0137 2422 CLR R2
0138 2433 CLR R3
0139 8231 STD Z+1,R3
013A 8220 STD Z+0,R2
013B 01C2 MOVW R24,R4
013C 9601 ADIW R24,1
013D 012C MOVW R4,R24
013E 01C2 MOVW R24,R4
013F 3185 CPI R24,0x15
0140 E0E0 LDI R30,0
0141 079E CPC R25,R30
0142 F358 BCS 0x012E
(0115) }
(0116) ptcb1 = &OSTCBTbl[0];
0143 E982 LDI R24,0x92
0144 E090 LDI R25,0
0145 017C MOVW R14,R24
(0117) ptcb2 = &OSTCBTbl[1];
0146 EA82 LDI R24,0xA2
0147 E090 LDI R25,0
0148 839C STD Y+4,R25
0149 838B STD Y+3,R24
(0118) for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
014A 2444 CLR R4
014B 2455 CLR R5
014C C00F RJMP 0x015C
(0119) ptcb1->OSTCBNext = ptcb2;
014D 01F7 MOVW R30,R14
014E 800B LDD R0,Y+3
014F 801C LDD R1,Y+4
0150 8213 STD Z+3,R1
0151 8202 STD Z+2,R0
(0120) ptcb1++;
0152 01C7 MOVW R24,R14
0153 9640 ADIW R24,0x10
0154 017C MOVW R14,R24
(0121) ptcb2++;
0155 01C0 MOVW R24,R0
0156 9640 ADIW R24,0x10
0157 839C STD Y+4,R25
0158 838B STD Y+3,R24
0159 01C2 MOVW R24,R4
015A 9601 ADIW R24,1
015B 012C MOVW R4,R24
015C 01C2 MOVW R24,R4
015D 3085 CPI R24,5
015E E0E0 LDI R30,0
015F 079E CPC R25,R30
0160 F360 BCS 0x014D
(0122) }
(0123) ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
0161 2422 CLR R2
0162 2433 CLR R3
0163 01F7 MOVW R30,R14
0164 8233 STD Z+3,R3
0165 8222 STD Z+2,R2
(0124) OSTCBFreeList = &OSTCBTbl[0];
0166 E982 LDI R24,0x92
0167 E090 LDI R25,0
0168 93900121 STS OSTCBFreeList+1,R25
016A 93800120 STS OSTCBFreeList,R24
(0125)
(0126) #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
(0127) #if OS_MAX_EVENTS == 1
(0128) OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
(0129) OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
(0130) OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
(0131) #else
(0132) pevent1 = &OSEventTbl[0];
016C EB83 LDI R24,0xB3
016D E091 LDI R25,1
016E 015C MOVW R10,R24
(0133) pevent2 = &OSEventTbl[1];
016F EB8C LDI R24,0xBC
0170 E091 LDI R25,1
0171 016C MOVW R12,R24
(0134) for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
0172 2444 CLR R4
0173 2455 CLR R5
0174 C00E RJMP 0x0183
(0135) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
0175 2422 CLR R2
0176 01F5 MOVW R30,R10
0177 8220 STD Z+0,R2
(0136) pevent1->OSEventPtr = pevent2;
0178 82D5 STD Z+5,R13
0179 82C4 STD Z+4,R12
(0137) pevent1++;
017A 01C5 MOVW R24,R10
017B 9609 ADIW R24,0x9
017C 015C MOVW R10,R24
(0138) pevent2++;
017D 01C6 MOVW R24,R12
017E 9609 ADIW R24,0x9
017F 016C MOVW R12,R24
0180 01C2 MOVW R24,R4
0181 9601 ADIW R24,1
0182 012C MOVW R4,R24
0183 01C2 MOVW R24,R4
0184 3083 CPI R24,3
0185 E0E0 LDI R30,0
0186 079E CPC R25,R30
0187 F368 BCS 0x0175
(0139) }
(0140) pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
0188 2422 CLR R2
0189 01F5 MOVW R30,R10
018A 8220 STD Z+0,R2
(0141) pevent1->OSEventPtr = (OS_EVENT *)0;
018B 2433 CLR R3
018C 8235 STD Z+5,R3
018D 8224 STD Z+4,R2
(0142) OSEventFreeList = &OSEventTbl[0];
018E EB83 LDI R24,0xB3
018F E091 LDI R25,1
0190 939001D8 STS OSEventFreeList+1,R25
0192 938001D7 STS OSEventFreeList,R24
(0143) #endif
(0144) #endif
(0145)
(0146) #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
(0147) OS_FlagInit(); /* Initialize the event flag structures */
(0148) #endif
(0149)
(0150) #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
(0151) OS_QInit(); /* Initialize the message queue structures */
(0152) #endif
(0153)
(0154) #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
(0155) OS_MemInit(); /* Initialize the memory manager */
(0156) #endif
(0157)
(0158) /* ------------------------------------- CREATION OF 'IDLE' TASK --------------------------------------- */
(0159) #if OS_TASK_CREATE_EXT_EN > 0
(0160) #if OS_STK_GROWTH == 1
(0161) (void)OSTaskCreateExt(OS_TaskIdle,
(0162) (void *)0, /* No arguments passed to OS_TaskIdle() */
(0163) &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack */
(0164) OS_IDLE_PRIO, /* Lowest priority level */
(0165) OS_TASK_IDLE_ID,
(0166) &OSTaskIdleStk[0], /* Set Bottom-Of-Stack */
(0167) OS_TASK_IDLE_STK_SIZE,
(0168) (void *)0, /* No TCB extension */
(0169) OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
(0170) #else
(0171) (void)OSTaskCreateExt(OS_TaskIdle,
(0172) (void *)0, /* No arguments passed to OS_TaskIdle() */
(0173) &OSTaskIdleStk[0], /* Set Top-Of-Stack */
(0174) OS_IDLE_PRIO, /* Lowest priority level */
(0175) OS_TASK_IDLE_ID,
(0176) &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack */
(0177) OS_TASK_IDLE_STK_SIZE,
(0178) (void *)0, /* No TCB extension */
(0179) OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
(0180) #endif
(0181) #else
(0182) #if OS_STK_GROWTH == 1
(0183) (void)OSTaskCreate(OS_TaskIdle,
0194 E184 LDI R24,0x14
0195 838A STD Y+2,R24
0196 EA83 LDI R24,0xA3
0197 E091 LDI R25,1
0198 8399 STD Y+1,R25
0199 8388 STD Y+0,R24
019A 2722 CLR R18
019B 2733 CLR R19
019C E206 LDI R16,0x26
019D E010 LDI R17,0
019E 924F PUSH R4
019F 925F PUSH R5
01A0 D67D RCALL _OSTaskCreate
01A1 905F POP R5
01A2 904F POP R4
(0184) (void *)0,
(0185) &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
(0186) OS_IDLE_PRIO);
(0187) #else
(0188) (void)OSTaskCreate(OS_TaskIdle,
(0189) (void *)0,
(0190) &OSTaskIdleStk[0],
(0191) OS_IDLE_PRIO);
(0192) #endif
(0193) #endif
(0194)
(0195) /* ------------------------------- CREATION OF 'STATISTIC' TASK ---------------------------------- */
(0196) #if OS_TASK_STAT_EN > 0
(0197) #if OS_TASK_CREATE_EXT_EN > 0
(0198) #if OS_STK_GROWTH == 1
(0199) (void)OSTaskCreateExt(OS_TaskStat,
(0200) (void *)0, /* No args passed to OS_TaskStat()*/
(0201) &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */
(0202) OS_STAT_PRIO, /* One higher than the idle task */
(0203) OS_TASK_STAT_ID,
(0204) &OSTaskStatStk[0], /* Set Bottom-Of-Stack */
(0205) OS_TASK_STAT_STK_SIZE,
(0206) (void *)0, /* No TCB extension */
(0207) OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear */
(0208) #else
(0209) (void)OSTaskCreateExt(OS_TaskStat,
(0210) (void *)0, /* No args passed to OS_TaskStat()*/
(0211) &OSTaskStatStk[0], /* Set Top-Of-Stack */
(0212) OS_STAT_PRIO, /* One higher than the idle task */
(0213) OS_TASK_STAT_ID,
(0214) &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Bottom-Of-Stack */
(0215) OS_TASK_STAT_STK_SIZE,
(0216) (void *)0, /* No TCB extension */
(0217) OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear */
(0218) #endif
(0219) #else
(0220) #if OS_STK_GROWTH == 1
(0221) (void)OSTaskCreate(OS_TaskStat,
(0222) (void *)0, /* No args passed to OS_TaskStat()*/
(0223) &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */
(0224) OS_STAT_PRIO); /* One higher than the idle task */
(0225) #else
(0226) (void)OSTaskCreate(OS_TaskStat,
(0227) (void *)0, /* No args passed to OS_TaskStat()*/
(0228) &OSTaskStatStk[0], /* Set Top-Of-Stack */
(0229) OS_STAT_PRIO); /* One higher than the idle task */
(0230) #endif
(0231) #endif
(0232) #endif
(0233)
(0234) #if OS_VERSION >= 204
(0235) OSInitHookEnd(); /* Call port specific init. code */
01A3 924F PUSH R4
01A4 925F PUSH R5
01A5 D334 RCALL _OSInitHookEnd
01A6 905F POP R5
01A7 904F POP R4
01A8 9627 ADIW R28,7
01A9 DBE4 RCALL pop_gset5
01AA 9508 RET
_OSIntEnter:
cpu_sr --> R20
01AB DBEC RCALL push_gset1
(0236) #endif
(0237) }
(0238) /*$PAGE*/
(0239) /*
(0240) *********************************************************************************************************
(0241) * ENTER ISR
(0242) *
(0243) * Description: This function is used to notify uC/OS-II that you are about to service an interrupt
(0244) * service routine (ISR). This allows uC/OS-II to keep track of interrupt nesting and thus
(0245) * only perform rescheduling at the last nested ISR.
(0246) *
(0247) * Arguments : none
(0248) *
(0249) * Returns : none
(0250) *
(0251) * Notes : 1) Your ISR can directly increment OSIntNesting without calling this function because
(0252) * OSIntNesting has been declared 'global'. You MUST, however, be sure that the increment
(0253) * is performed 'indivisibly' by your processor to ensure proper access to this critical
(0254) * resource.
(0255) * 2) You MUST still call OSIntExit() even though you increment OSIntNesting directly.
(0256) * 3) You MUST invoke OSIntEnter() and OSIntExit() in pair. In other words, for every call
(0257) * to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() at the
(0258) * end of the ISR.
(0259) *********************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -