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

📄 os_core.txt

📁 ATMEL ARM7 SAM64 Porting ucos / Keil ARM VER3.04。不同于其它
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000404  0a000018          BEQ      |L1.1132|
;;;563                    if (--ptcb->OSTCBDly == 0) {               /* Decrement nbr of ticks to end of delay       */
000408  e2411001          SUB      r1,r1,#1
00040c  e1a01801          LSL      r1,r1,#16
000410  e1b01821          LSRS     r1,r1,#16
000414  e1c411bc          STRH     r1,[r4,#0x1c]
000418  1a000013          BNE      |L1.1132|
;;;564                                                               /* Check for timeout                            */
;;;565                        if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
00041c  e5d4101e          LDRB     r1,[r4,#0x1e]
000420  e3110037          TST      r1,#0x37
;;;566                            ptcb->OSTCBStat   &= ~OS_STAT_PEND_ANY;                /* Yes, Clear status flag   */
000424  13c11037          BICNE    r1,r1,#0x37
000428  15c4101e          STRBNE   r1,[r4,#0x1e]
;;;567                            ptcb->OSTCBPendTO  = TRUE;                             /* Indicate PEND timeout    */
;;;568                        } else {
;;;569                            ptcb->OSTCBPendTO  = FALSE;
00042c  03a01000          MOVEQ    r1,#0
000430  13a01001          MOVNE    r1,#1                 ;567
000434  e5c4101f          STRB     r1,[r4,#0x1f]
;;;570                        }
;;;571    
;;;572                        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {  /* Is task suspended?       */
000438  e5d4101e          LDRB     r1,[r4,#0x1e]
00043c  e3110008          TST      r1,#8
000440  1a000009          BNE      |L1.1132|
;;;573                            OSRdyGrp               |= ptcb->OSTCBBitY;             /* No,  Make ready          */
000444  e5d41024          LDRB     r1,[r4,#0x24]
000448  e5d52006          LDRB     r2,[r5,#6]  ; OSRdyGrp
00044c  e1811002          ORR      r1,r1,r2
000450  e5c51006          STRB     r1,[r5,#6]  ; OSRdyGrp
;;;574                            OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
000454  e5d41022          LDRB     r1,[r4,#0x22]
000458  e59f2064          LDR      r2,|L1.1220|
00045c  e5d4c023          LDRB     r12,[r4,#0x23]
000460  e7d23001          LDRB     r3,[r2,r1]
000464  e183300c          ORR      r3,r3,r12
000468  e7c23001          STRB     r3,[r2,r1]
;;;575                        }
;;;576                    }
;;;577                }
;;;578                ptcb = ptcb->OSTCBNext;                        /* Point at next TCB in TCB list                */
                  |L1.1132|
00046c  e5944014          LDR      r4,[r4,#0x14]
;;;579                OS_EXIT_CRITICAL();
000470  ebfffffe          BL       OS_CPU_SR_Restore
                  |L1.1140|
000474  e5d40020          LDRB     r0,[r4,#0x20]         ;560
000478  e350000f          CMP      r0,#0xf               ;560
00047c  1affffdd          BNE      |L1.1016|             ;560
;;;580            }
;;;581        }
;;;582    }
                  |L1.1152|
000480  e8bd4070          POP      {r4-r6,lr}
000484  e12fff1e          BX       lr
                  |L1.1160|
000488  00000400          DCD      ||.bss.5|| + 1024
                  |L1.1164|
00048c  00000000          DCD      ||.data||
                  |L1.1168|
000490  00000440          DCD      ||.bss.5|| + 1088
                  |L1.1172|
000494  00000200          DCD      ||.bss.5|| + 512
                  |L1.1176|
000498  0000ffff          DCD      0x0000ffff
                  |L1.1180|
00049c  4f2f4375          DCB      "uC/O"
0004a0  49492d53          DCB      "S-II"
0004a4  6c644920          DCB      " Idl"
0004a8  00000065          DCB      "e\0\0\0"
                  |L1.1196|
0004ac  00000000          DCD      ||.bss.5||
                  |L1.1200|
0004b0  0000fffe          DCD      0x0000fffe
                  |L1.1204|
0004b4  4f2f4375          DCB      "uC/O"
0004b8  49492d53          DCB      "S-II"
0004bc  61745320          DCB      " Sta"
0004c0  00000074          DCB      "t\0\0\0"
                  |L1.1220|
0004c4  00000009          DCD      ||.data|| + 9
                          ENDP

                  OSVersion PROC
;;;599    {
;;;600        return (OS_VERSION);
0004c8  e3a00f46          MOV      r0,#0x118
;;;601    }
0004cc  e12fff1e          BX       lr
                          ENDP

                  OS_MemCopy PROC
;;;1147   {
;;;1148       while (size > 0) {
                  |L1.1232|
0004d0  e3520000          CMP      r2,#0
;;;1149           *pdest++ = *psrc++;
0004d4  14d13001          LDRBNE   r3,[r1],#1
;;;1150           size--;
0004d8  12422001          SUBNE    r2,r2,#1
0004dc  11a02802          LSLNE    r2,r2,#16
0004e0  11a02822          LSRNE    r2,r2,#16
0004e4  14c03001          STRBNE   r3,[r0],#1            ;1149
0004e8  1afffff8          BNE      |L1.1232|
;;;1151       }
;;;1152   }
0004ec  e12fff1e          BX       lr
                          ENDP

                  OS_Sched PROC
;;;1171   void  OS_Sched (void)
;;;1172   {
0004f0  e92d4070          PUSH     {r4-r6,lr}
;;;1173   #if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
;;;1174       OS_CPU_SR  cpu_sr = 0;
;;;1175   #endif
;;;1176   
;;;1177   
;;;1178   
;;;1179       OS_ENTER_CRITICAL();
0004f4  ebfffffe          BL       OS_CPU_SR_Save
;;;1180       if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */
0004f8  e51f4074          LDR      r4,|L1.1164|
0004fc  e1a05000          MOV      r5,r0                 ;1179
000500  e5d40002          LDRB     r0,[r4,#2]  ; OSIntNesting
000504  e3500000          CMP      r0,#0
;;;1181           if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */
000508  05d40003          LDRBEQ   r0,[r4,#3]  ; OSLockNesting
00050c  03500000          CMPEQ    r0,#0
000510  1a00000e          BNE      |L1.1360|             ;1180
;;;1182               OS_SchedNew();
000514  ebfffffe          BL       OS_SchedNew
;;;1183               if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
000518  e5d41005          LDRB     r1,[r4,#5]  ; OSPrioHighRdy
00051c  e5d40004          LDRB     r0,[r4,#4]  ; OSPrioCur
000520  e1510000          CMP      r1,r0
000524  0a000009          BEQ      |L1.1360|
;;;1184                   OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
000528  e51f00a8          LDR      r0,|L1.1160|
00052c  e7901101          LDR      r1,[r0,r1,LSL #2]
;;;1185   #if OS_TASK_PROFILE_EN > 0
;;;1186                   OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
000530  e5841024          STR      r1,[r4,#0x24]  ; OSTCBHighRdy
000534  e5910028          LDR      r0,[r1,#0x28]
000538  e2800001          ADD      r0,r0,#1
;;;1187   #endif
;;;1188                   OSCtxSwCtr++;                          /* Increment context switch counter             */
00053c  e5810028          STR      r0,[r1,#0x28]
000540  e594000c          LDR      r0,[r4,#0xc]  ; OSCtxSwCtr
000544  e2800001          ADD      r0,r0,#1
000548  e584000c          STR      r0,[r4,#0xc]  ; OSCtxSwCtr
;;;1189                   OS_TASK_SW();                          /* Perform a context switch                     */
00054c  ebfffffe          BL       OSCtxSw
;;;1190               }
;;;1191           }
;;;1192       }
;;;1193       OS_EXIT_CRITICAL();
                  |L1.1360|
000550  e1a00005          MOV      r0,r5
000554  e8bd4070          POP      {r4-r6,lr}
000558  eafffffe          B        OS_CPU_SR_Restore
;;;1194   }
                          ENDP

                  OS_StrCopy PROC
;;;1265   
;;;1266       len = 0;
00055c  e3a02000          MOV      r2,#0
;;;1267       while (*psrc != OS_ASCII_NUL) {
                  |L1.1376|
000560  e5d13000          LDRB     r3,[r1,#0]
000564  e3530000          CMP      r3,#0
;;;1268           *pdest++ = *psrc++;
;;;1269           len++;
000568  12822001          ADDNE    r2,r2,#1
00056c  12811001          ADDNE    r1,r1,#1              ;1268
000570  120220ff          ANDNE    r2,r2,#0xff
000574  14c03001          STRBNE   r3,[r0],#1            ;1268
000578  1afffff8          BNE      |L1.1376|
;;;1270       }
;;;1271       *pdest = OS_ASCII_NUL;
00057c  e3a01000          MOV      r1,#0
000580  e5c01000          STRB     r1,[r0,#0]
;;;1272       return (len);
000584  e1a00002          MOV      r0,r2
;;;1273   }
000588  e12fff1e          BX       lr
                          ENDP

                  OS_StrLen PROC
;;;1297   
;;;1298       len = 0;
00058c  e3a01000          MOV      r1,#0
;;;1299       while (*psrc != OS_ASCII_NUL) {
                  |L1.1424|
000590  e5d02000          LDRB     r2,[r0,#0]
000594  e3520000          CMP      r2,#0
;;;1300           psrc++;
;;;1301           len++;
000598  12811001          ADDNE    r1,r1,#1
00059c  12800001          ADDNE    r0,r0,#1              ;1300
0005a0  120110ff          ANDNE    r1,r1,#0xff
0005a4  1afffff9          BNE      |L1.1424|
;;;1302       }
;;;1303       return (len);
0005a8  e1a00001          MOV      r0,r1
;;;1304   }
0005ac  e12fff1e          BX       lr
                          ENDP

                  OS_TCBInit PROC
;;;1497   INT8U  OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt)
;;;1498   {
0005b0  e92d5fff          PUSH     {r0-r12,lr}
0005b4  e28db038          ADD      r11,sp,#0x38
0005b8  e89b0e00          LDM      r11,{r9-r11}
0005bc  e1a06000          MOV      r6,r0
0005c0  e1a05001          MOV      r5,r1
0005c4  e1a08002          MOV      r8,r2
;;;1499       OS_TCB    *ptcb;
;;;1500   #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;1501       OS_CPU_SR  cpu_sr = 0;
;;;1502   #endif
;;;1503   
;;;1504   
;;;1505   
;;;1506       OS_ENTER_CRITICAL();
0005c8  ebfffffe          BL       OS_CPU_SR_Save
;;;1507       ptcb = OSTCBFreeList;                                  /* Get a free TCB from the free TCB list    */
0005cc  e51f7148          LDR      r7,|L1.1164|
0005d0  e5974020          LDR      r4,[r7,#0x20]  ; OSTCBFreeList
;;;1508       if (ptcb != (OS_TCB *)0) {
0005d4  e3540000          CMP      r4,#0
0005d8  0a00003e          BEQ      |L1.1752|
;;;1509           OSTCBFreeList        = ptcb->OSTCBNext;            /* Update pointer to free TCB list          */
0005dc  e5941014          LDR      r1,[r4,#0x14]
0005e0  e5871020          STR      r1,[r7,#0x20]  ; OSTCBFreeList
;;;1510           OS_EXIT_CRITICAL();
0005e4  ebfffffe          BL       OS_CPU_SR_Restore
;;;1511           ptcb->OSTCBStkPtr    = ptos;                       /* Load Stack pointer in TCB                */
0005e8  e5845000          STR      r5,[r4,#0]
;;;1512           ptcb->OSTCBPrio      = prio;                       /* Load task priority into TCB              */
;;;1513           ptcb->OSTCBStat      = OS_STAT_RDY;                /* Task is ready to run                     */
0005ec  e3a05000          MOV      r5,#0
0005f0  e5c46020          STRB     r6,[r4,#0x20]         ;1512
0005f4  e5c4501e          STRB     r5,[r4,#0x1e]
;;;1514           ptcb->OSTCBPendTO    = FALSE;                      /* Clear the Pend timeout flag              */
0005f8  e5c4501f          STRB     r5,[r4,#0x1f]
;;;1515           ptcb->OSTCBDly       = 0;                          /* Task is not delayed                      */
;;;1516   
;;;1517   #if OS_TASK_CREATE_EXT_EN > 0
;;;1518           ptcb->OSTCBExtPtr    = pext;                       /* Store pointer to TCB extension           */
;;;1519           ptcb->OSTCBStkSize   = stk_size;                   /* Store stack size                         */
;;;1520           ptcb->OSTCBStkBottom = pbos;                       /* Store pointer to bottom of stack         */
0005fc  e2840008          ADD      r0,r4,#8
000600  e1c451bc          STRH     r5,[r4,#0x1c]         ;1515
000604  e8800300          STM      r0,{r8,r9}
000608  e584a004          STR      r10,[r4,#4]
;;;1521           ptcb->OSTCBOpt       = opt;                        /* Store task options                       */
00060c  e1c4b1b0          STRH     r11,[r4,#0x10]
;;;1522           ptcb->OSTCBId        = id;                         /* Store task ID                            */
000610  e59d000c          LDR      r0,[sp,#0xc]
;;;1523   #else
;;;1524           pext                 = pext;                       /* Prevent compiler warning if not used     */
;;;1525           stk_size             = stk_size;
;;;1526           pbos                 = pbos;
;;;1527           opt                  = opt;
;;;1528           id                   = id;
;;;1529   #endif
;;;1530   
;;;1531   #if OS_TASK_DEL_EN > 0
;;;1532           ptcb->OSTCBDelReq    = OS_NO_ERR;
;;;1533   #endif
;;;1534   
;;;1535   #if OS_LOWEST_PRIO <= 63

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -