📄 os_task.ls1
字号:
190 ; }
191 ; OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @
new priority */
192 ; ptcb->OSTCBPrio = newprio; /* Set new task priority
*/
193 ; ptcb->OSTCBY = y;
194 ; ptcb->OSTCBX = x;
195 ; ptcb->OSTCBBitY = bity;
196 ; ptcb->OSTCBBitX = bitx;
197 ; OS_EXIT_CRITICAL();
198 ; OS_Sched(); /* Run highest priority t
ask ready */
199 ; return (OS_NO_ERR);
200 ; } else {
201 ; OSTCBPrioTbl[newprio] = (OS_TCB *)0; /* Release the reserved p
rio. */
202 ; OS_EXIT_CRITICAL();
203 ; return (OS_PRIO_ERR); /* Task to change didn't
exist */
204 ; }
205 ; }
206 ; }
207 ; #endif
208 ; /*$PAGE*/
209 ; /*
210 ; *****************************************************************************************
****************
211 ; * CREATE A TASK
212 ; *
213 ; * Description: This function is used to have uC/OS-II manage the execution of a task. Ta
sks can either
214 ; * be created prior to the start of multitasking or by a running task. A tas
k cannot be
215 ; * created by an ISR.
216 ; *
217 ; * Arguments : task is a pointer to the task's code
218 ; *
219 ; * pdata is a pointer to an optional data area which can be used to pass p
arameters to
220 ; * the task when the task first executes. Where the task is concern
ed it thinks
221 ; * it was invoked and passed the argument 'pdata' as follows:
222 ; *
223 ; * void Task (void *pdata)
224 ; * {
225 ; * for (;;) {
226 ; * Task code;
227 ; * }
A51 MACRO ASSEMBLER OS_TASK 08/08/2005 11:36:56 PAGE 5
228 ; * }
229 ; *
230 ; * ptos is a pointer to the task's top of stack. If the configuration co
nstant
231 ; * OS_STK_GROWTH is set to 1, the stack is assumed to grow downward
(i.e. from high
232 ; * memory to low memory). 'pstk' will thus point to the highest (va
lid) memory
233 ; * location of the stack. If OS_STK_GROWTH is set to 0, 'pstk' will
point to the
234 ; * lowest memory location of the stack and the stack will grow with
increasing
235 ; * memory locations.
236 ; *
237 ; * prio is the task's priority. A unique priority MUST be assigned to ea
ch task and the
238 ; * lower the number, the higher the priority.
239 ; *
240 ; * Returns : OS_NO_ERR if the function was successful.
241 ; * OS_PRIO_EXIT if the task priority already exist
242 ; * (each task MUST have a unique priority).
243 ; * OS_PRIO_INVALID if the priority you specify is higher that the maximum al
lowed
244 ; * (i.e. >= OS_LOWEST_PRIO)
245 ; *****************************************************************************************
****************
246 ; */
247 ;
248 ; #if OS_TASK_CREATE_EN > 0
249 ; INT8U OSTaskCreate (void (*task)(void *pd), void *ppdata, OS_STK *ptos, INT8U prio)
250
---- 251 RSEG ?PR?_OSTaskCreate?OS_TASK
0000 252 _OSTaskCreate:
253 USING 0
254 ; SOURCE LINE # 156
0000 900000 F 255 MOV DPTR,#task?040
0003 EB 256 MOV A,R3
0004 F0 257 MOVX @DPTR,A
0005 A3 258 INC DPTR
0006 EA 259 MOV A,R2
0007 F0 260 MOVX @DPTR,A
0008 A3 261 INC DPTR
0009 E9 262 MOV A,R1
000A F0 263 MOVX @DPTR,A
264 ; {
265 ; SOURCE LINE # 157
266 ;
267 ; OS_STK *psp;
268 ; INT8U err;
269 ;
270 ;
271 ; #if OS_ARG_CHK_EN > 0
272 ; if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable ra
nge */
273 ; return (OS_PRIO_INVALID);
274 ; }
275 ; #endif
276 ; OS_ENTER_CRITICAL();
277 ; SOURCE LINE # 168
000B C2AF 278 CLR EA
279 ; if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at t
his priority */
280 ; SOURCE LINE # 169
000D 900000 F 281 MOV DPTR,#prio?043
0010 E0 282 MOVX A,@DPTR
0011 FF 283 MOV R7,A
A51 MACRO ASSEMBLER OS_TASK 08/08/2005 11:36:56 PAGE 6
0012 75F003 284 MOV B,#03H
0015 A4 285 MUL AB
0016 2400 F 286 ADD A,#LOW (OSTCBPrioTbl)
0018 F582 287 MOV DPL,A
001A E4 288 CLR A
001B 3400 F 289 ADDC A,#HIGH (OSTCBPrioTbl)
001D F583 290 MOV DPH,A
001F E0 291 MOVX A,@DPTR
0020 FB 292 MOV R3,A
0021 A3 293 INC DPTR
0022 E0 294 MOVX A,@DPTR
0023 FA 295 MOV R2,A
0024 A3 296 INC DPTR
0025 E0 297 MOVX A,@DPTR
0026 4A 298 ORL A,R2
0027 4B 299 ORL A,R3
0028 6003 300 JZ $ + 5H
002A 020000 F 301 LJMP ?C0001
302 ; OSTCBPrioTbl[prio] = (OS_TCB *)1; /* Reserve the priority to prevent others fr
om doing ... */
303 ; SOURCE LINE # 170
002D 7901 304 MOV R1,#01H
002F EF 305 MOV A,R7
0030 75F003 306 MOV B,#03H
0033 A4 307 MUL AB
0034 2400 F 308 ADD A,#LOW (OSTCBPrioTbl)
0036 F582 309 MOV DPL,A
0038 E4 310 CLR A
0039 3400 F 311 ADDC A,#HIGH (OSTCBPrioTbl)
003B F583 312 MOV DPH,A
003D E4 313 CLR A
003E F0 314 MOVX @DPTR,A
003F A3 315 INC DPTR
0040 F0 316 MOVX @DPTR,A
0041 A3 317 INC DPTR
0042 04 318 INC A
0043 F0 319 MOVX @DPTR,A
320 ; /* ... the same thing until task is created.
*/
321 ; OS_EXIT_CRITICAL();
322 ; SOURCE LINE # 172
0044 D2AF 323 SETB EA
324 ; psp = (OS_STK *)OSTaskStkInit(task, ppdata, ptos, 0); /* Initialize the task's
stack */
325 ; SOURCE LINE # 173
0046 90FFFE 326 MOV DPTR,#0FFFEH
0049 120000 F 327 LCALL ?C?ADDXBP
004C E4 328 CLR A
004D F0 329 MOVX @DPTR,A
004E A3 330 INC DPTR
004F F0 331 MOVX @DPTR,A
0050 900000 F 332 MOV DPTR,#ptos?042
0053 E0 333 MOVX A,@DPTR
0054 FB 334 MOV R3,A
0055 A3 335 INC DPTR
0056 E0 336 MOVX A,@DPTR
0057 FA 337 MOV R2,A
0058 A3 338 INC DPTR
0059 E0 339 MOVX A,@DPTR
005A F9 340 MOV R1,A
005B 90FFFD 341 MOV DPTR,#0FFFDH
005E 120000 F 342 LCALL ?C?ADDXBP
0061 EB 343 MOV A,R3
0062 F0 344 MOVX @DPTR,A
0063 A3 345 INC DPTR
0064 EA 346 MOV A,R2
A51 MACRO ASSEMBLER OS_TASK 08/08/2005 11:36:56 PAGE 7
0065 F0 347 MOVX @DPTR,A
0066 A3 348 INC DPTR
0067 E9 349 MOV A,R1
0068 F0 350 MOVX @DPTR,A
0069 900000 F 351 MOV DPTR,#ppdata?041
006C E0 352 MOVX A,@DPTR
006D FB 353 MOV R3,A
006E A3 354 INC DPTR
006F E0 355 MOVX A,@DPTR
0070 FA 356 MOV R2,A
0071 A3 357 INC DPTR
0072 E0 358 MOVX A,@DPTR
0073 F9 359 MOV R1,A
0074 90FFFD 360 MOV DPTR,#0FFFDH
0077 120000 F 361 LCALL ?C?ADDXBP
007A EB 362 MOV A,R3
007B F0 363 MOVX @DPTR,A
007C A3 364 INC DPTR
007D EA 365 MOV A,R2
007E F0 366 MOVX @DPTR,A
007F A3 367 INC DPTR
0080 E9 368 MOV A,R1
0081 F0 369 MOVX @DPTR,A
0082 900000 F 370 MOV DPTR,#task?040
0085 E0 371 MOVX A,@DPTR
0086 FB 372 MOV R3,A
0087 A3 373 INC DPTR
0088 E0 374 MOVX A,@DPTR
0089 FA 375 MOV R2,A
008A A3 376 INC DPTR
008B E0 377 MOVX A,@DPTR
008C F9 378 MOV R1,A
008D 120000 F 379 LCALL _?OSTaskStkInit
380 ;---- Variable 'psp?044' assigned to Register 'R1/R2/R3' ----
381 ; err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
382 ; SOURCE LINE # 174
0090 900000 F 383 MOV DPTR,#?_OS_TCBInit?BYTE+04H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -