📄 os_task.txt
字号:
0001e8 e357000c CMP r7,#0xc
0001ec da000002 BLE |L1.508|
;;;169 return (OS_PRIO_INVALID);
0001f0 e3a0002a MOV r0,#0x2a
|L1.500|
0001f4 e8bd43fe POP {r1-r9,lr}
;;;170 }
;;;171 #endif
;;;172 OS_ENTER_CRITICAL();
;;;173 if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */
;;;174 OSTCBPrioTbl[prio] = (OS_TCB *)1; /* Reserve the priority to prevent others from doing ... */
;;;175 /* ... the same thing until task is created. */
;;;176 OS_EXIT_CRITICAL();
;;;177 psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, 0); /* Initialize the task's stack */
;;;178 err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
;;;179 if (err == OS_NO_ERR) {
;;;180 OS_ENTER_CRITICAL();
;;;181 OSTaskCtr++; /* Increment the #tasks counter */
;;;182 OS_EXIT_CRITICAL();
;;;183 if (OSRunning == TRUE) { /* Find highest priority task if multitasking has started */
;;;184 OS_Sched();
;;;185 }
;;;186 } else {
;;;187 OS_ENTER_CRITICAL();
;;;188 OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others */
;;;189 OS_EXIT_CRITICAL();
;;;190 }
;;;191 return (err);
;;;192 }
;;;193 OS_EXIT_CRITICAL();
;;;194 return (OS_PRIO_EXIST);
;;;195 }
0001f8 e12fff1e BX lr
|L1.508|
0001fc ef000002 SVC 0x2 ; formerly SWI ;172
000200 e59f0754 LDR r0,|L1.2396| ;173
000204 e7900107 LDR r0,[r0,r7,LSL #2] ;173
000208 e3500000 CMP r0,#0 ;173
00020c 1a000028 BNE |L1.692| ;173
000210 e3a00001 MOV r0,#1 ;174
000214 e59f1740 LDR r1,|L1.2396| ;174
000218 e7810107 STR r0,[r1,r7,LSL #2] ;174
00021c ef000003 SVC 0x3 ; formerly SWI ;176
000220 e3a03000 MOV r3,#0 ;177
000224 e1a02006 MOV r2,r6 ;177
000228 e1a01005 MOV r1,r5 ;177
00022c e1a00004 MOV r0,r4 ;177
000230 ebfffffe BL OSTaskStkInit ;177
000234 e1a09000 MOV r9,r0 ;177
000238 e3a03000 MOV r3,#0 ;178
00023c e58d3000 STR r3,[sp,#0] ;178
000240 e58d3004 STR r3,[sp,#4] ;178
000244 e58d3008 STR r3,[sp,#8] ;178
000248 e1a02003 MOV r2,r3 ;178
00024c e1a01009 MOV r1,r9 ;178
000250 e1a00007 MOV r0,r7 ;178
000254 ebfffffe BL OS_TCBInit ;178
000258 e1a08000 MOV r8,r0 ;178
00025c e3580000 CMP r8,#0 ;179
000260 1a00000c BNE |L1.664| ;179
000264 ef000002 SVC 0x2 ; formerly SWI ;180
000268 e59f0700 LDR r0,|L1.2416| ;181
00026c e5d00000 LDRB r0,[r0,#0] ;181 ; OSTaskCtr
000270 e2800001 ADD r0,r0,#1 ;181
000274 e59f16f4 LDR r1,|L1.2416| ;181
000278 e5c10000 STRB r0,[r1,#0] ;181 ; OSTaskCtr
00027c ef000003 SVC 0x3 ; formerly SWI ;182
000280 e59f06ec LDR r0,|L1.2420| ;183
000284 e5d00000 LDRB r0,[r0,#0] ;183 ; OSRunning
000288 e3500001 CMP r0,#1 ;183
00028c 1a000006 BNE |L1.684| ;183
000290 ebfffffe BL OS_Sched ;184
000294 ea000004 B |L1.684| ;184
|L1.664|
000298 ef000002 SVC 0x2 ; formerly SWI ;187
00029c e3a00000 MOV r0,#0 ;188
0002a0 e59f16b4 LDR r1,|L1.2396| ;188
0002a4 e7810107 STR r0,[r1,r7,LSL #2] ;188
0002a8 ef000003 SVC 0x3 ; formerly SWI ;189
|L1.684|
0002ac e1a00008 MOV r0,r8 ;191
0002b0 eaffffcf B |L1.500| ;191
|L1.692|
0002b4 ef000003 SVC 0x3 ; formerly SWI ;193
0002b8 e3a00028 MOV r0,#0x28 ;194
0002bc eaffffcc B |L1.500| ;194
ENDP
OSTaskCreateExt PROC
;;;271 INT16U opt)
;;;272 {
0002c0 e92d4ff0 PUSH {r4-r11,lr}
0002c4 e24dd014 SUB sp,sp,#0x14
0002c8 e1a04000 MOV r4,r0
0002cc e1a05001 MOV r5,r1
0002d0 e1a06002 MOV r6,r2
0002d4 e1a07003 MOV r7,r3
0002d8 e28da038 ADD r10,sp,#0x38
0002dc e89a0700 LDM r10,{r8-r10}
0002e0 e59db048 LDR r11,[sp,#0x48]
;;;273 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;274 OS_CPU_SR cpu_sr;
;;;275 #endif
;;;276 OS_STK *psp;
;;;277 INT8U err;
;;;278
;;;279
;;;280 #if OS_ARG_CHK_EN > 0
;;;281 if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable range */
0002e4 e357000c CMP r7,#0xc
0002e8 da000003 BLE |L1.764|
;;;282 return (OS_PRIO_INVALID);
0002ec e3a0002a MOV r0,#0x2a
|L1.752|
0002f0 e28dd014 ADD sp,sp,#0x14
0002f4 e8bd4ff0 POP {r4-r11,lr}
;;;283 }
;;;284 #endif
;;;285 OS_ENTER_CRITICAL();
;;;286 if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */
;;;287 OSTCBPrioTbl[prio] = (OS_TCB *)1; /* Reserve the priority to prevent others from doing ... */
;;;288 /* ... the same thing until task is created. */
;;;289 OS_EXIT_CRITICAL();
;;;290
;;;291 if (((opt & OS_TASK_OPT_STK_CHK) != 0x0000) || /* See if stack checking has been enabled */
;;;292 ((opt & OS_TASK_OPT_STK_CLR) != 0x0000)) { /* See if stack needs to be cleared */
;;;293 #if OS_STK_GROWTH == 1
;;;294 (void)memset(pbos, 0, stk_size * sizeof(OS_STK));
;;;295 #else
;;;296 (void)memset(ptos, 0, stk_size * sizeof(OS_STK));
;;;297 #endif
;;;298 }
;;;299
;;;300 psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, opt); /* Initialize the task's stack */
;;;301 err = OS_TCBInit(prio, psp, pbos, id, stk_size, pext, opt);
;;;302 if (err == OS_NO_ERR) {
;;;303 OS_ENTER_CRITICAL();
;;;304 OSTaskCtr++; /* Increment the #tasks counter */
;;;305 OS_EXIT_CRITICAL();
;;;306 if (OSRunning == TRUE) { /* Find HPT if multitasking has started */
;;;307 OS_Sched();
;;;308 }
;;;309 } else {
;;;310 OS_ENTER_CRITICAL();
;;;311 OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Make this priority avail. to others */
;;;312 OS_EXIT_CRITICAL();
;;;313 }
;;;314 return (err);
;;;315 }
;;;316 OS_EXIT_CRITICAL();
;;;317 return (OS_PRIO_EXIST);
;;;318 }
0002f8 e12fff1e BX lr
|L1.764|
0002fc ef000002 SVC 0x2 ; formerly SWI ;285
000300 e59f0654 LDR r0,|L1.2396| ;286
000304 e7900107 LDR r0,[r0,r7,LSL #2] ;286
000308 e3500000 CMP r0,#0 ;286
00030c 1a000030 BNE |L1.980| ;286
000310 e3a00001 MOV r0,#1 ;287
000314 e59f1640 LDR r1,|L1.2396| ;287
000318 e7810107 STR r0,[r1,r7,LSL #2] ;287
00031c ef000003 SVC 0x3 ; formerly SWI ;289
000320 e31b0001 TST r11,#1 ;291
000324 1a000001 BNE |L1.816| ;291
000328 e31b0002 TST r11,#2 ;292
00032c 0a000002 BEQ |L1.828| ;292
|L1.816|
000330 e1a0110a LSL r1,r10,#2 ;294
000334 e1a00009 MOV r0,r9 ;294
000338 ebfffffe BL __aeabi_memclr4 ;294
|L1.828|
00033c e1a0300b MOV r3,r11 ;300
000340 e1a02006 MOV r2,r6 ;300
000344 e1a01005 MOV r1,r5 ;300
000348 e1a00004 MOV r0,r4 ;300
00034c ebfffffe BL OSTaskStkInit ;300
000350 e58d0010 STR r0,[sp,#0x10] ;300
000354 e59d2044 LDR r2,[sp,#0x44] ;301
000358 e1a03008 MOV r3,r8 ;301
00035c e98d0804 STMIB sp,{r2,r11} ;301
000360 e1a02009 MOV r2,r9 ;301
000364 e58da000 STR r10,[sp,#0] ;301
000368 e1a00007 MOV r0,r7 ;301
00036c e59d1010 LDR r1,[sp,#0x10] ;301
000370 ebfffffe BL OS_TCBInit ;301
000374 e58d000c STR r0,[sp,#0xc] ;301
000378 e59d000c LDR r0,[sp,#0xc] ;302
00037c e3500000 CMP r0,#0 ;302
000380 1a00000c BNE |L1.952| ;302
000384 ef000002 SVC 0x2 ; formerly SWI ;303
000388 e59f05e0 LDR r0,|L1.2416| ;304
00038c e5d00000 LDRB r0,[r0,#0] ;304 ; OSTaskCtr
000390 e2800001 ADD r0,r0,#1 ;304
000394 e59f15d4 LDR r1,|L1.2416| ;304
000398 e5c10000 STRB r0,[r1,#0] ;304 ; OSTaskCtr
00039c ef000003 SVC 0x3 ; formerly SWI ;305
0003a0 e59f05cc LDR r0,|L1.2420| ;306
0003a4 e5d00000 LDRB r0,[r0,#0] ;306 ; OSRunning
0003a8 e3500001 CMP r0,#1 ;306
0003ac 1a000006 BNE |L1.972| ;306
0003b0 ebfffffe BL OS_Sched ;307
0003b4 ea000004 B |L1.972| ;307
|L1.952|
0003b8 ef000002 SVC 0x2 ; formerly SWI ;310
0003bc e3a00000 MOV r0,#0 ;311
0003c0 e59f1594 LDR r1,|L1.2396| ;311
0003c4 e7810107 STR r0,[r1,r7,LSL #2] ;311
0003c8 ef000003 SVC 0x3 ; formerly SWI ;312
|L1.972|
0003cc e59d000c LDR r0,[sp,#0xc] ;314
0003d0 eaffffc6 B |L1.752| ;314
|L1.980|
0003d4 ef000003 SVC 0x3 ; formerly SWI ;316
0003d8 e3a00028 MOV r0,#0x28 ;317
0003dc eaffffc3 B |L1.752| ;317
ENDP
OSTaskDel PROC
;;;357 INT8U OSTaskDel (INT8U prio)
;;;358 {
0003e0 e92d41f0 PUSH {r4-r8,lr}
0003e4 e1a04000 MOV r4,r0
;;;359 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;360 OS_CPU_SR cpu_sr;
;;;361 #endif
;;;362
;;;363 #if OS_EVENT_EN > 0
;;;364 OS_EVENT *pevent;
;;;365 #endif
;;;366 #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -