📄 os_task.lst
字号:
288 00d0 E050 subi r30,lo8(-(OSRdyTbl))
289 00d2 F040 sbci r31,hi8(-(OSRdyTbl))
290 00d4 8081 ld r24,Z
291 00d6 8E29 or r24,r14
292 00d8 8083 st Z,r24
293 00da 1CC0 rjmp .L8
294 .L6:
87:os/source/os_task.c **** #if OS_EVENT_EN > 0
88:os/source/os_task.c **** } else {
89:os/source/os_task.c **** if ((pevent = ptcb->OSTCBEventPtr) != (OS_EVENT *)0) { /* Remove from event wait li
296 .LM22:
297 00dc AA89 ldd r26,Y+18
298 00de BB89 ldd r27,Y+19
299 00e0 1097 sbiw r26,0
300 00e2 C1F0 breq .L8
90:os/source/os_task.c **** if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
302 .LM23:
303 00e4 FD01 movw r30,r26
304 00e6 E40F add r30,r20
305 00e8 F51F adc r31,r21
306 00ea 9095 com r25
307 00ec 8681 ldd r24,Z+6
308 00ee 8923 and r24,r25
309 00f0 8683 std Z+6,r24
310 00f2 8823 tst r24
311 00f4 31F4 brne .L10
91:os/source/os_task.c **** pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
313 .LM24:
314 00f6 9D8D ldd r25,Y+29
315 00f8 9095 com r25
316 00fa FD01 movw r30,r26
317 00fc 8181 ldd r24,Z+1
318 00fe 8923 and r24,r25
319 0100 8183 std Z+1,r24
320 .L10:
92:os/source/os_task.c **** }
93:os/source/os_task.c **** pevent->OSEventGrp |= bity; /* Add new priority to wait list
322 .LM25:
323 0102 FD01 movw r30,r26
324 0104 8181 ldd r24,Z+1
325 0106 8D29 or r24,r13
326 0108 8183 std Z+1,r24
94:os/source/os_task.c **** pevent->OSEventTbl[y] |= bitx;
328 .LM26:
329 010a E00F add r30,r16
330 010c F11F adc r31,r17
331 010e 8681 ldd r24,Z+6
332 0110 8E29 or r24,r14
333 0112 8683 std Z+6,r24
334 .L8:
95:os/source/os_task.c **** }
96:os/source/os_task.c **** #endif
97:os/source/os_task.c **** }
98:os/source/os_task.c **** OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new prior
336 .LM27:
337 0114 220F add r18,r18
338 0116 331F adc r19,r19
339 0118 2050 subi r18,lo8(-(OSTCBPrioTbl))
340 011a 3040 sbci r19,hi8(-(OSTCBPrioTbl))
341 011c F901 movw r30,r18
342 011e D183 std Z+1,r29
343 0120 C083 st Z,r28
99:os/source/os_task.c **** ptcb->OSTCBPrio = newprio; /* Set new task priority
345 .LM28:
346 0122 F98E std Y+25,r15
100:os/source/os_task.c **** ptcb->OSTCBY = y;
348 .LM29:
349 0124 BB8E std Y+27,r11
101:os/source/os_task.c **** ptcb->OSTCBX = x;
351 .LM30:
352 0126 CA8E std Y+26,r12
102:os/source/os_task.c **** ptcb->OSTCBBitY = bity;
354 .LM31:
355 0128 DD8E std Y+29,r13
103:os/source/os_task.c **** ptcb->OSTCBBitX = bitx;
357 .LM32:
358 012a EC8E std Y+28,r14
104:os/source/os_task.c **** OS_EXIT_CRITICAL();
360 .LM33:
361 /* #APP */
362 012c 7894 sei
105:os/source/os_task.c **** OS_Sched(); /* Run highest priority task ready
364 .LM34:
365 /* #NOAPP */
366 012e 0E94 0000 call OS_Sched
106:os/source/os_task.c **** return (OS_NO_ERR);
368 .LM35:
369 0132 80E0 ldi r24,lo8(0)
370 0134 90E0 ldi r25,hi8(0)
371 0136 05C0 rjmp .L1
372 .L5:
107:os/source/os_task.c **** } else {
108:os/source/os_task.c **** OSTCBPrioTbl[newprio] = (OS_TCB *)0; /* Release the reserved prio.
374 .LM36:
375 0138 CD93 st X+,r28
376 013a DC93 st X,r29
109:os/source/os_task.c **** OS_EXIT_CRITICAL();
378 .LM37:
379 /* #APP */
380 013c 7894 sei
110:os/source/os_task.c **** return (OS_PRIO_ERR); /* Task to change didn't exist
382 .LM38:
383 /* #NOAPP */
384 013e 89E2 ldi r24,lo8(41)
385 0140 90E0 ldi r25,hi8(41)
386 .L1:
387 /* epilogue: frame size=0 */
388 0142 DF91 pop r29
389 0144 CF91 pop r28
390 0146 1F91 pop r17
391 0148 0F91 pop r16
392 014a FF90 pop r15
393 014c EF90 pop r14
394 014e DF90 pop r13
395 0150 CF90 pop r12
396 0152 BF90 pop r11
397 0154 0895 ret
398 /* epilogue end (size=10) */
399 /* function OSTaskChangePrio size 178 (159) */
409 .Lscope0:
415 .global OSTaskCreate
417 OSTaskCreate:
111:os/source/os_task.c **** }
112:os/source/os_task.c **** }
113:os/source/os_task.c **** }
114:os/source/os_task.c **** #endif
115:os/source/os_task.c **** /*$PAGE*/
116:os/source/os_task.c **** /*
117:os/source/os_task.c **** ***************************************************************************************************
118:os/source/os_task.c **** * CREATE A TASK
119:os/source/os_task.c **** *
120:os/source/os_task.c **** * Description: This function is used to have uC/OS-II manage the execution of a task. Tasks can ei
121:os/source/os_task.c **** * be created prior to the start of multitasking or by a running task. A task cannot b
122:os/source/os_task.c **** * created by an ISR.
123:os/source/os_task.c **** *
124:os/source/os_task.c **** * Arguments : task is a pointer to the task's code
125:os/source/os_task.c **** *
126:os/source/os_task.c **** * pdata is a pointer to an optional data area which can be used to pass parameters
127:os/source/os_task.c **** * the task when the task first executes. Where the task is concerned it thin
128:os/source/os_task.c **** * it was invoked and passed the argument 'pdata' as follows:
129:os/source/os_task.c **** *
130:os/source/os_task.c **** * void Task (void *pdata)
131:os/source/os_task.c **** * {
132:os/source/os_task.c **** * for (;;) {
133:os/source/os_task.c **** * Task code;
134:os/source/os_task.c **** * }
135:os/source/os_task.c **** * }
136:os/source/os_task.c **** *
137:os/source/os_task.c **** * ptos is a pointer to the task's top of stack. If the configuration constant
138:os/source/os_task.c **** * OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from
139:os/source/os_task.c **** * memory to low memory). 'pstk' will thus point to the highest (valid) memor
140:os/source/os_task.c **** * location of the stack. If OS_STK_GROWTH is set to 0, 'pstk' will point to
141:os/source/os_task.c **** * lowest memory location of the stack and the stack will grow with increasing
142:os/source/os_task.c **** * memory locations.
143:os/source/os_task.c **** *
144:os/source/os_task.c **** * prio is the task's priority. A unique priority MUST be assigned to each task an
145:os/source/os_task.c **** * lower the number, the higher the priority.
146:os/source/os_task.c **** *
147:os/source/os_task.c **** * Returns : OS_NO_ERR if the function was successful.
148:os/source/os_task.c **** * OS_PRIO_EXIT if the task priority already exist
149:os/source/os_task.c **** * (each task MUST have a unique priority).
150:os/source/os_task.c **** * OS_PRIO_INVALID if the priority you specify is higher that the maximum allowed
151:os/source/os_task.c **** * (i.e. >= OS_LOWEST_PRIO)
152:os/source/os_task.c **** ***************************************************************************************************
153:os/source/os_task.c **** */
154:os/source/os_task.c ****
155:os/source/os_task.c **** #if OS_TASK_CREATE_EN > 0
156:os/source/os_task.c **** INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
157:os/source/os_task.c **** {
419 .LM39:
420 /* prologue: frame size=0 */
421 0156 7F92 push r7
422 0158 8F92 push r8
423 015a 9F92 push r9
424 015c AF92 push r10
425 015e BF92 push r11
426 0160 CF92 push r12
427 0162 DF92 push r13
428 0164 EF92 push r14
429 0166 FF92 push r15
430 0168 0F93 push r16
431 016a 1F93 push r17
432 016c CF93 push r28
433 016e DF93 push r29
434 /* prologue end (size=13) */
435 0170 FC01 movw r30,r24
436 0172 722E mov r7,r18
158:os/source/os_task.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
159:os/source/os_task.c **** OS_CPU_SR cpu_sr;
160:os/source/os_task.c **** #endif
161:os/source/os_task.c **** OS_STK *psp;
162:os/source/os_task.c **** INT8U err;
163:os/source/os_task.c ****
164:os/source/os_task.c ****
165:os/source/os_task.c **** #if OS_ARG_CHK_EN > 0
166:os/source/os_task.c **** if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable range
167:os/source/os_task.c **** return (OS_PRIO_INVALID);
168:os/source/os_task.c **** }
169:os/source/os_task.c **** #endif
170:os/source/os_task.c **** OS_ENTER_CRITICAL();
438 .LM40:
439 /* #APP */
440 0174 F894 cli
171:os/source/os_task.c **** if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priori
442 .LM41:
443 /* #NOAPP */
444 0176 822E mov r8,r18
445 0178 9924 clr r9
446 017a 880C add r8,r8
447 017c 991C adc r9,r9
448 017e 80E0 ldi r24,lo8(OSTCBPrioTbl)
449 0180 90E0 ldi r25,hi8(OSTCBPrioTbl)
450 0182 880E add r8,r24
451 0184 991E adc r9,r25
452 0186 D401 movw r26,r8
453 0188 CD91 ld r28,X+
454 018a DC91 ld r29,X
455 018c 1197 sbiw r26,1
456 018e 2097 sbiw r28,0
457 0190 69F5 brne .L13
172:os/source/os_task.c **** OSTCBPrioTbl[prio] = (OS_TCB *)1; /* Reserve the priority to prevent others from doing .
459 .LM42:
460 0192 81E0 ldi r24,lo8(1)
461 0194 90E0 ldi r25,hi8(1)
462 0196 8D93 st X+,r24
463 0198 9C93 st X,r25
173:os/source/os_task.c **** /* ... the same thing until task is created.
174:os/source/os_task.c **** OS_EXIT_CRITICAL();
465 .LM43:
466 /* #APP */
467 019a 7894 sei
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -