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

📄 os_sem.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
📖 第 1 页 / 共 3 页
字号:
000218  2302              MOVS     r3,#2                 ;412
00021a  2201              MOVS     r2,#1                 ;412
00021c  2100              MOVS     r1,#0                 ;412
00021e  4628              MOV      r0,r5                 ;412
000220  f7fff7ff          BL       OS_EventTaskRdy
000224  1c64              ADDS     r4,r4,#1              ;413
000226  b2e4              UXTB     r4,r4                 ;413
                  |L1.552|
000228  7aa8              LDRB     r0,[r5,#0xa]          ;411
00022a  2800              CMP      r0,#0                 ;411
00022c  d1f4              BNE      |L1.536|
00022e  e006              B        |L1.574|
                  |L1.560|
000230  2302              MOVS     r3,#2                 ;419
000232  2201              MOVS     r2,#1                 ;419
000234  2100              MOVS     r1,#0                 ;419
000236  4628              MOV      r0,r5                 ;419
000238  f7fff7ff          BL       OS_EventTaskRdy
00023c  2401              MOVS     r4,#1                 ;420
                  |L1.574|
00023e  4638              MOV      r0,r7                 ;423
000240  f7fff7ff          BL       OS_CPU_SR_Restore
000244  f7fff7ff          BL       OS_Sched
000248  200e              MOVS     r0,#0xe               ;425
00024a  7030              STRB     r0,[r6,#0]            ;425
00024c  4620              MOV      r0,r4                 ;426
00024e  e7d7              B        |L1.512|
                  |L1.592|
000250  4638              MOV      r0,r7                 ;428
000252  f7fff7ff          BL       OS_CPU_SR_Restore
000256  2000              MOVS     r0,#0                 ;429
000258  7030              STRB     r0,[r6,#0]            ;429
00025a  e7d1              B        |L1.512|
;;;432    #endif
                          ENDP

                  OSSemPost PROC
;;;453    INT8U  OSSemPost (OS_EVENT *pevent)
;;;454    {
00025c  b570              PUSH     {r4-r6,lr}
00025e  4604              MOV      r4,r0
;;;455    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;456        OS_CPU_SR  cpu_sr = 0;
;;;457    #endif
;;;458    
;;;459    
;;;460    
;;;461    #if OS_ARG_CHK_EN > 0
;;;462        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
;;;463            return (OS_ERR_PEVENT_NULL);
;;;464        }
;;;465    #endif
;;;466        if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                     */
000260  7820              LDRB     r0,[r4,#0]
000262  2803              CMP      r0,#3
000264  d001              BEQ      |L1.618|
;;;467            return (OS_ERR_EVENT_TYPE);
000266  2001              MOVS     r0,#1
;;;468        }
;;;469        OS_ENTER_CRITICAL();
;;;470        if (pevent->OSEventGrp != 0) {                    /* See if any task waiting for semaphore         */
;;;471                                                          /* Ready HPT waiting on event                    */
;;;472            (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK);
;;;473            OS_EXIT_CRITICAL();
;;;474            OS_Sched();                                   /* Find HPT ready to run                         */
;;;475            return (OS_ERR_NONE);
;;;476        }
;;;477        if (pevent->OSEventCnt < 65535u) {                /* Make sure semaphore will not overflow         */
;;;478            pevent->OSEventCnt++;                         /* Increment semaphore count to register event   */
;;;479            OS_EXIT_CRITICAL();
;;;480            return (OS_ERR_NONE);
;;;481        }
;;;482        OS_EXIT_CRITICAL();                               /* Semaphore value has reached its maximum       */
;;;483        return (OS_ERR_SEM_OVF);
;;;484    }
000268  bd70              POP      {r4-r6,pc}
                  |L1.618|
00026a  f7fff7ff          BL       OS_CPU_SR_Save
00026e  4605              MOV      r5,r0                 ;469
000270  7aa0              LDRB     r0,[r4,#0xa]          ;470
000272  b160              CBZ      r0,|L1.654|
000274  2300              MOVS     r3,#0                 ;472
000276  2201              MOVS     r2,#1                 ;472
000278  4619              MOV      r1,r3                 ;472
00027a  4620              MOV      r0,r4                 ;472
00027c  f7fff7ff          BL       OS_EventTaskRdy
000280  4628              MOV      r0,r5                 ;473
000282  f7fff7ff          BL       OS_CPU_SR_Restore
000286  f7fff7ff          BL       OS_Sched
00028a  2000              MOVS     r0,#0                 ;475
00028c  bd70              POP      {r4-r6,pc}
                  |L1.654|
00028e  8921              LDRH     r1,[r4,#8]            ;477
000290  f64ff64f          MOV      r0,#0xffff            ;477
000294  4281              CMP      r1,r0                 ;477
000296  d206              BCS      |L1.678|
000298  1c49              ADDS     r1,r1,#1              ;478
00029a  8121              STRH     r1,[r4,#8]            ;478
00029c  4628              MOV      r0,r5                 ;479
00029e  f7fff7ff          BL       OS_CPU_SR_Restore
0002a2  2000              MOVS     r0,#0                 ;480
0002a4  bd70              POP      {r4-r6,pc}
                  |L1.678|
0002a6  4628              MOV      r0,r5                 ;482
0002a8  f7fff7ff          BL       OS_CPU_SR_Restore
0002ac  2032              MOVS     r0,#0x32              ;483
0002ae  bd70              POP      {r4-r6,pc}
;;;485    
                          ENDP

                  OSSemQuery PROC
;;;507    INT8U  OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data)
;;;508    {
0002b0  b570              PUSH     {r4-r6,lr}
0002b2  4605              MOV      r5,r0
0002b4  460e              MOV      r6,r1
;;;509    #if OS_LOWEST_PRIO <= 63
;;;510        INT8U     *psrc;
;;;511        INT8U     *pdest;
;;;512    #else
;;;513        INT16U    *psrc;
;;;514        INT16U    *pdest;
;;;515    #endif
;;;516        INT8U      i;
;;;517    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;518        OS_CPU_SR  cpu_sr = 0;
;;;519    #endif
;;;520    
;;;521    
;;;522    
;;;523    #if OS_ARG_CHK_EN > 0
;;;524        if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
;;;525            return (OS_ERR_PEVENT_NULL);
;;;526        }
;;;527        if (p_sem_data == (OS_SEM_DATA *)0) {                  /* Validate 'p_sem_data'                    */
;;;528            return (OS_ERR_PDATA_NULL);
;;;529        }
;;;530    #endif
;;;531        if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type                */
0002b6  7828              LDRB     r0,[r5,#0]
0002b8  2803              CMP      r0,#3
0002ba  d001              BEQ      |L1.704|
;;;532            return (OS_ERR_EVENT_TYPE);
0002bc  2001              MOVS     r0,#1
;;;533        }
;;;534        OS_ENTER_CRITICAL();
;;;535        p_sem_data->OSEventGrp = pevent->OSEventGrp;           /* Copy message mailbox wait list           */
;;;536        psrc                   = &pevent->OSEventTbl[0];
;;;537        pdest                  = &p_sem_data->OSEventTbl[0];
;;;538        for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
;;;539            *pdest++ = *psrc++;
;;;540        }
;;;541        p_sem_data->OSCnt = pevent->OSEventCnt;                /* Get semaphore count                      */
;;;542        OS_EXIT_CRITICAL();
;;;543        return (OS_ERR_NONE);
;;;544    }
0002be  bd70              POP      {r4-r6,pc}
                  |L1.704|
0002c0  f7fff7ff          BL       OS_CPU_SR_Save
0002c4  7aa9              LDRB     r1,[r5,#0xa]          ;535
0002c6  71b1              STRB     r1,[r6,#6]            ;535
0002c8  f105f105          ADD      r4,r5,#0xb            ;536
0002cc  1cb1              ADDS     r1,r6,#2              ;537
0002ce  2200              MOVS     r2,#0                 ;538
                  |L1.720|
0002d0  f814f814          LDRB     r3,[r4],#1            ;539
0002d4  f801f801          STRB     r3,[r1],#1            ;539
0002d8  1c52              ADDS     r2,r2,#1              ;538
0002da  b2d2              UXTB     r2,r2                 ;538
0002dc  2a04              CMP      r2,#4                 ;538
0002de  d3f7              BCC      |L1.720|
0002e0  8929              LDRH     r1,[r5,#8]            ;541
0002e2  8031              STRH     r1,[r6,#0]            ;541
0002e4  f7fff7ff          BL       OS_CPU_SR_Restore
0002e8  2000              MOVS     r0,#0                 ;543
0002ea  bd70              POP      {r4-r6,pc}
;;;545    #endif                                                     /* OS_SEM_QUERY_EN                          */
                          ENDP

                  OSSemSet PROC
;;;573    void  OSSemSet (OS_EVENT *pevent, INT16U cnt, INT8U *perr)
;;;574    {
0002ec  b570              PUSH     {r4-r6,lr}
0002ee  4604              MOV      r4,r0
0002f0  460e              MOV      r6,r1
0002f2  4615              MOV      r5,r2
;;;575    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;576        OS_CPU_SR  cpu_sr = 0;
;;;577    #endif
;;;578    
;;;579    
;;;580    
;;;581    #if OS_ARG_CHK_EN > 0
;;;582        if (perr == (INT8U *)0) {                         /* Validate 'perr'                               */
;;;583            return;
;;;584        }
;;;585        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
;;;586            *perr = OS_ERR_PEVENT_NULL;
;;;587            return;
;;;588        }
;;;589    #endif
;;;590        if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                     */
0002f4  7820              LDRB     r0,[r4,#0]
0002f6  2803              CMP      r0,#3
0002f8  d002              BEQ      |L1.768|
;;;591            *perr = OS_ERR_EVENT_TYPE;
0002fa  2001              MOVS     r0,#1
0002fc  7028              STRB     r0,[r5,#0]
;;;592            return;
;;;593        }
;;;594        OS_ENTER_CRITICAL();
;;;595        *perr = OS_ERR_NONE;
;;;596        if (pevent->OSEventCnt > 0) {                     /* See if semaphore already has a count          */
;;;597            pevent->OSEventCnt = cnt;                     /* Yes, set it to the new value specified.       */
;;;598        } else {                                          /* No                                            */
;;;599            if (pevent->OSEventGrp == 0) {                /*      See if task(s) waiting?                  */
;;;600                pevent->OSEventCnt = cnt;                 /*      No, OK to set the value                  */
;;;601            } else {
;;;602                *perr              = OS_ERR_TASK_WAITING;
;;;603            }
;;;604        }
;;;605        OS_EXIT_CRITICAL();
;;;606    }
0002fe  bd70              POP      {r4-r6,pc}
                  |L1.768|
000300  f7fff7ff          BL       OS_CPU_SR_Save
000304  2100              MOVS     r1,#0                 ;595
000306  7029              STRB     r1,[r5,#0]            ;595
000308  8921              LDRH     r1,[r4,#8]            ;596
00030a  b109              CBZ      r1,|L1.784|
00030c  8126              STRH     r6,[r4,#8]            ;597
00030e  e005              B        |L1.796|
                  |L1.784|
000310  7aa1              LDRB     r1,[r4,#0xa]          ;599
000312  b909              CBNZ     r1,|L1.792|
000314  8126              STRH     r6,[r4,#8]            ;600
000316  e001              B        |L1.796|
                  |L1.792|
000318  2149              MOVS     r1,#0x49              ;602
00031a  7029              STRB     r1,[r5,#0]            ;602
                  |L1.796|
00031c  e8bde8bd          POP      {r4-r6,lr}            ;605
000320  f7fff7ff          B.W      OS_CPU_SR_Restore
;;;607    #endif
                          ENDP

                  |L1.804|
000324  00000000          DCD      OSIntNesting
                  |L1.808|
000328  00000000          DCD      OSEventFreeList
                  |L1.812|
00032c  00000000          DCD      OSLockNesting
                  |L1.816|
000330  00000000          DCD      OSTCBCur

⌨️ 快捷键说明

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