📄 os_core.lst
字号:
132:os/source/os_core.c **** pevent1 = &OSEventTbl[0];
133:os/source/os_core.c **** pevent2 = &OSEventTbl[1];
525 .LM26:
526 00b6 80E0 ldi r24,lo8(OSEventTbl+8)
527 00b8 90E0 ldi r25,hi8(OSEventTbl+8)
134:os/source/os_core.c **** for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT contro
135:os/source/os_core.c **** pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
529 .LM27:
530 00ba 1092 0000 sts OSEventTbl,__zero_reg__
136:os/source/os_core.c **** pevent1->OSEventPtr = pevent2;
532 .LM28:
533 00be 9093 0000 sts (OSEventTbl+4)+1,r25
534 00c2 8093 0000 sts OSEventTbl+4,r24
535 00c6 0896 adiw r24,8
537 .LM29:
538 00c8 1092 0000 sts OSEventTbl+8,__zero_reg__
540 .LM30:
541 00cc 9093 0000 sts (OSEventTbl+12)+1,r25
542 00d0 8093 0000 sts OSEventTbl+12,r24
543 00d4 4097 sbiw r24,16
137:os/source/os_core.c **** pevent1++;
138:os/source/os_core.c **** pevent2++;
139:os/source/os_core.c **** }
140:os/source/os_core.c **** pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
545 .LM31:
546 00d6 1092 0000 sts OSEventTbl+16,__zero_reg__
141:os/source/os_core.c **** pevent1->OSEventPtr = (OS_EVENT *)0;
548 .LM32:
549 00da 1092 0000 sts (OSEventTbl+20)+1,__zero_reg__
550 00de 1092 0000 sts OSEventTbl+20,__zero_reg__
142:os/source/os_core.c **** OSEventFreeList = &OSEventTbl[0];
552 .LM33:
553 00e2 9093 0000 sts (OSEventFreeList)+1,r25
554 00e6 8093 0000 sts OSEventFreeList,r24
143:os/source/os_core.c **** #endif
144:os/source/os_core.c **** #endif
145:os/source/os_core.c ****
146:os/source/os_core.c **** #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
147:os/source/os_core.c **** OS_FlagInit(); /* Initialize the event flag struc
148:os/source/os_core.c **** #endif
149:os/source/os_core.c ****
150:os/source/os_core.c **** #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
151:os/source/os_core.c **** OS_QInit(); /* Initialize the message queue st
556 .LM34:
557 00ea 0E94 0000 call OS_QInit
152:os/source/os_core.c **** #endif
153:os/source/os_core.c ****
154:os/source/os_core.c **** #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
155:os/source/os_core.c **** OS_MemInit(); /* Initialize the memory manager
156:os/source/os_core.c **** #endif
157:os/source/os_core.c ****
158:os/source/os_core.c **** /* ------------------------------------- CREATION OF 'IDLE' TASK ------------------------------
159:os/source/os_core.c **** #if OS_TASK_CREATE_EXT_EN > 0
160:os/source/os_core.c **** #if OS_STK_GROWTH == 1
161:os/source/os_core.c **** (void)OSTaskCreateExt(OS_TaskIdle,
559 .LM35:
560 00ee 83E0 ldi r24,lo8(3)
561 00f0 90E0 ldi r25,hi8(3)
562 00f2 9F93 push r25
563 00f4 8F93 push r24
564 00f6 8824 clr r8
565 00f8 9924 clr r9
566 00fa 9EE1 ldi r25,lo8(30)
567 00fc A92E mov r10,r25
568 00fe B12C mov r11,__zero_reg__
569 0100 C12C mov r12,__zero_reg__
570 0102 D12C mov r13,__zero_reg__
571 0104 80E0 ldi r24,lo8(OSTaskIdleStk)
572 0106 E82E mov r14,r24
573 0108 80E0 ldi r24,hi8(OSTaskIdleStk)
574 010a F82E mov r15,r24
575 010c 0FEF ldi r16,lo8(-1)
576 010e 1FEF ldi r17,hi8(-1)
577 0110 2AE0 ldi r18,lo8(10)
578 0112 40E0 ldi r20,lo8(OSTaskIdleStk+29)
579 0114 50E0 ldi r21,hi8(OSTaskIdleStk+29)
580 0116 B401 movw r22,r8
581 0118 80E0 ldi r24,lo8(pm(OS_TaskIdle))
582 011a 90E0 ldi r25,hi8(pm(OS_TaskIdle))
583 011c 0E94 0000 call OSTaskCreateExt
162:os/source/os_core.c **** (void *)0, /* No arguments passed to OS_T
163:os/source/os_core.c **** &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack
164:os/source/os_core.c **** OS_IDLE_PRIO, /* Lowest priority level
165:os/source/os_core.c **** OS_TASK_IDLE_ID,
166:os/source/os_core.c **** &OSTaskIdleStk[0], /* Set Bottom-Of-Stack
167:os/source/os_core.c **** OS_TASK_IDLE_STK_SIZE,
168:os/source/os_core.c **** (void *)0, /* No TCB extension
169:os/source/os_core.c **** OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + cle
170:os/source/os_core.c **** #else
171:os/source/os_core.c **** (void)OSTaskCreateExt(OS_TaskIdle,
172:os/source/os_core.c **** (void *)0, /* No arguments passed to OS_T
173:os/source/os_core.c **** &OSTaskIdleStk[0], /* Set Top-Of-Stack
174:os/source/os_core.c **** OS_IDLE_PRIO, /* Lowest priority level
175:os/source/os_core.c **** OS_TASK_IDLE_ID,
176:os/source/os_core.c **** &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack
177:os/source/os_core.c **** OS_TASK_IDLE_STK_SIZE,
178:os/source/os_core.c **** (void *)0, /* No TCB extension
179:os/source/os_core.c **** OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + cle
180:os/source/os_core.c **** #endif
181:os/source/os_core.c **** #else
182:os/source/os_core.c **** #if OS_STK_GROWTH == 1
183:os/source/os_core.c **** (void)OSTaskCreate(OS_TaskIdle,
184:os/source/os_core.c **** (void *)0,
185:os/source/os_core.c **** &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
186:os/source/os_core.c **** OS_IDLE_PRIO);
187:os/source/os_core.c **** #else
188:os/source/os_core.c **** (void)OSTaskCreate(OS_TaskIdle,
189:os/source/os_core.c **** (void *)0,
190:os/source/os_core.c **** &OSTaskIdleStk[0],
191:os/source/os_core.c **** OS_IDLE_PRIO);
192:os/source/os_core.c **** #endif
193:os/source/os_core.c **** #endif
194:os/source/os_core.c ****
195:os/source/os_core.c **** /* ------------------------------- CREATION OF 'STATISTIC' TASK -------------------------------
196:os/source/os_core.c **** #if OS_TASK_STAT_EN > 0
197:os/source/os_core.c **** #if OS_TASK_CREATE_EXT_EN > 0
198:os/source/os_core.c **** #if OS_STK_GROWTH == 1
199:os/source/os_core.c **** (void)OSTaskCreateExt(OS_TaskStat,
200:os/source/os_core.c **** (void *)0, /* No args passed to OS_
201:os/source/os_core.c **** &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack
202:os/source/os_core.c **** OS_STAT_PRIO, /* One higher than the i
203:os/source/os_core.c **** OS_TASK_STAT_ID,
204:os/source/os_core.c **** &OSTaskStatStk[0], /* Set Bottom-Of-Stack
205:os/source/os_core.c **** OS_TASK_STAT_STK_SIZE,
206:os/source/os_core.c **** (void *)0, /* No TCB extension
207:os/source/os_core.c **** OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking
208:os/source/os_core.c **** #else
209:os/source/os_core.c **** (void)OSTaskCreateExt(OS_TaskStat,
210:os/source/os_core.c **** (void *)0, /* No args passed to OS_
211:os/source/os_core.c **** &OSTaskStatStk[0], /* Set Top-Of-Stack
212:os/source/os_core.c **** OS_STAT_PRIO, /* One higher than the i
213:os/source/os_core.c **** OS_TASK_STAT_ID,
214:os/source/os_core.c **** &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Bottom-Of-Stack
215:os/source/os_core.c **** OS_TASK_STAT_STK_SIZE,
216:os/source/os_core.c **** (void *)0, /* No TCB extension
217:os/source/os_core.c **** OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking
218:os/source/os_core.c **** #endif
219:os/source/os_core.c **** #else
220:os/source/os_core.c **** #if OS_STK_GROWTH == 1
221:os/source/os_core.c **** (void)OSTaskCreate(OS_TaskStat,
222:os/source/os_core.c **** (void *)0, /* No args passed to OS_
223:os/source/os_core.c **** &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack
224:os/source/os_core.c **** OS_STAT_PRIO); /* One higher than the i
225:os/source/os_core.c **** #else
226:os/source/os_core.c **** (void)OSTaskCreate(OS_TaskStat,
227:os/source/os_core.c **** (void *)0, /* No args passed to OS_
228:os/source/os_core.c **** &OSTaskStatStk[0], /* Set Top-Of-Stack
229:os/source/os_core.c **** OS_STAT_PRIO); /* One higher than the i
230:os/source/os_core.c **** #endif
231:os/source/os_core.c **** #endif
232:os/source/os_core.c **** #endif
233:os/source/os_core.c ****
234:os/source/os_core.c **** #if OS_VERSION >= 204
235:os/source/os_core.c **** OSInitHookEnd(); /* Call port specific in
585 .LM36:
586 0120 0E94 0000 call OSInitHookEnd
587 0124 0F90 pop __tmp_reg__
588 0126 0F90 pop __tmp_reg__
589 /* epilogue: frame size=0 */
590 0128 1F91 pop r17
591 012a 0F91 pop r16
592 012c FF90 pop r15
593 012e EF90 pop r14
594 0130 DF90 pop r13
595 0132 CF90 pop r12
596 0134 BF90 pop r11
597 0136 AF90 pop r10
598 0138 9F90 pop r9
599 013a 8F90 pop r8
600 013c 0895 ret
601 /* epilogue end (size=11) */
602 /* function OSInit size 159 (138) */
609 .Lscope0:
611 .global OSIntEnter
613 OSIntEnter:
236:os/source/os_core.c **** #endif
237:os/source/os_core.c **** }
238:os/source/os_core.c **** /*$PAGE*/
239:os/source/os_core.c **** /*
240:os/source/os_core.c **** ***************************************************************************************************
241:os/source/os_core.c **** * ENTER ISR
242:os/source/os_core.c **** *
243:os/source/os_core.c **** * Description: This function is used to notify uC/OS-II that you are about to service an interrupt
244:os/source/os_core.c **** * service routine (ISR). This allows uC/OS-II to keep track of interrupt nesting and
245:os/source/os_core.c **** * only perform rescheduling at the last nested ISR.
246:os/source/os_core.c **** *
247:os/source/os_core.c **** * Arguments : none
248:os/source/os_core.c **** *
249:os/source/os_core.c **** * Returns : none
250:os/source/os_core.c **** *
251:os/source/os_core.c **** * Notes : 1) Your ISR can directly increment OSIntNesting without calling this function becaus
252:os/source/os_core.c **** * OSIntNesting has been declared 'global'. You MUST, however, be sure that the inc
253:os/source/os_core.c **** * is performed 'indivisibly' by your processor to ensure proper access to this crit
254:os/source/os_core.c **** * resource.
255:os/source/os_core.c **** * 2) You MUST still call OSIntExit() even though you increment OSIntNesting directly.
256:os/source/os_core.c **** * 3) You MUST invoke OSIntEnter() and OSIntExit() in pair. In other words, for every
257:os/source/os_core.c **** * to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() a
258:os/source/os_core.c **** * end of the ISR.
259:os/source/os_core.c **** ***************************************************************************************************
260:os/source/os_core.c **** */
261:os/source/os_core.c ****
262:os/source/os_core.c **** void OSIntEnter (void)
263:os/source/os_core.c **** {
615 .LM37:
616 /* prologue: frame size=0 */
617 /* prologue end (size=0) */
264:os/source/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
265:os/source/os_core.c **** OS_CPU_SR cpu_sr;
266:os/source/os_core.c **** #endif
267:os/source/os_core.c ****
268:os/source/os_core.c ****
269:os/source/os_core.c **** OS_ENTER_CRITICAL();
619 .LM38:
620 /* #APP */
621 013e F894 cli
270:os/source/os_core.c **** if (OSIntNesting < 255) {
623 .LM39:
624 /* #NOAPP */
625 0140 8091 0000 lds r24,OSIntNesting
626 0144 8F3F cpi r24,lo8(-1)
627 0146 19F0 breq .L35
271:os/source/os_core.c **** OSIntNesting++; /* Increment ISR nesting level
629 .LM40:
630 0148 8F5F subi r24,lo8(-(1))
631 014a 8093 0000 sts OSIntNesting,r24
632 .L35:
272:os/source/os_core.c **** }
273:os/source/os_core.c **** OS_EXIT_CRITICAL();
634 .LM41:
635 /* #APP */
636 014e 7894 sei
637 /* #NOAPP */
638 /* epilogue: frame size=0 */
639 0150 0895 ret
640 /* epilogue end (size=1) */
641 /* function OSIntEnter size 12 (11) */
643 .Lscope1:
645 .global OSIntExit
647 OSIntExit:
274:os/source/os_core.c **** }
275:os/source/os_core.c **** /*$PAGE*/
276:os/source/os_core.c **** /*
277:os/source/os_core.c **** ***************************************************************************************************
278:os/source/os_core.c **** * EXIT ISR
279:os/source/os_core.c **** *
280:os/source/os_core.c **** * Description: This function is used to notify uC/OS-II that you have completed serviving an ISR.
281:os/source/os_core.c **** * the last nested ISR has completed, uC/OS-II will call the scheduler to determine whe
282:os/source/os_core.c **** * a new, high-priority task, is ready to run.
283:os/source/os_core.c **** *
284:os/source/os_core.c **** * Arguments : none
285:os/source/os_core.c **** *
286:os/source/os_core.c **** * Returns : none
287:os/source/os_core.c **** *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -