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

📄 os_mbox.s79

📁 ARM仿真案例
💻 S79
📖 第 1 页 / 共 4 页
字号:
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION   21/Jul/2006  16:27:47 /
// Copyright 1999-2005 IAR Systems. All rights reserved.                     /
// Time limited license: 22 days left                                        /
//                                                                           /
//    Cpu mode        =  interwork                                           /
//    Endian          =  little                                              /
//    Stack alignment =  4                                                   /
//    Source file     =  E:\Project\ucos-ii\spi\uCOS-II\os_mbox.c            /
//    Command line    =  E:\Project\ucos-ii\spi\uCOS-II\os_mbox.c -lCN       /
//                       E:\Project\ucos-ii\spi\Debug\List\ -lA              /
//                       E:\Project\ucos-ii\spi\Debug\List\ -o               /
//                       E:\Project\ucos-ii\spi\Debug\Obj\ -s9 --no_cse      /
//                       --no_unroll --no_inline --no_code_motion --no_tbaa  /
//                       --no_clustering --no_scheduling --debug --cpu_mode  /
//                       thumb --endian little --cpu ARM7TDMI-S              /
//                       --stack_align 4 --interwork -e --fpu None           /
//                       --dlib_config "e:\Program Files\IAR                 /
//                       Systems\Embedded Workbench 4.0                      /
//                       Evaluation\ARM\LIB\dl4tptinl8n.h" -I                /
//                       E:\Project\ucos-ii\spi\ -I                          /
//                       E:\Project\ucos-ii\spi\App\ -I                      /
//                       E:\Project\ucos-ii\spi\ARM\ -I                      /
//                       E:\Project\ucos-ii\spi\BSP\ -I                      /
//                       E:\Project\ucos-ii\spi\uCOS-II\ -I "e:\Program      /
//                       Files\IAR Systems\Embedded Workbench 4.0            /
//                       Evaluation\ARM\INC\"                                /
//    List file       =  E:\Project\ucos-ii\spi\Debug\List\os_mbox.s79       /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME os_mbox

        RTMODEL "StackAlign4", "USED"
        RTMODEL "__cpu_mode", "__pcs__interwork"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "6"

        RSEG CSTACK:DATA:NOROOT(2)

??DataTable0 EQU 0
??DataTable1 EQU 0
??DataTable2 EQU 0
??DataTable3 EQU 0
??DataTable4 EQU 0
??DataTable5 EQU 0
        MULTWEAK ??OSMboxAccept??rA
        MULTWEAK ??OSMboxCreate??rA
        MULTWEAK ??OSMboxDel??rA
        MULTWEAK ??OSMboxPend??rA
        MULTWEAK ??OSMboxPost??rA
        MULTWEAK ??OSMboxPostOpt??rA
        MULTWEAK ??OSMboxQuery??rA
        MULTWEAK ??OS_CPU_SR_Restore??rT
        MULTWEAK ??OS_CPU_SR_Save??rT
        MULTWEAK ??OS_EventTO??rT
        MULTWEAK ??OS_EventTaskRdy??rT
        MULTWEAK ??OS_EventTaskWait??rT
        MULTWEAK ??OS_EventWaitListInit??rT
        MULTWEAK ??OS_Sched??rT
        PUBLIC OSMboxAccept
        FUNCTION OSMboxAccept,0203H
        LOCFRAME CSTACK, 12, STACK
        PUBLIC OSMboxCreate
        FUNCTION OSMboxCreate,0203H
        LOCFRAME CSTACK, 12, STACK
        PUBLIC OSMboxDel
        FUNCTION OSMboxDel,0203H
        LOCFRAME CSTACK, 24, STACK
        PUBLIC OSMboxPend
        FUNCTION OSMboxPend,0203H
        LOCFRAME CSTACK, 24, STACK
        PUBLIC OSMboxPost
        FUNCTION OSMboxPost,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC OSMboxPostOpt
        FUNCTION OSMboxPostOpt,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC OSMboxQuery
        FUNCTION OSMboxQuery,0203H
        LOCFRAME CSTACK, 12, STACK
        
        CFI Names cfiNames0
        CFI StackFrame CFA R13 HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, CPSR:32, R13:32
        CFI Resource R14:32, SPSR:32
        CFI VirtualResource ?RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 4
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA R13+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI CPSR SameValue
        CFI R14 Undefined
        CFI SPSR SameValue
        CFI ?RET R14
        CFI EndCommon cfiCommon0
        
        
        CFI Common cfiCommon1 Using cfiNames0
        CFI CodeAlign 2
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA R13+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI CPSR SameValue
        CFI R14 Undefined
        CFI SPSR SameValue
        CFI ?RET R14
        CFI EndCommon cfiCommon1
        
