This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28375S:在代码中附加库时出现问题。

Guru**** 2380400 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1345104/tms320f28375s-problem-in-attaching-library-in-code

器件型号:TMS320F28375S
主题中讨论的其他器件:C2000WARE

团队、您好!

我必须在闪存中的代码中读取、写入数据。 为此、我想在代码中使用 FLASH_API F021库。
我已连接库、但它显示错误。

我已按照以下方式连接库

>首先,我在我的项目中创建了一个新文件夹,并复制其中的库文件。

然后我将文件路径包含在"Build settings"->"C2000 compiler"->"Include options"中

>然后我还在 C2000链接器中包含库路径->文件搜索路径  

如果我在附加库或其他任何内容时有任何错误、请更正我。

当我包含文件"#include "显示错误。

请帮我解决这个问题。

谢谢。此 

致、 穆扎米尔·克雷希
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Muzammil:

    您是否检查了 C2000Ware 中提供的闪存编程示例工程的构建设置和包含的文件 ,网址为 C2000Ware_5_01_00_00\device_support\f2837xs+ examples\cpu1\flash_programming\cpu01?

    谢谢。此致、
    瓦姆西  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Vamsi、

    我之前查看了示例项目、但无法了解编译设置以及苍蝇是如何被包含的。 那么、我启动了该线程。 您能否更详细地说明 Include 闪存库是如何包括的以及库和文件是如何包括在内的?

    谢谢。此

    致、 穆扎米尔·克雷希
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Muzammil:

    在将项目编译设置的屏幕截图与闪存编程示例的编译设置进行比较时、需要注意一些差异。  

    • 在 C2000编译器的"Include Options"视图中、您应该包含闪存 API 文件路径:  C2000 Ware_Install_Location \libraries\flash_api\f2837xs\include
    • 在 C2000链接器的"File Search Path"视图中、您应该将  C2000 Ware_Install_Location \libraries\flash_api\f2837xs+库文件路径
    • 您无需在"器件"文件夹中创建闪存 API 文件夹  
    • 注意:您在闪存编程示例的文件位置中看到的"../"表示将它移动到该相对位置的"UP"或父目录。 例如:Path_A/Path_B/Path_C/../../...最终的路径为 Path_A/。 希望这可以消除对于闪存编程示例包括路径/库的方式的任何混淆。

    此致、

    斯凯勒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Skyler:

    我按照您在我的项目中所提到的那样进行了更改、但在我包含  库。

    错误的快照如下所示

    您能帮助我解决此错误吗?

    注意:大家在闪存编程示例的文件页中看到的"../"表示将该相对位置的"up"或父目录移动。 例如:Path_A/Path_B/Path_C/../../...最终的路径为 Path_A/。 希望这可以消除有关闪存编程示例包括路径/库的方式的任何混淆。

    这是否也是在我的项目中做到这一点的必要条件?

    谢谢。此

    致、 穆扎米尔·克雷希
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Muzammil:

    出现错误的 Types.h 文件中的67-73行是什么样子的? 我怀疑您的项目与示例中定义的内容可能不匹配。  您的项目中是否定义了__TMS320C28XX__?

    是否此人也在我的项目中执行此操作?

    否、只要您的文件路径在同一目标位置、就不需要包含../、除非您需要"向上"浏览某个级别。

    此致!

    斯凯勒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Skyler:

    在 Types.h 文件中发生错误的第67-73行是什么样子的?

    是否 __TMS320C28XX__在您的项目中定义?

    您是说在预定义的符号中、工程设置中的选项是什么吗?

    这些是我的项目中的预定义符号。

    我尚未定义 __ TMS320C28XX__  、但如果我使用预定义符号来定义它、则会出现更多错误。

    请帮我解决这个问题。

    谢谢。此致、

    穆扎米尔·克雷希

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Muzammil:

    它看起来像是最初标记为错误的 attribute _packed、因此我不确定为什么它会显示为无效。 不要在预定义的符号中定义__TMS320C28XX__、我只是验证了它是否已定义、以便在 types.h 中定义 attribute_packed 宏。 您正在使用什么编译器?

    此致、

    斯凯勒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Skyler:

    我使用的是 C2000编译器。

    编译器版本:TI v22.6.0.LTS。

    谢谢。此

    致、 穆扎米尔·克雷希
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Muzammil:

    您能否发送有关您的项目结构和所包含文件的更新图像? 我无法在我这边重现此错误。  

    我将这些闪存 API 路径包含在我的项目中、并且能够使用 #include 进行编译 相同的符号链接。

    此致、

    斯凯勒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Skyler:

    您能否发送项目结构和包含文件的更新图像?

    链接器->。

    现在请您自行回复吗?

    谢谢。此

    致、 穆扎米尔·克雷希
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Skyler:

    我为闪存操作制作了单独的 hal_flash.c 和 hal_flash.h 文件。 我在 hal_flash.c 中创建了包含 Fapi 库函数的函数、并在 hal_flash.h 文件中声明了这些函数。

    我还在 hal_flash.h 文件中包含"F021_F2837xS.h"文件。

    直到该函数编译成功、但当我尝试在主文件中调用该函数时、会出现错误。

    请注意、我还在  主文件中添加了"hal_flash.h"和"F021_F2837xS.h"。

    谢谢。

    穆扎米尔·克雷希

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Muzammil:

    您是否可以尝试将 F021_API_F2837xS_FPU32.lib 文件添加到您的工程目录中? 右键点击工程、选择"Add Files"、导航到  C2000 Ware_Install_Location \libraries\flash_api\f2837xs+、然后选择 F021_API_F2837xS_FPU32.lib。

    此致、

    斯凯勒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Skyler:  

    我曾尝试如上所述添加库文件、但结果仍然相同。 仍然得到我上面提到的错误。

    错误可能出现在链接器.cmd 文件中吗?

    // The user must define CLA_C in the project linker settings if using the
    // CLA C compiler
    // Project Properties -> C2000 Linker -> Advanced Options -> Command File
    // Preprocessing -> --define
    #ifdef CLA_C
    // Define a size for the CLA scratchpad area that will be used
    // by the CLA compiler for local symbols and temps
    // Also force references to the special symbols that mark the
    // scratchpad are.
    CLA_SCRATCHPAD_SIZE = 0x100;
    --undef_sym=__cla_scratchpad_end
    --undef_sym=__cla_scratchpad_start
    #endif //CLA_C
    
    MEMORY
    {
    PAGE 0 :
       /* BEGIN is used for the "boot to SARAM" bootloader mode   */
    
       BEGIN           	: origin = 0x000000,   length = 0x000002
       RAMM0           	: origin = 0x000123,   length = 0x0002DD
       RAMD0           	: origin = 0x00B000,   length = 0x000800
       RAMD1            : origin = 0x00B800,   length = 0x000800
       /* RAMLS4      	    : origin = 0x00A000, length = 0x000800 */
       /* RAMLS5           : origin = 0x00A800, length = 0x000800 */
       RAMLS2      		: origin = 0x009000,   length = 0x000800
       RAMLS3      		: origin = 0x009800,   length = 0x000800
       RAMLS4_5         : origin = 0x00A000,   length = 0x001000
       RAMGS3           : origin = 0x00F000,   length = 0x001000
       RAMGS5           : origin = 0x011000,   length = 0x001000
       RAMGS10          : origin = 0x016000,   length = 0x001000
       RESET           	: origin = 0x3FFFC0,   length = 0x000002
    
       FLASH_USED        : origin = 0x080000, length = 0x01FFF
    
    PAGE 1 :
    
       BOOT_RSVD       : origin = 0x000002, length = 0x000121     /* Part of M0, BOOT rom will use this for stack */
       RAMM1           : origin = 0x000400, length = 0x0003F8     /* 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" */
       RAMLS0          	: origin = 0x008000,   length = 0x000800
       RAMLS1          	: origin = 0x008800,   length = 0x000800
       //RAMLS2      		: origin = 0x009000,   length = 0x000800
       //RAMLS3      		: origin = 0x009800,   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
       RAMGS9           : origin = 0x015000,   length = 0x001000
    //   RAMGS10          : origin = 0x016000,   length = 0x001000
    
    //   RAMGS11     : origin = 0x017000, length = 0x000FF8   /* Uncomment for F28374D, F28376D devices */
    
    //   RAMGS11_RSVD : origin = 0x017FF8, length = 0x000008    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       RAMGS11          : origin = 0x017000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RAMGS12          : origin = 0x018000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RAMGS13          : origin = 0x019000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RAMGS14          : origin = 0x01A000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RAMGS15          : origin = 0x01B000, length = 0x000FF8     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    
    //   RAMGS15_RSVD : origin = 0x01BFF8, length = 0x000008    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
                                                                /* Only on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    
       EMIF1_CS0n       : origin = 0x80000000, length = 0x10000000
       EMIF1_CS2n       : origin = 0x00100000, length = 0x00200000
       EMIF1_CS3n       : origin = 0x00300000, length = 0x00080000
       EMIF1_CS4n       : origin = 0x00380000, length = 0x00060000
       EMIF2_CS0n       : origin = 0x90000000, length = 0x10000000
       EMIF2_CS2n       : origin = 0x00002000, length = 0x00001000
    
       CANA_MSG_RAM     : origin = 0x049000,   length = 0x000800
       CANB_MSG_RAM     : origin = 0x04B000,   length = 0x000800
    
       CLA1_MSGRAMLOW   : origin = 0x001480,   length = 0x000080
       CLA1_MSGRAMHIGH  : origin = 0x001500,   length = 0x000080
    }
    
    SECTIONS
    {
       codestart        : > BEGIN,      PAGE = 0
       .text            : >> RAMD0 | RAMD1 | RAMGS5 | RAMLS2 | RAMLS3 | RAMLS4_5 | RAMGS3 | RAMGS10,    PAGE = 0
       .cinit           : > RAMM0,      PAGE = 0
       .switch          : > RAMM0,      PAGE = 0
       .reset           : > RESET,      PAGE = 0, TYPE = DSECT /* not used, */
       .stack           : > RAMM1,      PAGE = 1
       /* IMPORTANT: The FreeRTOS statically allocated stack should be allocated to this section only */
       .freertosStaticStack  : >> RAMGS0 | RAMGS1 | RAMGS2,        PAGE = 1
       /* IMPORTANT: The FreeRTOS heap should be allocated to this section only as the C28x stack
          memory can be allocated in the lower 64k RAM memory only. */
       .freertosHeap         : >> RAMGS9,            PAGE = 1
    
    #if defined(__TI_EABI__)
       .bss             : > RAMGS6,    PAGE = 1
       .bss:output      : > RAMGS6,    PAGE = 1
       .init_array      : > RAMM0,     PAGE = 0
       .const           : > RAMGS7,    PAGE = 1
       .data            : > RAMGS7,    PAGE = 1
       .sysmem          : > RAMGS7,    PAGE = 1
    #else
       .pinit           : > RAMM0,     PAGE = 0
       .ebss            : > RAMGS6,    PAGE = 1
       .econst          : > RAMGS7,    PAGE = 1
       .esysmem         : > RAMGS7,    PAGE = 1
    #endif
       Filter_RegsFile  : > RAMGS8,	    PAGE = 1
    
       .em1_cs0         : > EMIF1_CS0n, PAGE = 1
       .em1_cs2         : > EMIF1_CS2n, PAGE = 1
       .em1_cs3         : > EMIF1_CS3n, PAGE = 1
       .em1_cs4         : > EMIF1_CS4n, PAGE = 1
       .em2_cs0         : > EMIF2_CS0n, PAGE = 1
       .em2_cs2         : > EMIF2_CS2n, PAGE = 1
    
        /* CLA specific sections */
       Cla1Prog         : > RAMLS1, PAGE=1
    
       CLADataLS0		: > RAMLS0, PAGE=1
       CLADataLS1		: > RAMLS0, PAGE=1
    
       Cla1ToCpuMsgRAM  : > CLA1_MSGRAMLOW,   PAGE = 1
       CpuToCla1MsgRAM  : > CLA1_MSGRAMHIGH | RAMGS4,  PAGE = 1
    
       /* The following section definition are for SDFM examples */
       Filter1_RegsFile : > RAMGS12,	PAGE = 1, fill=0x1111
       Filter2_RegsFile : > RAMGS13,	PAGE = 1, fill=0x2222
       Filter3_RegsFile : > RAMGS14,	PAGE = 1, fill=0x3333
       Filter4_RegsFile : > RAMGS4,	PAGE = 1, fill=0x4444
    
    #ifdef __TI_COMPILER_VERSION__
       #if __TI_COMPILER_VERSION__ >= 15009000
        .TI.ramfunc : {} > RAMM0,      PAGE = 0
       #else
        ramfuncs    : > RAMM0      PAGE = 0   
       #endif
    #endif
    
    #ifdef CLA_C
       /* CLA C compiler sections */
       //
       // Must be allocated to memory the CLA has write access to
       //
       CLAscratch       :
                         { *.obj(CLAscratch)
                         . += CLA_SCRATCHPAD_SIZE;
                         *.obj(CLAscratch_end) } >  RAMLS0,  PAGE = 1
    
       .scratchpad      : > RAMLS0,       PAGE = 1
       .bss_cla		    : > RAMLS0,       PAGE = 1
       .const_cla	    : > RAMLS0,       PAGE = 1
    #endif //CLA_C
    
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    这是我的链接器文件。

    如果我在上面的文件中添加以下代码(在底部、在#endif 后面)、则错误已解决、但我无法写入或读取闪存。


    {
    .TI.ramfunc
    {-l F021_API_F2837xS_FPU32_EABI.lib}

    } LOAD = FLASH_USED、
    RUN = RAMGS11、
    Load_start (RamfuncsLoadStart)、
    Load_Size (RamfuncsLoadSize)、
    Load_End (RamfuncsLoadEnd)、
    RUN_START (RamfuncsRunStart)、
    RUN_SIZE (RamfuncsRunSize)、
    RUN_END (RamfuncsRunEnd)、
    对齐(8)

    请进一步指导我。

    谢谢。此

     

    致、 穆扎米尔·克雷希
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Muzammil:

    现在您的代码能够在编辑链接器文件后进行编译、那么在尝试写入闪存时您会看到什么行为? 您是否遵循 F2837xS 的 FLASH_programming 示例中显示的闪存初始化?

    此致、

    斯凯勒