📄 os_task.lst
字号:
177:../OSsrc/os_task.c **** *
178:../OSsrc/os_task.c **** * Returns : OS_ERR_NONE if the function was successful.
179:../OSsrc/os_task.c **** * OS_PRIO_EXIT if the task priority already exist
180:../OSsrc/os_task.c **** * (each task MUST have a unique priority).
181:../OSsrc/os_task.c **** * OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allow
182:../OSsrc/os_task.c **** * (i.e. >= OS_LOWEST_PRIO)
183:../OSsrc/os_task.c **** * OS_ERR_TASK_CREATE_ISR if you tried to create a task from an ISR.
184:../OSsrc/os_task.c **** ***************************************************************************************************
185:../OSsrc/os_task.c **** */
186:../OSsrc/os_task.c ****
187:../OSsrc/os_task.c **** #if OS_TASK_CREATE_EN > 0
188:../OSsrc/os_task.c **** INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)
189:../OSsrc/os_task.c **** {
115 .LM1:
116 /* prologue: frame size=0 */
117 0000 9F92 push r9
118 0002 AF92 push r10
119 0004 BF92 push r11
120 0006 CF92 push r12
121 0008 DF92 push r13
122 000a EF92 push r14
123 000c FF92 push r15
124 000e 0F93 push r16
125 0010 1F93 push r17
126 0012 CF93 push r28
127 0014 DF93 push r29
128 /* prologue end (size=11) */
129 0016 DC01 movw r26,r24
130 0018 922E mov r9,r18
190:../OSsrc/os_task.c **** OS_STK *psp;
191:../OSsrc/os_task.c **** INT8U err;
192:../OSsrc/os_task.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
193:../OSsrc/os_task.c **** OS_CPU_SR cpu_sr = 0;
194:../OSsrc/os_task.c **** #endif
195:../OSsrc/os_task.c ****
196:../OSsrc/os_task.c ****
197:../OSsrc/os_task.c ****
198:../OSsrc/os_task.c **** #if OS_ARG_CHK_EN > 0
199:../OSsrc/os_task.c **** if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable range
132 .LM2:
133 001a 8FE3 ldi r24,lo8(63)
134 001c 8217 cp r24,r18
135 001e 18F4 brsh .L2
200:../OSsrc/os_task.c **** return (OS_ERR_PRIO_INVALID);
137 .LM3:
138 0020 8AE2 ldi r24,lo8(42)
139 0022 90E0 ldi r25,hi8(42)
140 0024 42C0 rjmp .L1
141 .L2:
201:../OSsrc/os_task.c **** }
202:../OSsrc/os_task.c **** #endif
203:../OSsrc/os_task.c **** OS_ENTER_CRITICAL();
143 .LM4:
144 /* #APP */
145 0026 F894 cli
204:../OSsrc/os_task.c **** if (OSIntNesting > 0) { /* Make sure we don't create the task from within an I
147 .LM5:
148 /* #NOAPP */
149 0028 8091 0000 lds r24,OSIntNesting
150 002c 8823 tst r24
151 002e 21F0 breq .L3
205:../OSsrc/os_task.c **** OS_EXIT_CRITICAL();
153 .LM6:
154 /* #APP */
155 0030 7894 sei
206:../OSsrc/os_task.c **** return (OS_ERR_TASK_CREATE_ISR);
157 .LM7:
158 /* #NOAPP */
159 0032 8CE3 ldi r24,lo8(60)
160 0034 90E0 ldi r25,hi8(60)
161 0036 39C0 rjmp .L1
162 .L3:
207:../OSsrc/os_task.c **** }
208:../OSsrc/os_task.c **** if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priori
164 .LM8:
165 0038 C22F mov r28,r18
166 003a DD27 clr r29
167 003c FE01 movw r30,r28
168 003e EC0F add r30,r28
169 0040 FD1F adc r31,r29
170 0042 E050 subi r30,lo8(-(OSTCBPrioTbl))
171 0044 F040 sbci r31,hi8(-(OSTCBPrioTbl))
172 0046 8081 ld r24,Z
173 0048 9181 ldd r25,Z+1
174 004a 892B or r24,r25
175 004c 59F5 brne .L4
209:../OSsrc/os_task.c **** OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing .
177 .LM9:
178 004e 81E0 ldi r24,lo8(1)
179 0050 90E0 ldi r25,hi8(1)
180 0052 9183 std Z+1,r25
181 0054 8083 st Z,r24
210:../OSsrc/os_task.c **** /* ... the same thing until task is created.
211:../OSsrc/os_task.c **** OS_EXIT_CRITICAL();
183 .LM10:
184 /* #APP */
185 0056 7894 sei
212:../OSsrc/os_task.c **** psp = OSTaskStkInit(task, p_arg, ptos, 0); /* Initialize the task's stack
187 .LM11:
188 /* #NOAPP */
189 0058 20E0 ldi r18,lo8(0)
190 005a 30E0 ldi r19,hi8(0)
191 005c CD01 movw r24,r26
192 005e 0E94 0000 call OSTaskStkInit
213:../OSsrc/os_task.c **** err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
194 .LM12:
195 0062 AA24 clr r10
196 0064 BB24 clr r11
197 0066 6501 movw r12,r10
198 0068 EE24 clr r14
199 006a FF24 clr r15
200 006c 8701 movw r16,r14
201 006e 9501 movw r18,r10
202 0070 A501 movw r20,r10
203 0072 BC01 movw r22,r24
204 0074 892D mov r24,r9
205 0076 0E94 0000 call OS_TCBInit
206 007a 182F mov r17,r24
214:../OSsrc/os_task.c **** if (err == OS_ERR_NONE) {
208 .LM13:
209 007c 8823 tst r24
210 007e 39F4 brne .L5
215:../OSsrc/os_task.c **** if (OSRunning == OS_TRUE) { /* Find highest priority task if multitasking has star
212 .LM14:
213 0080 8091 0000 lds r24,OSRunning
214 0084 8130 cpi r24,lo8(1)
215 0086 59F4 brne .L7
216:../OSsrc/os_task.c **** OS_Sched();
217 .LM15:
218 0088 0E94 0000 call OS_Sched
219 008c 08C0 rjmp .L7
220 .L5:
217:../OSsrc/os_task.c **** }
218:../OSsrc/os_task.c **** } else {
219:../OSsrc/os_task.c **** OS_ENTER_CRITICAL();
222 .LM16:
223 /* #APP */
224 008e F894 cli
220:../OSsrc/os_task.c **** OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others
226 .LM17:
227 /* #NOAPP */
228 0090 CC0F add r28,r28
229 0092 DD1F adc r29,r29
230 0094 C050 subi r28,lo8(-(OSTCBPrioTbl))
231 0096 D040 sbci r29,hi8(-(OSTCBPrioTbl))
232 0098 1982 std Y+1,__zero_reg__
233 009a 1882 st Y,__zero_reg__
221:../OSsrc/os_task.c **** OS_EXIT_CRITICAL();
235 .LM18:
236 /* #APP */
237 009c 7894 sei
238 /* #NOAPP */
239 .L7:
222:../OSsrc/os_task.c **** }
223:../OSsrc/os_task.c **** return (err);
241 .LM19:
242 009e 812F mov r24,r17
243 00a0 9927 clr r25
244 00a2 03C0 rjmp .L1
245 .L4:
224:../OSsrc/os_task.c **** }
225:../OSsrc/os_task.c **** OS_EXIT_CRITICAL();
247 .LM20:
248 /* #APP */
249 00a4 7894 sei
226:../OSsrc/os_task.c **** return (OS_ERR_PRIO_EXIST);
251 .LM21:
252 /* #NOAPP */
253 00a6 88E2 ldi r24,lo8(40)
254 00a8 90E0 ldi r25,hi8(40)
255 .L1:
256 /* epilogue: frame size=0 */
257 00aa DF91 pop r29
258 00ac CF91 pop r28
259 00ae 1F91 pop r17
260 00b0 0F91 pop r16
261 00b2 FF90 pop r15
262 00b4 EF90 pop r14
263 00b6 DF90 pop r13
264 00b8 CF90 pop r12
265 00ba BF90 pop r11
266 00bc AF90 pop r10
267 00be 9F90 pop r9
268 00c0 0895 ret
269 /* epilogue end (size=12) */
270 /* function OSTaskCreate size 103 (80) */
276 .Lscope0:
281 .global OS_TaskStkClr
283 OS_TaskStkClr:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -