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

📄 os_mbox.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\output\os_mbox.o --depend=.\output\os_mbox.d --device=DARMSTM --apcs=interwork -O1 -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\output\os_mbox.crf ..\..\..\..\..\uCOS-II\Source\os_mbox.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  OSMboxAccept PROC
;;;47     void  *OSMboxAccept (OS_EVENT *pevent)
;;;48     {
000000  b570              PUSH     {r4-r6,lr}
000002  4604              MOV      r4,r0
;;;49         void      *pmsg;
;;;50     #if OS_CRITICAL_METHOD == 3                               /* Allocate storage for CPU status register  */
;;;51         OS_CPU_SR  cpu_sr = 0;
;;;52     #endif
;;;53     
;;;54     
;;;55     
;;;56     #if OS_ARG_CHK_EN > 0
;;;57         if (pevent == (OS_EVENT *)0) {                        /* Validate 'pevent'                         */
;;;58             return ((void *)0);
;;;59         }
;;;60     #endif
;;;61         if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {      /* Validate event block type                 */
000004  7820              LDRB     r0,[r4,#0]
000006  2801              CMP      r0,#1
000008  d001              BEQ      |L1.14|
;;;62             return ((void *)0);
00000a  2000              MOVS     r0,#0
;;;63         }
;;;64         OS_ENTER_CRITICAL();
;;;65         pmsg               = pevent->OSEventPtr;
;;;66         pevent->OSEventPtr = (void *)0;                       /* Clear the mailbox                         */
;;;67         OS_EXIT_CRITICAL();
;;;68         return (pmsg);                                        /* Return the message received (or NULL)     */
;;;69     }
00000c  bd70              POP      {r4-r6,pc}
                  |L1.14|
00000e  f7fff7ff          BL       OS_CPU_SR_Save
000012  6865              LDR      r5,[r4,#4]            ;65
000014  2100              MOVS     r1,#0                 ;66
000016  6061              STR      r1,[r4,#4]            ;66
000018  f7fff7ff          BL       OS_CPU_SR_Restore
00001c  4628              MOV      r0,r5                 ;68
00001e  bd70              POP      {r4-r6,pc}
;;;70     #endif
                          ENDP

                  OSMboxCreate PROC
;;;88     OS_EVENT  *OSMboxCreate (void *pmsg)
;;;89     {
000020  b570              PUSH     {r4-r6,lr}
000022  4605              MOV      r5,r0
;;;90         OS_EVENT  *pevent;
;;;91     #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;92         OS_CPU_SR  cpu_sr = 0;
;;;93     #endif
;;;94     
;;;95     
;;;96     
;;;97         if (OSIntNesting > 0) {                      /* See if called from ISR ...                         */
000024  48d2              LDR      r0,|L1.880|
000026  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
000028  b108              CBZ      r0,|L1.46|
;;;98             return ((OS_EVENT *)0);                  /* ... can't CREATE from an ISR                       */
00002a  2000              MOVS     r0,#0
;;;99         }
;;;100        OS_ENTER_CRITICAL();
;;;101        pevent = OSEventFreeList;                    /* Get next free event control block                  */
;;;102        if (OSEventFreeList != (OS_EVENT *)0) {      /* See if pool of free ECB pool was empty             */
;;;103            OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
;;;104        }
;;;105        OS_EXIT_CRITICAL();
;;;106        if (pevent != (OS_EVENT *)0) {
;;;107            pevent->OSEventType    = OS_EVENT_TYPE_MBOX;
;;;108            pevent->OSEventCnt     = 0;
;;;109            pevent->OSEventPtr     = pmsg;           /* Deposit message in event control block             */
;;;110    #if OS_EVENT_NAME_SIZE > 1
;;;111            pevent->OSEventName[0] = '?';
;;;112            pevent->OSEventName[1] = OS_ASCII_NUL;
;;;113    #endif
;;;114            OS_EventWaitListInit(pevent);
;;;115        }
;;;116        return (pevent);                             /* Return pointer to event control block              */
;;;117    }
00002c  bd70              POP      {r4-r6,pc}
                  |L1.46|
00002e  f7fff7ff          BL       OS_CPU_SR_Save
000032  49d0              LDR      r1,|L1.884|
000034  680c              LDR      r4,[r1,#0]            ;101  ; OSEventFreeList
000036  b10c              CBZ      r4,|L1.60|
000038  6862              LDR      r2,[r4,#4]            ;103
00003a  600a              STR      r2,[r1,#0]            ;103  ; OSEventFreeList
                  |L1.60|
00003c  f7fff7ff          BL       OS_CPU_SR_Restore
000040  b154              CBZ      r4,|L1.88|
000042  2001              MOVS     r0,#1                 ;107
000044  7020              STRB     r0,[r4,#0]            ;107
000046  2000              MOVS     r0,#0                 ;108
000048  8120              STRH     r0,[r4,#8]            ;108
00004a  6065              STR      r5,[r4,#4]            ;109
00004c  213f              MOVS     r1,#0x3f              ;111
00004e  73e1              STRB     r1,[r4,#0xf]          ;111
000050  7420              STRB     r0,[r4,#0x10]         ;112
000052  4620              MOV      r0,r4                 ;114
000054  f7fff7ff          BL       OS_EventWaitListInit
                  |L1.88|
000058  4620              MOV      r0,r4                 ;116
00005a  bd70              POP      {r4-r6,pc}
;;;118    /*$PAGE*/
                          ENDP

                  OSMboxDel PROC
;;;156    OS_EVENT  *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *perr)
;;;157    {
00005c  e92de92d          PUSH     {r4-r12,lr}
000060  4604              MOV      r4,r0
000062  468b              MOV      r11,r1
000064  4615              MOV      r5,r2
;;;158        BOOLEAN    tasks_waiting;
;;;159        OS_EVENT  *pevent_return;
;;;160    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;161        OS_CPU_SR  cpu_sr = 0;
;;;162    #endif
;;;163    
;;;164    
;;;165    
;;;166    #if OS_ARG_CHK_EN > 0
;;;167        if (perr == (INT8U *)0) {                              /* Validate 'perr'                          */
;;;168            return (pevent);
;;;169        }
;;;170        if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
;;;171            *perr = OS_ERR_PEVENT_NULL;
;;;172            return (pevent);
;;;173        }
;;;174    #endif
;;;175        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {       /* Validate event block type                */
000066  7820              LDRB     r0,[r4,#0]
000068  2801              CMP      r0,#1
00006a  d004              BEQ      |L1.118|
;;;176            *perr = OS_ERR_EVENT_TYPE;
00006c  2001              MOVS     r0,#1
00006e  7028              STRB     r0,[r5,#0]
;;;177            return (pevent);
000070  4620              MOV      r0,r4
                  |L1.114|
;;;178        }
;;;179        if (OSIntNesting > 0) {                                /* See if called from ISR ...               */
;;;180            *perr = OS_ERR_DEL_ISR;                            /* ... can't DELETE from an ISR             */
;;;181            return (pevent);
;;;182        }
;;;183        OS_ENTER_CRITICAL();
;;;184        if (pevent->OSEventGrp != 0) {                         /* See if any tasks waiting on mailbox      */
;;;185            tasks_waiting = OS_TRUE;                           /* Yes                                      */
;;;186        } else {
;;;187            tasks_waiting = OS_FALSE;                          /* No                                       */
;;;188        }
;;;189        switch (opt) {
;;;190            case OS_DEL_NO_PEND:                               /* Delete mailbox only if no task waiting   */
;;;191                 if (tasks_waiting == OS_FALSE) {
;;;192    #if OS_EVENT_NAME_SIZE > 1
;;;193                     pevent->OSEventName[0] = '?';             /* Unknown name                             */
;;;194                     pevent->OSEventName[1] = OS_ASCII_NUL;
;;;195    #endif
;;;196                     pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;197                     pevent->OSEventPtr  = OSEventFreeList;    /* Return Event Control Block to free list  */
;;;198                     pevent->OSEventCnt  = 0;
;;;199                     OSEventFreeList     = pevent;             /* Get next free event control block        */
;;;200                     OS_EXIT_CRITICAL();
;;;201                     *perr               = OS_ERR_NONE;
;;;202                     pevent_return       = (OS_EVENT *)0;      /* Mailbox has been deleted                 */
;;;203                 } else {
;;;204                     OS_EXIT_CRITICAL();
;;;205                     *perr               = OS_ERR_TASK_WAITING;
;;;206                     pevent_return       = pevent;
;;;207                 }
;;;208                 break;
;;;209    
;;;210            case OS_DEL_ALWAYS:                                /* Always delete the mailbox                */
;;;211                 while (pevent->OSEventGrp != 0) {             /* Ready ALL tasks waiting for mailbox      */
;;;212                     (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX, OS_STAT_PEND_OK);
;;;213                 }
;;;214    #if OS_EVENT_NAME_SIZE > 1
;;;215                 pevent->OSEventName[0] = '?';                 /* Unknown name                             */
;;;216                 pevent->OSEventName[1] = OS_ASCII_NUL;
;;;217    #endif
;;;218                 pevent->OSEventType    = OS_EVENT_TYPE_UNUSED;
;;;219                 pevent->OSEventPtr     = OSEventFreeList;     /* Return Event Control Block to free list  */
;;;220                 pevent->OSEventCnt     = 0;
;;;221                 OSEventFreeList        = pevent;              /* Get next free event control block        */
;;;222                 OS_EXIT_CRITICAL();
;;;223                 if (tasks_waiting == OS_TRUE) {               /* Reschedule only if task(s) were waiting  */
;;;224                     OS_Sched();                               /* Find highest priority task ready to run  */
;;;225                 }
;;;226                 *perr         = OS_ERR_NONE;
;;;227                 pevent_return = (OS_EVENT *)0;                /* Mailbox has been deleted                 */
;;;228                 break;
;;;229    
;;;230            default:
;;;231                 OS_EXIT_CRITICAL();
;;;232                 *perr         = OS_ERR_INVALID_OPT;
;;;233                 pevent_return = pevent;
;;;234                 break;
;;;235        }
;;;236        return (pevent_return);
;;;237    }
000072  e8bde8bd          POP      {r4-r12,pc}
                  |L1.118|
000076  48be              LDR      r0,|L1.880|
000078  7800              LDRB     r0,[r0,#0]            ;179  ; OSIntNesting
00007a  b118              CBZ      r0,|L1.132|
00007c  200f              MOVS     r0,#0xf               ;180
00007e  7028              STRB     r0,[r5,#0]            ;180
000080  4620              MOV      r0,r4                 ;181
000082  e7f6              B        |L1.114|
                  |L1.132|
000084  f7fff7ff          BL       OS_CPU_SR_Save
000088  4607              MOV      r7,r0                 ;183
00008a  7aa0              LDRB     r0,[r4,#0xa]          ;184
00008c  b108              CBZ      r0,|L1.146|
00008e  2601              MOVS     r6,#1                 ;185
000090  e000              B        |L1.148|
                  |L1.146|
000092  2600              MOVS     r6,#0                 ;187
                  |L1.148|
000094  f8dff8df          LDR      r9,|L1.884|
000098  f04ff04f          MOV      r8,#0x3f              ;189
00009c  f04ff04f          MOV      r10,#0                ;189
0000a0  f1bbf1bb          CMP      r11,#0                ;189
0000a4  d003              BEQ      |L1.174|
0000a6  f1bbf1bb          CMP      r11,#1                ;189
0000aa  d13d              BNE      |L1.296|
0000ac  e021              B        |L1.242|
                  |L1.174|
0000ae  b99e              CBNZ     r6,|L1.216|
0000b0  f884f884          STRB     r8,[r4,#0xf]          ;193
0000b4  f884f884          STRB     r10,[r4,#0x10]        ;194
0000b8  f884f884          STRB     r10,[r4,#0]           ;196
0000bc  f8d9f8d9          LDR      r0,[r9,#0]            ;197  ; OSEventFreeList
0000c0  6060              STR      r0,[r4,#4]            ;197
0000c2  f8a4f8a4          STRH     r10,[r4,#8]           ;198
0000c6  f8c9f8c9          STR      r4,[r9,#0]            ;199  ; OSEventFreeList
0000ca  4638              MOV      r0,r7                 ;200
0000cc  f7fff7ff          BL       OS_CPU_SR_Restore
0000d0  f885f885          STRB     r10,[r5,#0]           ;201
0000d4  2000              MOVS     r0,#0                 ;202
0000d6  e7cc              B        |L1.114|
                  |L1.216|
0000d8  4638              MOV      r0,r7                 ;204
0000da  f7fff7ff          BL       OS_CPU_SR_Restore
0000de  2049              MOVS     r0,#0x49              ;205
0000e0  7028              STRB     r0,[r5,#0]            ;205
0000e2  4620              MOV      r0,r4                 ;206
0000e4  e7c5              B        |L1.114|
                  |L1.230|
0000e6  2300              MOVS     r3,#0                 ;212
0000e8  2202              MOVS     r2,#2                 ;212
0000ea  4619              MOV      r1,r3                 ;212
0000ec  4620              MOV      r0,r4                 ;212
0000ee  f7fff7ff          BL       OS_EventTaskRdy
                  |L1.242|
0000f2  7aa0              LDRB     r0,[r4,#0xa]          ;211
0000f4  2800              CMP      r0,#0                 ;211
0000f6  d1f6              BNE      |L1.230|
0000f8  f884f884          STRB     r8,[r4,#0xf]          ;215
0000fc  f884f884          STRB     r10,[r4,#0x10]        ;216
000100  f884f884          STRB     r10,[r4,#0]           ;218
000104  f8d9f8d9          LDR      r0,[r9,#0]            ;219  ; OSEventFreeList
000108  6060              STR      r0,[r4,#4]            ;219
00010a  f8a4f8a4          STRH     r10,[r4,#8]           ;220
00010e  f8c9f8c9          STR      r4,[r9,#0]            ;221  ; OSEventFreeList

⌨️ 快捷键说明

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