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

📄 os_mem.lst

📁 ucos2.52在msp430上移植
💻 LST
📖 第 1 页 / 共 4 页
字号:
##############################################################################
#                                                                            #
# IAR MSP430 C-Compiler V1.26A/WIN                                           #
#                                                                            #
# Time limited license: 29 days left                                         #
#                                                                            #
#       Compile time  =  30/Sep/2002  18:04:11                               #
#       Target option =  SP430x31x                                           #
#       Memory model  =  small                                               #
#       Source file   =  c:\software\ucos-ii\source\os_mem.c                 #
#       List file     =  j:\software\ucos-ii\ti-msp430\iar\source\debug\list\os_mem.lst#
#       Object file   =  j:\software\ucos-ii\ti-msp430\iar\source\debug\obj\os_mem.r43#
#       ASM file      =  j:\software\ucos-ii\ti-msp430\iar\source\debug\list\os_mem.s43#
#       Command line  =  -OJ:\SOFTWARE\UCOS-II\TI-MSP430\IAR\SOURCE\Debug\Obj\ #
#                        -e -K -gA -s6 -RCODE -r0                            #
#                        -LJ:\SOFTWARE\UCOS-II\TI-MSP430\IAR\SOURCE\Debug\List\ #
#                        -q -t8 -x                                           #
#                        -AJ:\SOFTWARE\UCOS-II\TI-MSP430\IAR\SOURCE\Debug\List\ #
#                        -X -IC:\PROGRA~1\IARSYS~1\ew23\430\inc\             #
#                        -I\software\ucos-ii\ti-msp430\iar\source\           #
#                        -I\software\ucos-ii\source\                         #
#                        C:\SOFTWARE\uCOS-II\SOURCE\OS_MEM.C                 #
#                                                                            #
#                           Copyright 1996-2002 IAR Systems. All rights reserved. #
##############################################################################


extern  INT8U  const      OSMapTbl[];               /* Priority->Bit Mask lookup table                 */
-----------------------------------^
"c:\software\ucos-ii\source\ucos_ii.h",481  Warning[27]: Size of "extern" object 'OSMapTbl' is unknown