OS_CPU_SR_Restore   SYMBOL "OS_CPU_SR_Restore"
OS_CPU_SR_Save      SYMBOL "OS_CPU_SR_Save"
OS_EventTO          SYMBOL "OS_EventTO"
OS_EventTaskRdy     SYMBOL "OS_EventTaskRdy"
OS_EventTaskWait    SYMBOL "OS_EventTaskWait"
OS_EventWaitListInit SYMBOL "OS_EventWaitListInit"
OS_Sched            SYMBOL "OS_Sched"
OSMboxAccept        SYMBOL "OSMboxAccept"
??OSMboxAccept??rA  SYMBOL "??rA", OSMboxAccept
OSMboxCreate        SYMBOL "OSMboxCreate"
??OSMboxCreate??rA  SYMBOL "??rA", OSMboxCreate
OSMboxDel           SYMBOL "OSMboxDel"
??OSMboxDel??rA     SYMBOL "??rA", OSMboxDel
OSMboxPend          SYMBOL "OSMboxPend"
??OSMboxPend??rA    SYMBOL "??rA", OSMboxPend
OSMboxPost          SYMBOL "OSMboxPost"
??OSMboxPost??rA    SYMBOL "??rA", OSMboxPost
OSMboxPostOpt       SYMBOL "OSMboxPostOpt"
??OSMboxPostOpt??rA SYMBOL "??rA", OSMboxPostOpt
OSMboxQuery         SYMBOL "OSMboxQuery"
??OSMboxQuery??rA   SYMBOL "??rA", OSMboxQuery
??OS_CPU_SR_Restore??rT SYMBOL "??rT", OS_CPU_SR_Restore
??OS_CPU_SR_Save??rT SYMBOL "??rT", OS_CPU_SR_Save
??OS_EventTO??rT    SYMBOL "??rT", OS_EventTO
??OS_EventTaskRdy??rT SYMBOL "??rT", OS_EventTaskRdy
??OS_EventTaskWait??rT SYMBOL "??rT", OS_EventTaskWait
??OS_EventWaitListInit??rT SYMBOL "??rT", OS_EventWaitListInit
??OS_Sched??rT      SYMBOL "??rT", OS_Sched

        EXTERN OSEventFreeList
        EXTERN OSIntNesting
        EXTERN OSTCBCur
        EXTERN OS_CPU_SR_Restore
        FUNCTION OS_CPU_SR_Restore,0202H
        EXTERN OS_CPU_SR_Save
        FUNCTION OS_CPU_SR_Save,0202H
        EXTERN OS_EventTO
        FUNCTION OS_EventTO,0202H
        EXTERN OS_EventTaskRdy
        FUNCTION OS_EventTaskRdy,0202H
        EXTERN OS_EventTaskWait
        FUNCTION OS_EventTaskWait,0202H
        EXTERN OS_EventWaitListInit
        FUNCTION OS_EventWaitListInit,0202H
        EXTERN OS_Sched
        FUNCTION OS_Sched,0202H


        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI NoFunction
        ARM
??OSMboxAccept??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock0
        REQUIRE OSMboxAccept
// E:\Project\ucos-ii\spi\uCOS-II\os_mbox.c
//    1 /*
//    2 *********************************************************************************************************
//    3 *                                                uC/OS-II
//    4 *                                          The Real-Time Kernel
//    5 *                                       MESSAGE MAILBOX MANAGEMENT
//    6 *
//    7 *                          (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
//    8 *                                           All Rights Reserved
//    9 *
//   10 * File : OS_MBOX.C
//   11 * By   : Jean J. Labrosse
//   12 *********************************************************************************************************
//   13 */
//   14 
//   15 #ifndef  OS_MASTER_FILE
//   16 #include <ucos_ii.h>
//   17 #endif
//   18 
//   19 #if OS_MBOX_EN > 0
//   20 /*
//   21 *********************************************************************************************************
//   22 *                                     ACCEPT MESSAGE FROM MAILBOX
//   23 *
//   24 * Description: This function checks the mailbox to see if a message is available.  Unlike OSMboxPend(),
//   25 *              OSMboxAccept() does not suspend the calling task if a message is not available.
//   26 *
//   27 * Arguments  : pevent        is a pointer to the event control block
//   28 *
//   29 * Returns    : != (void *)0  is the message in the mailbox if one is available.  The mailbox is cleared
//   30 *                            so the next time OSMboxAccept() is called, the mailbox will be empty.
//   31 *              == (void *)0  if the mailbox is empty or,
//   32 *                            if 'pevent' is a NULL pointer or,
//   33 *                            if you didn't pass the proper event pointer.
//   34 *********************************************************************************************************
//   35 */
//   36 
//   37 #if OS_MBOX_ACCEPT_EN > 0

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon1
        CFI Function OSMboxAccept
        THUMB
