⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_task.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
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 + -