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

📄 os_mbox.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
📖 第 1 页 / 共 3 页
字号:
00025a  f7fff7ff          BL       OS_CPU_SR_Restore
00025e  f7fff7ff          BL       OS_Sched
000262  200e              MOVS     r0,#0xe               ;422
000264  7030              STRB     r0,[r6,#0]            ;422
000266  4620              MOV      r0,r4                 ;423
000268  e7d7              B        |L1.538|
                  |L1.618|
00026a  4638              MOV      r0,r7                 ;425
00026c  f7fff7ff          BL       OS_CPU_SR_Restore
000270  2000              MOVS     r0,#0                 ;426
000272  7030              STRB     r0,[r6,#0]            ;426
000274  e7d1              B        |L1.538|
;;;429    #endif
                          ENDP

                  OSMboxPost PROC
;;;455    INT8U  OSMboxPost (OS_EVENT *pevent, void *pmsg)
;;;456    {
000276  b570              PUSH     {r4-r6,lr}
000278  4604              MOV      r4,r0
00027a  460e              MOV      r6,r1
;;;457    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;458        OS_CPU_SR  cpu_sr = 0;
;;;459    #endif
;;;460    
;;;461    
;;;462    
;;;463    #if OS_ARG_CHK_EN > 0
;;;464        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
;;;465            return (OS_ERR_PEVENT_NULL);
;;;466        }
;;;467        if (pmsg == (void *)0) {                          /* Make sure we are not posting a NULL pointer   */
;;;468            return (OS_ERR_POST_NULL_PTR);
;;;469        }
;;;470    #endif
;;;471        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
00027c  7820              LDRB     r0,[r4,#0]
00027e  2801              CMP      r0,#1
000280  d001              BEQ      |L1.646|
;;;472            return (OS_ERR_EVENT_TYPE);
000282  2001              MOVS     r0,#1
;;;473        }
;;;474        OS_ENTER_CRITICAL();
;;;475        if (pevent->OSEventGrp != 0) {                    /* See if any task pending on mailbox            */
;;;476                                                          /* Ready HPT waiting on event                    */
;;;477            (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK);
;;;478            OS_EXIT_CRITICAL();
;;;479            OS_Sched();                                   /* Find highest priority task ready to run       */
;;;480            return (OS_ERR_NONE);
;;;481        }
;;;482        if (pevent->OSEventPtr != (void *)0) {            /* Make sure mailbox doesn't already have a msg  */
;;;483            OS_EXIT_CRITICAL();
;;;484            return (OS_ERR_MBOX_FULL);
;;;485        }
;;;486        pevent->OSEventPtr = pmsg;                        /* Place message in mailbox                      */
;;;487        OS_EXIT_CRITICAL();
;;;488        return (OS_ERR_NONE);
;;;489    }
000284  bd70              POP      {r4-r6,pc}
                  |L1.646|
000286  f7fff7ff          BL       OS_CPU_SR_Save
00028a  4605              MOV      r5,r0                 ;474
00028c  7aa0              LDRB     r0,[r4,#0xa]          ;475
00028e  b160              CBZ      r0,|L1.682|
000290  2300              MOVS     r3,#0                 ;477
000292  2202              MOVS     r2,#2                 ;477
000294  4631              MOV      r1,r6                 ;477
000296  4620              MOV      r0,r4                 ;477
000298  f7fff7ff          BL       OS_EventTaskRdy
00029c  4628              MOV      r0,r5                 ;478
00029e  f7fff7ff          BL       OS_CPU_SR_Restore
0002a2  f7fff7ff          BL       OS_Sched
0002a6  2000              MOVS     r0,#0                 ;480
0002a8  bd70              POP      {r4-r6,pc}
                  |L1.682|
0002aa  6860              LDR      r0,[r4,#4]            ;482
0002ac  b120              CBZ      r0,|L1.696|
0002ae  4628              MOV      r0,r5                 ;483
0002b0  f7fff7ff          BL       OS_CPU_SR_Restore
0002b4  2014              MOVS     r0,#0x14              ;484
0002b6  bd70              POP      {r4-r6,pc}
                  |L1.696|
0002b8  6066              STR      r6,[r4,#4]            ;486
0002ba  4628              MOV      r0,r5                 ;487
0002bc  f7fff7ff          BL       OS_CPU_SR_Restore
0002c0  2000              MOVS     r0,#0                 ;488
0002c2  bd70              POP      {r4-r6,pc}
;;;490    #endif
                          ENDP

                  OSMboxPostOpt PROC
;;;526    INT8U  OSMboxPostOpt (OS_EVENT *pevent, void *pmsg, INT8U opt)
;;;527    {
0002c4  e92de92d          PUSH     {r4-r8,lr}
0002c8  4604              MOV      r4,r0
0002ca  460e              MOV      r6,r1
0002cc  4615              MOV      r5,r2
;;;528    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;529        OS_CPU_SR  cpu_sr = 0;
;;;530    #endif
;;;531    
;;;532    
;;;533    
;;;534    #if OS_ARG_CHK_EN > 0
;;;535        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
;;;536            return (OS_ERR_PEVENT_NULL);
;;;537        }
;;;538        if (pmsg == (void *)0) {                          /* Make sure we are not posting a NULL pointer   */
;;;539            return (OS_ERR_POST_NULL_PTR);
;;;540        }
;;;541    #endif
;;;542        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
0002ce  7820              LDRB     r0,[r4,#0]
0002d0  2801              CMP      r0,#1
0002d2  d001              BEQ      |L1.728|
;;;543            return (OS_ERR_EVENT_TYPE);
0002d4  2001              MOVS     r0,#1
;;;544        }
;;;545        OS_ENTER_CRITICAL();
;;;546        if (pevent->OSEventGrp != 0) {                    /* See if any task pending on mailbox            */
;;;547            if ((opt & OS_POST_OPT_BROADCAST) != 0x00) {  /* Do we need to post msg to ALL waiting tasks ? */
;;;548                while (pevent->OSEventGrp != 0) {         /* Yes, Post to ALL tasks waiting on mailbox     */
;;;549                    (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK);
;;;550                }
;;;551            } else {                                      /* No,  Post to HPT waiting on mbox              */
;;;552                (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK);
;;;553            }
;;;554            OS_EXIT_CRITICAL();
;;;555            if ((opt & OS_POST_OPT_NO_SCHED) == 0) {	  /* See if scheduler needs to be invoked          */
;;;556                OS_Sched();                               /* Find HPT ready to run                         */
;;;557            }
;;;558            return (OS_ERR_NONE);
;;;559        }
;;;560        if (pevent->OSEventPtr != (void *)0) {            /* Make sure mailbox doesn't already have a msg  */
;;;561            OS_EXIT_CRITICAL();
;;;562            return (OS_ERR_MBOX_FULL);
;;;563        }
;;;564        pevent->OSEventPtr = pmsg;                        /* Place message in mailbox                      */
;;;565        OS_EXIT_CRITICAL();
;;;566        return (OS_ERR_NONE);
;;;567    }
0002d6  e7a0              B        |L1.538|
                  |L1.728|
0002d8  f7fff7ff          BL       OS_CPU_SR_Save
0002dc  4607              MOV      r7,r0                 ;545
0002de  7aa0              LDRB     r0,[r4,#0xa]          ;546
0002e0  b1d8              CBZ      r0,|L1.794|
0002e2  07e8              LSLS     r0,r5,#31             ;547
0002e4  d00a              BEQ      |L1.764|
0002e6  e005              B        |L1.756|
                  |L1.744|
0002e8  2300              MOVS     r3,#0                 ;549
0002ea  2202              MOVS     r2,#2                 ;549
0002ec  4631              MOV      r1,r6                 ;549
0002ee  4620              MOV      r0,r4                 ;549
0002f0  f7fff7ff          BL       OS_EventTaskRdy
                  |L1.756|
0002f4  7aa0              LDRB     r0,[r4,#0xa]          ;548
0002f6  2800              CMP      r0,#0                 ;548
0002f8  d1f6              BNE      |L1.744|
0002fa  e005              B        |L1.776|
                  |L1.764|
0002fc  2300              MOVS     r3,#0                 ;552
0002fe  2202              MOVS     r2,#2                 ;552
000300  4631              MOV      r1,r6                 ;552
000302  4620              MOV      r0,r4                 ;552
000304  f7fff7ff          BL       OS_EventTaskRdy
                  |L1.776|
000308  4638              MOV      r0,r7                 ;554
00030a  f7fff7ff          BL       OS_CPU_SR_Restore
00030e  0768              LSLS     r0,r5,#29             ;555
000310  d401              BMI      |L1.790|
000312  f7fff7ff          BL       OS_Sched
                  |L1.790|
000316  2000              MOVS     r0,#0                 ;558
000318  e77f              B        |L1.538|
                  |L1.794|
00031a  6860              LDR      r0,[r4,#4]            ;560
00031c  b120              CBZ      r0,|L1.808|
00031e  4638              MOV      r0,r7                 ;561
000320  f7fff7ff          BL       OS_CPU_SR_Restore
000324  2014              MOVS     r0,#0x14              ;562
000326  e778              B        |L1.538|
                  |L1.808|
000328  6066              STR      r6,[r4,#4]            ;564
00032a  4638              MOV      r0,r7                 ;565
00032c  f7fff7ff          BL       OS_CPU_SR_Restore
000330  2000              MOVS     r0,#0                 ;566
000332  e772              B        |L1.538|
;;;568    #endif
                          ENDP

                  OSMboxQuery PROC
;;;590    INT8U  OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data)
;;;591    {
000334  b570              PUSH     {r4-r6,lr}
000336  4605              MOV      r5,r0
000338  460e              MOV      r6,r1
;;;592        INT8U      i;
;;;593    #if OS_LOWEST_PRIO <= 63
;;;594        INT8U     *psrc;
;;;595        INT8U     *pdest;
;;;596    #else
;;;597        INT16U    *psrc;
;;;598        INT16U    *pdest;
;;;599    #endif
;;;600    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;601        OS_CPU_SR  cpu_sr = 0;
;;;602    #endif
;;;603    
;;;604    
;;;605    
;;;606    #if OS_ARG_CHK_EN > 0
;;;607        if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
;;;608            return (OS_ERR_PEVENT_NULL);
;;;609        }
;;;610        if (p_mbox_data == (OS_MBOX_DATA *)0) {                /* Validate 'p_mbox_data'                   */
;;;611            return (OS_ERR_PDATA_NULL);
;;;612        }
;;;613    #endif
;;;614        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {       /* Validate event block type                */
00033a  7828              LDRB     r0,[r5,#0]
00033c  2801              CMP      r0,#1
00033e  d001              BEQ      |L1.836|
;;;615            return (OS_ERR_EVENT_TYPE);
000340  2001              MOVS     r0,#1
;;;616        }
;;;617        OS_ENTER_CRITICAL();
;;;618        p_mbox_data->OSEventGrp = pevent->OSEventGrp;          /* Copy message mailbox wait list           */
;;;619        psrc                    = &pevent->OSEventTbl[0];
;;;620        pdest                   = &p_mbox_data->OSEventTbl[0];
;;;621        for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
;;;622            *pdest++ = *psrc++;
;;;623        }
;;;624        p_mbox_data->OSMsg = pevent->OSEventPtr;               /* Get message from mailbox                 */
;;;625        OS_EXIT_CRITICAL();
;;;626        return (OS_ERR_NONE);
;;;627    }
000342  bd70              POP      {r4-r6,pc}
                  |L1.836|
000344  f7fff7ff          BL       OS_CPU_SR_Save
000348  7aa9              LDRB     r1,[r5,#0xa]          ;618
00034a  7231              STRB     r1,[r6,#8]            ;618
00034c  f105f105          ADD      r4,r5,#0xb            ;619
000350  1d32              ADDS     r2,r6,#4              ;620
000352  2100              MOVS     r1,#0                 ;621
                  |L1.852|
000354  f814f814          LDRB     r3,[r4],#1            ;622
000358  f802f802          STRB     r3,[r2],#1            ;622
00035c  1c49              ADDS     r1,r1,#1              ;621
00035e  b2c9              UXTB     r1,r1                 ;621
000360  2904              CMP      r1,#4                 ;621
000362  d3f7              BCC      |L1.852|
000364  6869              LDR      r1,[r5,#4]            ;624
000366  6031              STR      r1,[r6,#0]            ;624
000368  f7fff7ff          BL       OS_CPU_SR_Restore
00036c  2000              MOVS     r0,#0                 ;626
00036e  bd70              POP      {r4-r6,pc}
;;;628    #endif                                                     /* OS_MBOX_QUERY_EN                         */
                          ENDP

                  |L1.880|
000370  00000000          DCD      OSIntNesting
                  |L1.884|
000374  00000000          DCD      OSEventFreeList
                  |L1.888|
000378  00000000          DCD      OSLockNesting
                  |L1.892|
00037c  00000000          DCD      OSTCBCur

⌨️ 快捷键说明

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