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

📄 os_core.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;1183       pevent  = *pevents;
0000ee  6808              LDR      r0,[r1,#0]
;;;1184       while (pevent != (OS_EVENT *)0) {                   /* Remove task from all events' wait lists     */
0000f0  e00a              B        |L1.264|
                  |L1.242|
;;;1185           pevent->OSEventTbl[y]  &= ~bitx;
0000f2  1902              ADDS     r2,r0,r4
0000f4  7ad3              LDRB     r3,[r2,#0xb]
0000f6  43b3              BICS     r3,r3,r6
0000f8  72d3              STRB     r3,[r2,#0xb]
;;;1186           if (pevent->OSEventTbl[y] == 0) {
0000fa  7ad2              LDRB     r2,[r2,#0xb]
0000fc  b912              CBNZ     r2,|L1.260|
;;;1187               pevent->OSEventGrp &= ~bity;
0000fe  7a82              LDRB     r2,[r0,#0xa]
000100  43aa              BICS     r2,r2,r5
000102  7282              STRB     r2,[r0,#0xa]
                  |L1.260|
;;;1188           }
;;;1189           pevents++;
;;;1190           pevent = *pevents;
000104  f851f851          LDR      r0,[r1,#4]!
                  |L1.264|
000108  2800              CMP      r0,#0                 ;1184
00010a  d1f2              BNE      |L1.242|
;;;1191       }
;;;1192   }
00010c  bd70              POP      {r4-r6,pc}
;;;1193   #endif
                          ENDP

                  OS_SchedNew PROC
;;;1653   
;;;1654       y             = OSUnMapTbl[OSRdyGrp];
00010e  49c5              LDR      r1,|L1.1060|
000110  4ac5              LDR      r2,|L1.1064|
000112  7988              LDRB     r0,[r1,#6]  ; OSRdyGrp
000114  5c10              LDRB     r0,[r2,r0]
;;;1655       OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
000116  f101f101          ADD      r3,r1,#0x1c
00011a  5c1b              LDRB     r3,[r3,r0]
00011c  5cd2              LDRB     r2,[r2,r3]
00011e  eb02eb02          ADD      r0,r2,r0,LSL #3
000122  7148              STRB     r0,[r1,#5]  ; OSPrioHighRdy
;;;1656   #else                                            /* We support up to 256 tasks                         */
;;;1657       INT8U   y;
;;;1658       INT16U *ptbl;
;;;1659   
;;;1660   
;;;1661       if ((OSRdyGrp & 0xFF) != 0) {
;;;1662           y = OSUnMapTbl[OSRdyGrp & 0xFF];
;;;1663       } else {
;;;1664           y = OSUnMapTbl[(OSRdyGrp >> 8) & 0xFF] + 8;
;;;1665       }
;;;1666       ptbl = &OSRdyTbl[y];
;;;1667       if ((*ptbl & 0xFF) != 0) {
;;;1668           OSPrioHighRdy = (INT8U)((y << 4) + OSUnMapTbl[(*ptbl & 0xFF)]);
;;;1669       } else {
;;;1670           OSPrioHighRdy = (INT8U)((y << 4) + OSUnMapTbl[(*ptbl >> 8) & 0xFF] + 8);
;;;1671       }
;;;1672   #endif
;;;1673   }
000124  4770              BX       lr
;;;1674   
                          ENDP

                  OS_Sched PROC
;;;1606   void  OS_Sched (void)
;;;1607   {
000126  b570              PUSH     {r4-r6,lr}
;;;1608   #if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
;;;1609       OS_CPU_SR  cpu_sr = 0;
;;;1610   #endif
;;;1611   
;;;1612   
;;;1613   
;;;1614       OS_ENTER_CRITICAL();
000128  f7fff7ff          BL       OS_CPU_SR_Save
00012c  4605              MOV      r5,r0
;;;1615       if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */
00012e  4cbd              LDR      r4,|L1.1060|
000130  78a0              LDRB     r0,[r4,#2]  ; OSIntNesting
000132  b998              CBNZ     r0,|L1.348|
;;;1616           if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */
000134  78e0              LDRB     r0,[r4,#3]  ; OSLockNesting
000136  b988              CBNZ     r0,|L1.348|
;;;1617               OS_SchedNew();
000138  f7fff7ff          BL       OS_SchedNew
;;;1618               if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
00013c  7961              LDRB     r1,[r4,#5]  ; OSPrioHighRdy
00013e  7920              LDRB     r0,[r4,#4]  ; OSPrioCur
000140  4281              CMP      r1,r0
000142  d00b              BEQ      |L1.348|
;;;1619                   OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
000144  48b9              LDR      r0,|L1.1068|
000146  f850f850          LDR      r1,[r0,r1,LSL #2]
00014a  62e1              STR      r1,[r4,#0x2c]  ; OSTCBHighRdy
;;;1620   #if OS_TASK_PROFILE_EN > 0
;;;1621                   OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
00014c  6b88              LDR      r0,[r1,#0x38]
00014e  1c40              ADDS     r0,r0,#1
000150  6388              STR      r0,[r1,#0x38]
;;;1622   #endif
;;;1623                   OSCtxSwCtr++;                          /* Increment context switch counter             */
000152  68e0              LDR      r0,[r4,#0xc]  ; OSCtxSwCtr
000154  1c40              ADDS     r0,r0,#1
000156  60e0              STR      r0,[r4,#0xc]  ; OSCtxSwCtr
;;;1624                   OS_TASK_SW();                          /* Perform a context switch                     */
000158  f7fff7ff          BL       OSCtxSw
                  |L1.348|
;;;1625               }
;;;1626           }
;;;1627       }
;;;1628       OS_EXIT_CRITICAL();
00015c  4628              MOV      r0,r5
00015e  e8bde8bd          POP      {r4-r6,lr}
000162  f7fff7ff          B.W      OS_CPU_SR_Restore
;;;1629   }
;;;1630   
                          ENDP

                  OS_EventTaskWaitMulti PROC
;;;1091   void  OS_EventTaskWaitMulti (OS_EVENT **pevents_wait)
;;;1092   {
000166  b570              PUSH     {r4-r6,lr}
;;;1093       OS_EVENT **pevents;
;;;1094       OS_EVENT  *pevent;
;;;1095       INT8U      y;
;;;1096   
;;;1097   
;;;1098       OSTCBCur->OSTCBEventPtr      = (OS_EVENT  *)0;
000168  4dae              LDR      r5,|L1.1060|
00016a  2200              MOVS     r2,#0
00016c  6a69              LDR      r1,[r5,#0x24]  ; OSTCBCur
00016e  61ca              STR      r2,[r1,#0x1c]
;;;1099       OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)pevents_wait;       /* Store ptr to ECBs in TCB        */
000170  6208              STR      r0,[r1,#0x20]
;;;1100   
;;;1101       pevents =  pevents_wait;
;;;1102       pevent  = *pevents;
000172  6801              LDR      r1,[r0,#0]
;;;1103       while (pevent != (OS_EVENT *)0) {                               /* Put task in waiting lists       */
000174  e010              B        |L1.408|
                  |L1.374|
;;;1104           pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
000176  6a6b              LDR      r3,[r5,#0x24]  ; OSTCBCur
000178  f101f101          ADD      r2,r1,#0xb
00017c  f813f813          LDRB     r4,[r3,#0x34]!
000180  785b              LDRB     r3,[r3,#1]
000182  5ca6              LDRB     r6,[r4,r2]
000184  431e              ORRS     r6,r6,r3
000186  54a6              STRB     r6,[r4,r2]
;;;1105           pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
000188  6a6b              LDR      r3,[r5,#0x24]  ; OSTCBCur
00018a  7a8a              LDRB     r2,[r1,#0xa]
00018c  f893f893          LDRB     r3,[r3,#0x36]
000190  431a              ORRS     r2,r2,r3
000192  728a              STRB     r2,[r1,#0xa]
;;;1106           pevents++;
;;;1107           pevent = *pevents;
000194  f850f850          LDR      r1,[r0,#4]!
                  |L1.408|
000198  2900              CMP      r1,#0                 ;1103
00019a  d1ec              BNE      |L1.374|
;;;1108       }
;;;1109   
;;;1110       y             =  OSTCBCur->OSTCBY;            /* Task no longer ready                              */
00019c  6a69              LDR      r1,[r5,#0x24]  ; OSTCBCur
00019e  f891f891          LDRB     r0,[r1,#0x34]
;;;1111       OSRdyTbl[y]  &= ~OSTCBCur->OSTCBBitX;
0001a2  4aa0              LDR      r2,|L1.1060|
0001a4  f891f891          LDRB     r4,[r1,#0x35]
0001a8  321c              ADDS     r2,r2,#0x1c
0001aa  5c13              LDRB     r3,[r2,r0]
0001ac  43a3              BICS     r3,r3,r4
0001ae  5413              STRB     r3,[r2,r0]
;;;1112       if (OSRdyTbl[y] == 0) {
0001b0  5c10              LDRB     r0,[r2,r0]
0001b2  2800              CMP      r0,#0
0001b4  d104              BNE      |L1.448|
;;;1113           OSRdyGrp &= ~OSTCBCur->OSTCBBitY;         /* Clear event grp bit if this was only task pending */
0001b6  f891f891          LDRB     r1,[r1,#0x36]
0001ba  79a8              LDRB     r0,[r5,#6]  ; OSRdyGrp
0001bc  4388              BICS     r0,r0,r1
0001be  71a8              STRB     r0,[r5,#6]  ; OSRdyGrp
                  |L1.448|
;;;1114       }
;;;1115   }
0001c0  bd70              POP      {r4-r6,pc}
;;;1116   #endif
                          ENDP

                  OSEventPendMulti PROC
;;;306    INT16U  OSEventPendMulti (OS_EVENT **pevents_pend, OS_EVENT **pevents_rdy, void **pmsgs_rdy, INT16U timeout, INT8U *perr)
;;;307    {
0001c2  e92de92d          PUSH     {r0-r12,lr}
0001c6  f8ddf8dd          LDR      r8,[sp,#0x38]
0001ca  460d              MOV      r5,r1
0001cc  4616              MOV      r6,r2
;;;308        OS_EVENT  **pevents;
;;;309        OS_EVENT   *pevent;
;;;310    #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
;;;311        OS_Q       *pq;
;;;312    #endif
;;;313        BOOLEAN     events_rdy;
;;;314        INT16U      events_rdy_nbr;
;;;315        INT8U       events_stat;
;;;316    #if (OS_CRITICAL_METHOD == 3)                           /* Allocate storage for CPU status register    */
;;;317        OS_CPU_SR   cpu_sr = 0;
;;;318    #endif
;;;319    
;;;320    
;;;321    
;;;322    #if (OS_ARG_CHK_EN > 0)
;;;323        if (perr == (INT8U *)0) {                           /* Validate 'perr'                             */
;;;324            return (0);
;;;325        }
;;;326        if (pevents_pend == (OS_EVENT **)0) {               /* Validate 'pevents_pend'                     */
;;;327           *perr =  OS_ERR_PEVENT_NULL;
;;;328            return (0);
;;;329        }
;;;330        if (pevents_rdy  == (OS_EVENT **)0) {               /* Validate 'pevents_rdy'                      */
;;;331           *perr =  OS_ERR_PEVENT_NULL;
;;;332            return (0);
;;;333        }
;;;334        if (pmsgs_rdy == (void **)0) {                      /* Validate 'pmsgs_rdy'                        */
;;;335           *perr =  OS_ERR_PEVENT_NULL;
;;;336            return (0);
;;;337        }
;;;338    #endif
;;;339    
;;;340       *pevents_rdy = (OS_EVENT *)0;                        /* Init array to NULL in case of errors        */
0001ce  f04ff04f          MOV      r9,#0
0001d2  f8c5f8c5          STR      r9,[r5,#0]
;;;341    
;;;342        pevents     =  pevents_pend;
0001d6  9800              LDR      r0,[sp,#0]
;;;343        pevent      = *pevents;
0001d8  6801              LDR      r1,[r0,#0]
;;;344        while  (pevent != (OS_EVENT *)0) {
0001da  f04ff04f          MOV      r11,#1
0001de  e00c              B        |L1.506|
                  |L1.480|
;;;345            switch (pevent->OSEventType) {                  /* Validate event block types                  */
0001e0  7809              LDRB     r1,[r1,#0]
0001e2  2901              CMP      r1,#1
0001e4  d007              BEQ      |L1.502|
0001e6  2903              CMP      r1,#3
0001e8  d005              BEQ      |L1.502|
;;;346    #if (OS_SEM_EN  > 0)
;;;347                case OS_EVENT_TYPE_SEM:
;;;348                     break;
;;;349    #endif
;;;350    #if (OS_MBOX_EN > 0)
;;;351                case OS_EVENT_TYPE_MBOX:
;;;352                     break;
;;;353    #endif
;;;354    #if ((OS_Q_EN   > 0) && (OS_MAX_QS > 0))
;;;355                case OS_EVENT_TYPE_Q:
;;;356                     break;
;;;357    #endif
;;;358    
;;;359                case OS_EVENT_TYPE_MUTEX:                                            
;;;360                case OS_EVENT_TYPE_FLAG:
;;;361                default:           

⌨️ 快捷键说明

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