//   38 void  *OSMboxAccept (OS_EVENT *pevent)
//   39 {
OSMboxAccept:
        PUSH     {R4,R5,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R5 Frame(CFA, -8)
        CFI R4 Frame(CFA, -12)
        CFI CFA R13+12
        MOVS     R4,R0
//   40 #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
//   41     OS_CPU_SR  cpu_sr;
//   42 #endif    
//   43     void      *msg;
//   44 
//   45 
//   46 #if OS_ARG_CHK_EN > 0
//   47     if (pevent == (OS_EVENT *)0) {                        /* Validate 'pevent'                         */
        BNE      ??OSMboxAccept_0
//   48         return ((void *)0);
??OSMboxAccept_1:
        MOVS     R0,#+0
        B        ??OSMboxAccept_2
//   49     }
//   50 #endif
//   51     if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {      /* Validate event block type                 */
??OSMboxAccept_0:
        LDRB     R0,[R4, #+0]
        CMP      R0,#+1
        BNE      ??OSMboxAccept_1
//   52         return ((void *)0);
//   53     }
//   54     OS_ENTER_CRITICAL();
??OSMboxAccept_3:
        _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
//   55     msg                = pevent->OSEventPtr;
        LDR      R5,[R4, #+4]
//   56     pevent->OSEventPtr = (void *)0;                       /* Clear the mailbox                         */
        MOVS     R1,#+0
        STR      R1,[R4, #+4]
//   57     OS_EXIT_CRITICAL();
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//   58     return (msg);                                         /* Return the message received (or NULL)     */
        MOVS     R0,R5
??OSMboxAccept_2:
        POP      {R4,R5}
        POP      {R1}
        BX       R1               ;; return
        CFI EndBlock cfiBlock1
//   59 }

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI NoFunction
        ARM
??OSMboxCreate??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock2
        REQUIRE OSMboxCreate
//   60 #endif
//   61 
//   62 /*
//   63 *********************************************************************************************************
//   64 *                                        CREATE A MESSAGE MAILBOX
//   65 *
//   66 * Description: This function creates a message mailbox if free event control blocks are available.
//   67 *
//   68 * Arguments  : msg           is a pointer to a message that you wish to deposit in the mailbox.  If
//   69 *                            you set this value to the NULL pointer (i.e. (void *)0) then the mailbox
//   70 *                            will be considered empty.
//   71 *
//   72 * Returns    : != (OS_EVENT *)0  is a pointer to the event control clock (OS_EVENT) associated with the
//   73 *                                created mailbox
//   74 *              == (OS_EVENT *)0  if no event control blocks were available
//   75 *********************************************************************************************************
//   76 */
//   77 

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon1
        CFI Function OSMboxCreate
        THUMB
//   78 OS_EVENT  *OSMboxCreate (void *msg)
//   79 {
OSMboxCreate:
        PUSH     {R4,R5,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R5 Frame(CFA, -8)
        CFI R4 Frame(CFA, -12)
        CFI CFA R13+12
        MOVS     R4,R0
//   80 #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
//   81     OS_CPU_SR  cpu_sr;
//   82 #endif    
//   83     OS_EVENT  *pevent;
//   84 
//   85 
//   86     if (OSIntNesting > 0) {                      /* See if called from ISR ...                         */
        LDR      R0,??DataTable7  ;; OSIntNesting
        LDRB     R0,[R0, #+0]
        CMP      R0,#+0
        BEQ      ??OSMboxCreate_0

⌨️ 快捷键说明

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