extern  INT8U  const      OSUnMapTbl[];             /* Priority->Index    lookup table                 */
-------------------------------------^
"c:\software\ucos-ii\source\ucos_ii.h",482  Warning[27]: Size of "extern" object 'OSUnMapTbl' is unknown
   \   0000                    NAME    os_mem(16)
   \   0000                    RSEG    CODE(1)
   \   0000                    PUBLIC  OSMemCreate
   \   0000                    EXTERN  OSMemFreeList
   \   0000                    PUBLIC  OSMemGet
   \   0000                    PUBLIC  OSMemPut
   \   0000                    PUBLIC  OSMemQuery
   \   0000                    EXTERN  OSMemTbl
   \   0000                    PUBLIC  OS_MemInit
   \   0000                    EXTERN  ?CL430_1_26_L08
   \   0000                    RSEG    CODE
   \   0000            OSMemCreate:
      1          /*
      2          *********************************************************************************************************
      3          *                                                uC/OS-II
      4          *                                          The Real-Time Kernel
      5          *                                            MEMORY MANAGEMENT
      6          *
      7          *                          (c) Copyright 1992-2002, 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 "includes.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          
     48          OS_MEM  *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
     49          {
   \   0000  0A12              PUSH    R10     
   \   0002  0B12              PUSH    R11     
   \   0004  0812              PUSH    R8      
   \   0006  0912              PUSH    R9      
   \   0008  0612              PUSH    R6      
   \   000A  0712              PUSH    R7      
   \   000C  0412              PUSH    R4      
   \   000E  0512              PUSH    R5      
   \   0010  31800600          SUB     #6,SP   
   \   0014  0A4C              MOV     R12,R10 
   \   0016  18411800          MOV     24(SP),R8       
   \   001A  19411A00          MOV     26(SP),R9       
   \   001E  1B411C00          MOV     28(SP),R11      
     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. */
   \   0022  0A93              CMP     #0,R10  
   \   0024  0520              JNE     (?0059) 
     61                  *err = OS_MEM_INVALID_ADDR;
   \   0026  FB407600          MOV.B   #118,0(R11)     
   \   002A  0000
     62                  return ((OS_MEM *)0);
   \   002C  0C43              MOV     #0,R12  
     63              }
   \   002E  5A3C              JMP     (?0072) 
   \   0030            ?0059:
     64              if (nblks < 2) {                                  /* Must have at least 2 blocks per partition      */
   \   0030  0C4E              MOV     R14,R12 
   \   0032  0D4F              MOV     R15,R13 
   \   0034  2C83              SUB     #2,R12  
   \   0036  0D73              SUBC    #0,R13  
   \   0038  052C              JC      (?0061) 
     65                  *err = OS_MEM_INVALID_BLKS;
   \   003A  FB406F00          MOV.B   #111,0(R11)     
   \   003E  0000
     66                  return ((OS_MEM *)0);
   \   0040  0C43              MOV     #0,R12  
     67              }
   \   0042  503C              JMP     (?0072) 
   \   0044            ?0061:
     68              if (blksize < sizeof(void *)) {                   /* Must contain space for at least a pointer      */
   \   0044  0C48              MOV     R8,R12  
   \   0046  0D49              MOV     R9,R13  
   \   0048  2C83              SUB     #2,R12  
   \   004A  0D73              SUBC    #0,R13  
   \   004C  052C              JC      (?0063) 
     69                  *err = OS_MEM_INVALID_SIZE;
   \   004E  FB407000          MOV.B   #112,0(R11)     
   \   0052  0000
     70                  return ((OS_MEM *)0);
   \   0054  0C43              MOV     #0,R12  
     71              }
   \   0056  463C              JMP     (?0072) 
   \   0058            ?0063:
     72          #endif
     73              OS_ENTER_CRITICAL();
   \   0058  32C2              DINT            
     74              pmem = OSMemFreeList;                             /* Get next free memory partition                */
   \   005A  14420000          MOV     &OSMemFreeList,R4       
     75              if (OSMemFreeList != (OS_MEM *)0) {               /* See if pool of free partitions was empty      */
   \   005E  82930000          CMP     #0,&OSMemFreeList       
   \   0062  0524              JEQ     (?0065) 
     76                  OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList;
   \   0064  1C420000          MOV     &OSMemFreeList,R12      
   \   0068  924C0200          MOV     2(R12),&OSMemFreeList   
   \   006C  0000
   \   006E            ?0065:
     77              }
     78              OS_EXIT_CRITICAL();
   \   006E  32D2              EINT            
     79              if (pmem == (OS_MEM *)0) {                        /* See if we have a memory partition             */
   \   0070  0493              CMP     #0,R4   
   \   0072  0520              JNE     (?0067) 
     80                  *err = OS_MEM_INVALID_PART;
   \   0074  FB406E00          MOV.B   #110,0(R11)     
   \   0078  0000
     81                  return ((OS_MEM *)0);
   \   007A  0C43              MOV     #0,R12  
     82              }
   \   007C  333C              JMP     (?0072) 
   \   007E            ?0067:
     83              plink = (void **)addr;                            /* Create linked list of free memory blocks      */
   \   007E  814A0000          MOV     R10,0(SP)       
     84              pblk  = (INT8U *)addr + blksize;
   \   0082  054A              MOV     R10,R5  
   \   0084  0558              ADD     R8,R5   
     85              for (i = 0; i < (nblks - 1); i++) {
   \   0086  81430200          MOV     #0,2(SP)        
   \   008A  81430400          MOV     #0,4(SP)        
   \   008E            ?0069:
   \   008E  064E              MOV     R14,R6  
   \   0090  074F              MOV     R15,R7  
   \   0092  3653              ADD     #65535,R6       
   \   0094  3763              ADDC    #-1,R7  
   \   0096  1C410200          MOV     2(SP),R12       
   \   009A  1D410400          MOV     4(SP),R13       
   \   009E  0C86              SUB     R6,R12  
   \   00A0  0D77              SUBC    R7,R13  
   \   00A2  2C41              MOV     @SP,R12 
   \   00A4  0A2C              JC      (?0068) 
     86                  *plink = (void *)pblk;
   \   00A6  8C450000          MOV     R5,0(R12)       
     87                  plink  = (void **)pblk;
   \   00AA  81450000          MOV     R5,0(SP)        
     88                  pblk   = pblk + blksize;
   \   00AE  0558              ADD     R8,R5   
   \   00B0  91530200          ADD     #1,2(SP)        
   \   00B4  81630400          ADDC    #0,4(SP)        
   \   00B8  EA3F              JMP     (?0069) 
   \   00BA            ?0068:
     89              }
     90              *plink              = (void *)0;                  /* Last memory block points to NULL              */
   \   00BA  8C430000          MOV     #0,0(R12)       
     91              pmem->OSMemAddr     = addr;                       /* Store start address of memory partition       */
   \   00BE  844A0000          MOV     R10,0(R4)       
     92              pmem->OSMemFreeList = addr;                       /* Initialize pointer to pool of free blocks     */
   \   00C2  844A0200          MOV     R10,2(R4)       
     93              pmem->OSMemNFree    = nblks;                      /* Store number of free blocks in MCB            */
   \   00C6  844E0C00          MOV     R14,12(R4)      
   \   00CA  844F0E00          MOV     R15,14(R4)      
     94              pmem->OSMemNBlks    = nblks;

⌨️ 快捷键说明

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