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

📄 os_mem.s79

📁 ARM仿真案例
💻 S79
📖 第 1 页 / 共 3 页
字号:
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION   21/Jul/2006  17:17:37 /
// 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\counter\uCOS-II\os_mem.c         /
//    Command line    =  E:\Project\ucos-ii\counter\uCOS-II\os_mem.c -lCN    /
//                       E:\Project\ucos-ii\counter\Debug\List\ -lA          /
//                       E:\Project\ucos-ii\counter\Debug\List\ -o           /
//                       E:\Project\ucos-ii\counter\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\counter\ -I                      /
//                       E:\Project\ucos-ii\counter\App\ -I                  /
//                       E:\Project\ucos-ii\counter\BSP\ -I                  /
//                       E:\Project\ucos-ii\counter\ARM\ -I                  /
//                       E:\Project\ucos-ii\counter\uCOS-II\ -I "E:\Program  /
//                       Files\IAR Systems\Embedded Workbench 4.0            /
//                       Evaluation\ARM\INC\"                                /
//    List file       =  E:\Project\ucos-ii\counter\Debug\List\os_mem.s79    /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME os_mem

        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
        MULTWEAK ??OSMemCreate??rA
        MULTWEAK ??OSMemGet??rA
        MULTWEAK ??OSMemNameGet??rA
        MULTWEAK ??OSMemNameSet??rA
        MULTWEAK ??OSMemPut??rA
        MULTWEAK ??OSMemQuery??rA
        MULTWEAK ??OS_CPU_SR_Restore??rT
        MULTWEAK ??OS_CPU_SR_Save??rT
        MULTWEAK ??OS_MemClr??rT
        MULTWEAK ??OS_MemInit??rA
        MULTWEAK ??OS_StrCopy??rT
        MULTWEAK ??OS_StrLen??rT
        PUBLIC OSMemCreate
        FUNCTION OSMemCreate,0203H
        LOCFRAME CSTACK, 24, STACK
        PUBLIC OSMemGet
        FUNCTION OSMemGet,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC OSMemNameGet
        FUNCTION OSMemNameGet,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC OSMemNameSet
        FUNCTION OSMemNameSet,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC OSMemPut
        FUNCTION OSMemPut,0203H
        LOCFRAME CSTACK, 12, STACK
        PUBLIC OSMemQuery
        FUNCTION OSMemQuery,0203H
        LOCFRAME CSTACK, 12, STACK
        PUBLIC OS_MemInit
        FUNCTION OS_MemInit,0203H
        LOCFRAME CSTACK, 8, 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_MemClr           SYMBOL "OS_MemClr"
OS_StrCopy          SYMBOL "OS_StrCopy"
OS_StrLen           SYMBOL "OS_StrLen"
OSMemCreate         SYMBOL "OSMemCreate"
??OSMemCreate??rA   SYMBOL "??rA", OSMemCreate
OSMemGet            SYMBOL "OSMemGet"
??OSMemGet??rA      SYMBOL "??rA", OSMemGet
OSMemNameGet        SYMBOL "OSMemNameGet"
??OSMemNameGet??rA  SYMBOL "??rA", OSMemNameGet
OSMemNameSet        SYMBOL "OSMemNameSet"
??OSMemNameSet??rA  SYMBOL "??rA", OSMemNameSet
OSMemPut            SYMBOL "OSMemPut"
??OSMemPut??rA      SYMBOL "??rA", OSMemPut
OSMemQuery          SYMBOL "OSMemQuery"
??OSMemQuery??rA    SYMBOL "??rA", OSMemQuery
??OS_CPU_SR_Restore??rT SYMBOL "??rT", OS_CPU_SR_Restore
??OS_CPU_SR_Save??rT SYMBOL "??rT", OS_CPU_SR_Save
??OS_MemClr??rT     SYMBOL "??rT", OS_MemClr
OS_MemInit          SYMBOL "OS_MemInit"
??OS_MemInit??rA    SYMBOL "??rA", OS_MemInit
??OS_StrCopy??rT    SYMBOL "??rT", OS_StrCopy
??OS_StrLen??rT     SYMBOL "??rT", OS_StrLen

        EXTERN OSMemFreeList
        EXTERN OSMemTbl
        EXTERN OS_CPU_SR_Restore
        FUNCTION OS_CPU_SR_Restore,0202H
        EXTERN OS_CPU_SR_Save
        FUNCTION OS_CPU_SR_Save,0202H
        EXTERN OS_MemClr
        FUNCTION OS_MemClr,0202H
        EXTERN OS_StrCopy
        FUNCTION OS_StrCopy,0202H
        EXTERN OS_StrLen
        FUNCTION OS_StrLen,0202H


        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI NoFunction
        ARM
