TMS320F28377S: 我把tms320f28335的代码移植到tms320f28337s上遇到一个问题

Part Number: TMS320F28377S
Other Parts Discussed in Thread: TMS320F28335

我把tms320f28335的代码移植到tms320f28337s上遇到一个问题,只要加上这句话#pragma CODE_SECTION(RxaInt_Isr, "ramfuncs");,代码会报错Description Resource Path Location Type
#10247-D creating output section "ramfuncs" without a SECTIONS specification CRT_Printer C/C++ Problem

但是我同一个文件下还有一个串口发送的函数,也添加了#pragma CODE_SECTION(Scia_Byte, "ramfuncs");,这个是没有报错的,

不知道是为什么?

#pragma CODE_SECTION(Scia_Byte, "ramfuncs");
void Scia_Byte(unsigned int Data)
{
while (SciaRegs.SCICTL2.bit.TXRDY != 1);//等待发送准备好

SciaRegs.SCITXBUF.all = Data; //发送数据
}


#pragma CODE_SECTION(RxaInt_Isr, "ramfuncs");
interrupt void RxaInt_Isr(void) //SCI-A
{


}

  • 您好,
    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 麻烦帮忙看看这个问题

  • 您好,

         SECTION定义是在对应的.cmd文件中,请查看是否定义并包含。

  • /*
    //###########################################################################
    // FILE:    flash_programming_cpu1_FLASH.cmd
    // TITLE:   Linker Command File For all F28X7x devices
    //###########################################################################
    //
    // 
    // $Copyright:
    // Copyright (C) 2014-2024 Texas Instruments Incorporated - http://www.ti.com/
    //
    // Redistribution and use in source and binary forms, with or without 
    // modification, are permitted provided that the following conditions 
    // are met:
    // 
    //   Redistributions of source code must retain the above copyright 
    //   notice, this list of conditions and the following disclaimer.
    // 
    //   Redistributions in binary form must reproduce the above copyright
    //   notice, this list of conditions and the following disclaimer in the 
    //   documentation and/or other materials provided with the   
    //   distribution.
    // 
    //   Neither the name of Texas Instruments Incorporated nor the names of
    //   its contributors may be used to endorse or promote products derived
    //   from this software without specific prior written permission.
    // 
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //###########################################################################
    */
    
    /* ======================================================
    // For Code Composer Studio V2.2 and later
    // ---------------------------------------
    // In addition to this memory linker command file,
    // add the header linker command file directly to the project.
    // The header linker command file is required to link the
    // peripheral structures to the proper locations within
    // the memory map.
    // The header linker files are found in <base>\headers\cmd
    // For BIOS applications add:      F28X7x_Headers_BIOS.cmd
    // For nonBIOS applications add:   F28X7x_Headers_nonBIOS.cmd
    ========================================================= */
    
    /* Define the memory block start/length for the F28X7x
       PAGE 0 will be used to organize program sections
       PAGE 1 will be used to organize data sections
    
       Notes:
             Memory blocks on F28M3Xx are uniform (ie same
             physical memory) in both PAGE 0 and PAGE 1.
             That is the same memory region should not be
             defined for both PAGE 0 and PAGE 1.
             Doing so will result in corruption of program
             and/or data.
    
             Contiguous SARAM memory blocks or flash sectors can be
             be combined if required to create a larger memory block.
    */
    
    MEMORY
    {
    PAGE 0:    /* Program Memory */
              /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */
              /* BEGIN is used for the "boot to Flash" bootloader mode   */
    
       BEGIN           	: origin = 0x080000, length = 0x000002
       RAMM0           	: origin = 0x000122, length = 0x0002DE
       RAMD0           	: origin = 0x00B000, length = 0x000800
       RAMLS03          : origin = 0x008000, length = 0x002000
    /*	RAMLS1           : origin = 0x008800, length = 0x000800
        RAMLS2           : origin = 0x009000, length = 0x000800
        RAMLS3           : origin = 0x009800, length = 0x000800 */
       RAMLS4      		: origin = 0x00A000, length = 0x000800
       RESET           	: origin = 0x3FFFC0, length = 0x000002
      
    	/* Flash sectors */
       FLASHA           : origin = 0x080002, length = 0x001FFE	/* on-chip Flash */
       FLASHB           : origin = 0x082000, length = 0x002000	/* on-chip Flash */
       FLASHC           : origin = 0x084000, length = 0x002000	/* on-chip Flash */
       FLASHD           : origin = 0x086000, length = 0x002000	/* on-chip Flash */
       FLASHE           : origin = 0x088000, length = 0x008000	/* on-chip Flash */
       FLASHF           : origin = 0x090000, length = 0x008000	/* on-chip Flash */
       FLASHG           : origin = 0x098000, length = 0x008000	/* on-chip Flash */
       FLASHH           : origin = 0x0A0000, length = 0x008000	/* on-chip Flash */
       FLASHI           : origin = 0x0A8000, length = 0x008000	/* on-chip Flash */
       FLASHJ           : origin = 0x0B0000, length = 0x008000	/* on-chip Flash */
       FLASHK           : origin = 0x0B8000, length = 0x002000	/* on-chip Flash */
       FLASHL           : origin = 0x0BA000, length = 0x002000	/* on-chip Flash */
       FLASHM           : origin = 0x0BC000, length = 0x002000	/* on-chip Flash */
       FLASHN           : origin = 0x0BE000, length = 0x001FF0	/* on-chip Flash */
       
    
    /*
    /*	FLASHO          : origin = 0x0C0000, length = 0x002000  /* Sector 14 (8KB)       */
    /*	FLASHP          : origin = 0x0C2000, length = 0x002000  /* Sector 15 (8KB)       */
    /*	FLASHQ          : origin = 0x0C4000, length = 0x002000  /* Sector 16 (8KB)       */
    /*	FLASHR          : origin = 0x0C6000, length = 0x002000  /* Sector 17 (8KB)       */
    /*	FLASHS   		: origin = 0x0C8000, length = 0x008000  /* Sector 18 (32KB)      */
    /*	FLASHT   		: origin = 0x0D0000, length = 0x008000  /* Sector 19 (32KB)      */
    /*	FLASHU  		: origin = 0x0D8000, length = 0x008000  /* Sector 20 (32KB)      */
    /*	FLASHV   		: origin = 0x0E0000, length = 0x008000  /* Sector 21 (32KB)      */
    /*	FLASHW   		: origin = 0x0E8000, length = 0x008000  /* Sector 22 (32KB)      */
    /*	FLASHX   		: origin = 0x0F0000, length = 0x008000  /* Sector 23 (32KB)      */
    /*	FLASHY   		: origin = 0x0F8000, length = 0x002000  /* Sector 24 (8KB)       */
    /*	FLASHZ   		: origin = 0x0FA000, length = 0x002000  /* Sector 25 (8KB)       */
    /*	FLASHAA  		: origin = 0x0FC000, length = 0x002000   /* Sector 26 (8KB)       */
    /*	FLASHAB  		: origin = 0x0FE000, length = 0x002000  /* Sector 27 (8KB)       */
    
    
    
    //   FLASHN_RSVD     : origin = 0x0BFFF0, length = 0x000010    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    PAGE 1 :   /* Data Memory */
             /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */
    
       BOOT_RSVD       : origin = 0x000002, length = 0x000121     /* Part of M0, BOOT rom will use this for stack */
       RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
    //   RAMM1_RSVD      : origin = 0x0007F8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
        RAMD1           : origin = 0x00B800, length = 0x000800
    
        RAMLS5      : origin = 0x00A800, length = 0x000800
    
    	RAMGS0          : origin = 0x00C000, length = 0x001000
    	RAMGS1          : origin = 0x00D000, length = 0x001000
    	RAMGS2          : origin = 0x00E000, length = 0x001000
    	RAMGS3          : origin = 0x00F000, length = 0x001000
    	RAMGS4          : origin = 0x010000, length = 0x001000
    	RAMGS5          : origin = 0x011000, length = 0x001000
    	RAMGS6          : origin = 0x012000, length = 0x001000
    	RAMGS7          : origin = 0x013000, length = 0x001000
    
    
    	RAMGS8          : origin = 0x014000, length = 0x001000  /* 4KB */
    	RAMGS9          : origin = 0x015000, length = 0x001000  /* 4KB */
    	RAMGS10         : origin = 0x016000, length = 0x001000  /* 4KB */
    	RAMGS11         : origin = 0x017000, length = 0x001000  /* 4KB */
    	RAMGS12         : origin = 0x018000, length = 0x001000  /* 4KB */
    	RAMGS13         : origin = 0x019000, length = 0x001000  /* 4KB */
    	RAMGS14         : origin = 0x01A000, length = 0x001000  /* 4KB */
    	RAMGS15         : origin = 0x01B000, length = 0x001000  /* 4KB */
    }
    
    
    SECTIONS
    {
    
       /* Allocate program areas: */
       .cinit              : > FLASHD      PAGE = 0
       .pinit              : > FLASHD,     PAGE = 0
       .text               : >> FLASHD | FLASHE      PAGE = 0
       codestart           : > BEGIN	PAGE = 0
    
    #ifdef __TI_COMPILER_VERSION__
        #if __TI_COMPILER_VERSION__ >= 15009000
            GROUP
            {
                .TI.ramfunc
                { -l F021_API_F2837xS_FPU32.lib}
             
            } LOAD = FLASHD,
              RUN  = RAMLS03, 
              LOAD_START(_RamfuncsLoadStart),
              LOAD_SIZE(_RamfuncsLoadSize),
              LOAD_END(_RamfuncsLoadEnd),
              RUN_START(_RamfuncsRunStart),
              RUN_SIZE(_RamfuncsRunSize),
              RUN_END(_RamfuncsRunEnd),
              PAGE = 0    
        #else
            GROUP
            {
                ramfuncs
                { -l F021_API_F2837xS_FPU32.lib}
             
            } LOAD = FLASHD,
              RUN  = RAMLS03, 
              LOAD_START(_RamfuncsLoadStart),
              LOAD_SIZE(_RamfuncsLoadSize),
              LOAD_END(_RamfuncsLoadEnd),
              RUN_START(_RamfuncsRunStart),
              RUN_SIZE(_RamfuncsRunSize),
              RUN_END(_RamfuncsRunEnd),
              PAGE = 0    
        #endif
    #endif
    
    
    
       /* Allocate uninitalized data sections: */
       .stack              : > RAMM1       PAGE = 1
       .ebss               : >> RAMLS5 | RAMGS0 | RAMGS1       PAGE = 1
       .esysmem            : > RAMLS5       PAGE = 1
    
       /* Initalized sections go in Flash */
       .econst             : >> FLASHF | FLASHG       PAGE = 0
       .switch             : > FLASHD      PAGE = 0
    
       .reset              : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */
    
       Filter_RegsFile     : > RAMGS0,	   PAGE = 1
    
       SHARERAMGS0		: > RAMGS0,		PAGE = 1
       SHARERAMGS1		: > RAMGS1,		PAGE = 1
    
       /* Flash Programming Buffer */
       BufferDataSection : > RAMD1, PAGE = 1, ALIGN(8)  
       
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    
    
    
    
    

  • cmd文件里面已经定义了,但是我不懂为啥要加这么一个判断,这个15009000这个值怎么来的?#ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000

  • 您好,

        __TI_COMPILER_VERSION__ 这个宏定义的是C编译器的版本号
        www.ti.com/.../spnu151w.pdf 文档36页