??OSMemCreate??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock0
        REQUIRE OSMemCreate
// E:\Project\ucos-ii\counter\uCOS-II\os_mem.c
//    1 /*
//    2 *********************************************************************************************************
//    3 *                                                uC/OS-II
//    4 *                                          The Real-Time Kernel
//    5 *                                            MEMORY MANAGEMENT
//    6 *
//    7 *                          (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
//    8 *                                           All Rights Reserved
//    9 *
//   10 * File : OS_MEM.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_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
//   20 /*
//   21 *********************************************************************************************************
//   22 *                                        CREATE A MEMORY PARTITION
//   23 *
//   24 * Description : Create a fixed-sized memory partition that will be managed by uC/OS-II.
//   25 *
//   26 * Arguments   : addr     is the starting address of the memory partition
//   27 *
//   28 *               nblks    is the number of memory blocks to create from the partition.
//   29 *
//   30 *               blksize  is the size (in bytes) of each block in the memory partition.
//   31 *
//   32 *               err      is a pointer to a variable containing an error message which will be set by
//   33 *                        this function to either:
//   34 *
//   35 *                        OS_NO_ERR            if the memory partition has been created correctly.
//   36 *                        OS_MEM_INVALID_ADDR  you are specifying an invalid address for the memory 
//   37 *                                             storage of the partition.
//   38 *                        OS_MEM_INVALID_PART  no free partitions available
//   39 *                        OS_MEM_INVALID_BLKS  user specified an invalid number of blocks (must be >= 2)
//   40 *                        OS_MEM_INVALID_SIZE  user specified an invalid block size
//   41 *                                             (must be greater than the size of a pointer)
//   42 * Returns    : != (OS_MEM *)0  is the partition was created
//   43 *              == (OS_MEM *)0  if the partition was not created because of invalid arguments or, no
//   44 *                              free partition is available.
//   45 *********************************************************************************************************
//   46 */
//   47 

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon1
        CFI Function OSMemCreate
        THUMB
//   48 OS_MEM  *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
//   49 {
OSMemCreate:
        PUSH     {R0,R4-R7,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R7 Frame(CFA, -8)
        CFI R6 Frame(CFA, -12)
        CFI R5 Frame(CFA, -16)
        CFI R4 Frame(CFA, -20)
        CFI CFA R13+24
        MOVS     R4,R1
        MOVS     R5,R2
        MOVS     R6,R3
//   50 #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
//   51     OS_CPU_SR  cpu_sr;
//   52 #endif    
//   53     OS_MEM    *pmem;
//   54     INT8U     *pblk;
//   55     void     **plink;
//   56     INT32U     i;
//   57 
//   58 
//   59 #if OS_ARG_CHK_EN > 0
//   60     if (addr == (void *)0) {                          /* Must pass a valid address for the memory part. */
        CMP      R0,#+0
        BNE      ??OSMemCreate_0
//   61         *err = OS_MEM_INVALID_ADDR;
        MOVS     R0,#+118
??OSMemCreate_1:
        STRB     R0,[R6, #+0]
//   62         return ((OS_MEM *)0);
        MOVS     R0,#+0
        B        ??OSMemCreate_2
//   63     }
//   64     if (nblks < 2) {                                  /* Must have at least 2 blocks per partition      */
??OSMemCreate_0:
        CMP      R4,#+2
        BCS      ??OSMemCreate_3
//   65         *err = OS_MEM_INVALID_BLKS;
        MOVS     R0,#+111
        B.N      ??OSMemCreate_1
//   66         return ((OS_MEM *)0);
//   67     }
//   68     if (blksize < sizeof(void *)) {                   /* Must contain space for at least a pointer      */
??OSMemCreate_3:
        CMP      R5,#+4
        BCS      ??OSMemCreate_4
//   69         *err = OS_MEM_INVALID_SIZE;
        MOVS     R0,#+112
        STRB     R0,[R6, #+0]
//   70         return ((OS_MEM *)0);
        MOVS     R0,#+0
        B        ??OSMemCreate_2
//   71     }
//   72 #endif
//   73     OS_ENTER_CRITICAL();
??OSMemCreate_4:
        _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
//   74     pmem = OSMemFreeList;                             /* Get next free memory partition                */
        LDR      R1,??DataTable1  ;; OSMemFreeList
        LDR      R7,[R1, #+0]
//   75     if (OSMemFreeList != (OS_MEM *)0) {               /* See if pool of free partitions was empty      */
        CMP      R7,#+0
        BEQ      ??OSMemCreate_5
//   76         OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList;
        LDR      R2,[R7, #+4]
        STR      R2,[R1, #+0]
//   77     }
//   78     OS_EXIT_CRITICAL();
??OSMemCreate_5:
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//   79     if (pmem == (OS_MEM *)0) {                        /* See if we have a memory partition             */
        CMP      R7,#+0
        BNE      ??OSMemCreate_6
//   80         *err = OS_MEM_INVALID_PART;
        MOVS     R0,#+110
        B.N      ??OSMemCreate_1
//   81         return ((OS_MEM *)0);
//   82     }
//   83     plink = (void **)addr;                            /* Create linked list of free memory blocks      */
??OSMemCreate_6:
        LDR      R0,[SP, #+0]
//   84     pblk  = (INT8U *)((INT32U)addr + blksize);
        ADDS     R1,R0,R5
//   85     for (i = 0; i < (nblks - 1); i++) {
        SUBS     R2,R4,#+1
        BEQ      ??OSMemCreate_7
//   86        *plink = (void *)pblk;
??OSMemCreate_8:
        STR      R1,[R0, #+0]
//   87         plink = *plink;
        MOVS     R0,R1
//   88         pblk  = (INT8U *)((INT32U)pblk + blksize);
        ADDS     R1,R1,R5
//   89     }
        SUBS     R2,R2,#+1
        BNE      ??OSMemCreate_8
//   90     *plink              = (void *)0;                  /* Last memory block points to NULL              */
??OSMemCreate_7:
        MOVS     R1,#+0
        STR      R1,[R0, #+0]
//   91     pmem->OSMemAddr     = addr;                       /* Store start address of memory partition       */
        LDR      R0,[SP, #+0]
        STR      R0,[R7, #+0]
//   92     pmem->OSMemFreeList = addr;                       /* Initialize pointer to pool of free blocks     */
        LDR      R0,[SP, #+0]
        STR      R0,[R7, #+4]
//   93     pmem->OSMemNFree    = nblks;                      /* Store number of free blocks in MCB            */
        STR      R4,[R7, #+16]
//   94     pmem->OSMemNBlks    = nblks;
        STR      R4,[R7, #+12]
//   95     pmem->OSMemBlkSize  = blksize;                    /* Store block size of each memory blocks        */
        STR      R5,[R7, #+8]
//   96     *err                = OS_NO_ERR;
        STRB     R1,[R6, #+0]
//   97     return (pmem);
        MOVS     R0,R7
??OSMemCreate_2:
        ADD      SP,SP,#+4
        CFI CFA R13+20

⌨️ 快捷键说明

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