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.

[参考译文] TMS320F280048C-Q1:从 RAM 而不是闪存运行完整的应用代码

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1044899/tms320f280048c-q1-running-the-full-application-code-from-ram-instead-of-flash

器件型号:TMS320F280048C-Q1
主题中讨论的其他器件:C2000WARE

您好!

  这是支持案例">e2e.ti.com/.../3851239的延续。 根据案例的结束、我们能够刷写器件。 不过、需要进一步注意的是、RAM 和闪存执行时间不同(GPIO 切换指示的总活动时间)。 闪存需要更多时间、循环出错。 如何在加电后将整个代码从闪存复制到 RAM 并从 RAM 开始执行以避免任何时序不确定性。 如果需要、我将包含 RAM 链接器文件内容。 默认 RAM 链接器文件修改如下。


存储器

第0页:


开始:origin = 0x000000,length = 0x000002

//RAMM0:origin = 0x0000F5、length = 0x00030B   // Default
RAMM0:origin = 0x0000F5,length = 0x00060B    // Modified

RAMLS:origin = 0x008000、length = 0x003000      //已添加

//RAMLS0:origin = 0x008000、length = 0x000800   //已删除
//RAMLS1:origin = 0x008800,length = 0x000800    //已删除
//RAMLS2:origin = 0x009000,length = 0x000800    //已删除
//RAMLS3:origin = 0x009800,length = 0x000800    //已删除
//RAMLS4:origin = 0x00A000,length = 0x000800    //已删除

复位:origin = 0x3FFFC0,length = 0x000002

第1页:

BOOT_RSVD:origin = 0x000002,length = 0x0000F3  

//RAMM1:origin = 0x000400,length = 0x000400     // 默认值
RAMM1:origin = 0x000700、length = 0x000200      //已修改

//RAMLS5:origin = 0x00A800,length = 0x000800     // 默认值
//RAMLS6:origin = 0x00B000,length = 0x000800     // 默认值

RAMLS5:origin = 0x00A800,length = 0x000B00      // Modified
RAMLS6:origin = 0x00B300,length = 0x000500      // Modified
RAMLS7:origin = 0x00B800,length = 0x000800

RAMGS0:origin = 0x00C000、length = 0x002000
RAMGS1:origin = 0x00E000、length = 0x002000
RAMGS2:origin = 0x010000、length = 0x002000
RAMGS3:origin = 0x012000,length = 0x002000


部分

codestart:> begin,page = 0
.TI.ramfunc:>RAMM0 page = 0
.text :>>RAMM0| RAMLS,PAGE = 0                //已修改
//.text:>>RAMM0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4,PAGE = 0   // 默认
.cinit:> RAMM0,page = 0
.pinit:> RAMM0,page = 0
switch:>RAMM0,page = 0
.reset:> reset,page = 0,type = DSECT //未使用,*/

.stack:>RAMM1,PAGE = 1.
.ebss:> RAMLS5,PAGE = 1.
econst:> RAMLS5,page = 1.
.esysmem:> RAMLS5,page = 1.

RAMS0:>RAMGS0,PAGE = 1
ramgs1:>RAMGS1,page = 1.

谢谢、此致

  Karthik R

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

    您好、Karthik。

    您将需要使用闪存链接器命令文件。 您将在链接器命令文件中看到以下行、用于从闪存将代码加载到 RAM。

    #if defined (_TI_EABI)
    .TI.ramfunc:load = flash_BANK0_SEC1,
    运行= RAMLS0、
    Load_start (RamfuncsLoadStart)、
    load_size (RamfuncsLoadSize)、
    Load_End (RamfuncsLoadEnd)、
    RUN_START (RamfuncsRunStart)、
    run_size (RamfuncsRunSize)、
    RUN_END (RamfuncsRunEnd)、
    PAGE = 0、ALIGN (4)
    其他
    .TI.ramfunc:load = flash_BANK0_SEC1,
    运行= RAMLS0、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (4)
    #endif

    然后、特定函数或 所有函数都可以放置在 RAM 中。 请参阅以下编译器优化指南、并在文档中查找"ramfunc"以了解这两个选项。

    https://www.ti.com/lit/spru514

    谢谢、

    Ashwini

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

    您好、Aswini、

     感谢您的回复、很抱歉因为假期而迟到了回复。 我简要介绍了编译器用户指南。 请查看以下疑问。

    1) 1)在上述邮件中、#if 和#else 条件下的说明是相同的 ryt。 那么为什么引入#if /#else 条件呢?

    2) 2)我已在编译器标志中添加了-ramfunc=on、并尝试编译、但它返回"代码不能放入存储器...该段包含一个需要无法为此段生成的 trampoline 的调用站点..." 指向".TI.ramfunc:load = flash_BANK0_SEC1、
    运行= RAMLS0、……

     我曾询问过从 RAM 操作调试时的类似错误(https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/979405/launchxl-f280049c-memory-linking-error)。 它没有完全结束,但提出了一种变通办法,我在下文中适用。

    3) 3)所以我已经按照如下方式修改了闪存链接器文件

    存储器

    第0页:


    开始:origin = 0x000000,length = 0x000002

    RAMM0:origin = 0x0000F5、length = 0x00030B

    RAMLS:origin = 0x008000、length = 0x003000  

    其他
    .TI.ramfunc:load = flash_BANK0_SEC1,
    运行= RAMLS、
    load_start (_RamfuncsLoadStart)、

    现在、它的抛掷错误提到的代码不能放入"FLASH_BANK0_SEC1"中

     请建议如何继续。

    谢谢、此致

      Karthik R

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

    您好、Karthik、

    [引用 userid="79969" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1044899/tms320f280048c-q1-running-the-full-application-code-from-ram-instead-of-flash/3870952 #3870952"]在上面的邮件中,#if 和#else 条件下的指令是相同的 ryt。 那么为什么引入#if /#else 条件?[/quot]

    EABI 和 COFF 格式的符号名称稍有不同。 if 会关联 EABI 使用的符号、而#else 会关联 COFF 使用的以下划线开头的符号名称。

    [引用 userid="79969" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1044899/tms320f280048c-q1-running-the-full-application-code-from-ram-instead-of-flash/3870952 #3870952"]现在,它的抛出错误提到的代码不能放入"flash_BANK0_SEC1"

    在错误中、输出将指示不适合的代码大小。 这可能大于 FLASH_BANK0_SEC1大小、因此会产生错误。 您将需要分配更多闪存。

    此外、还有一些建议:

    请确保代码是使用优化-O2的编译器、至少是为了获得良好的性能。

    2.在系统设计方面,进行分析并检查哪些代码片段对时序至关重要,并有选择地将这些代码加载到 RAM 而不是整个 应用程序中,将会有所帮助。 随着应用的发展、它可能并不完全适合100KB 的 RAM 与256KB 的闪存。

    谢谢、

    Ashwini  

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

     感谢您的回答。 请参阅上一封邮件中提到的测试用例报告的错误消息。

     1) 1)根据编译器用户指南中的给定、我添加了"--ramfunc=on"标志、以将 编译器标志集中的所有函数复制到 ramfunc。

        但在编译默认闪存链接器文件时抛出错误。
     

    "./28004x_general_flash_lnk.cmd"、第116行:错误#10099-D:程序不能放入可用存储器、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 ".TI.ramfunc"大小为0x1a1epage 0的运行定位/阻断失败。 可用存储器范围:
    RAMLS0大小:0x800未使用:0x800最大孔:0x800  
    "./28004x_general_flash_lnk.cmd"、第116行:错误#10099-D:程序不能放入可用存储器、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 ".TI.ramfunc"大小为0x1a1epage 0的加载定位/阻断失败。 可用存储器范围:
    FLASH_BANK0_SEC1大小:0x1000未使用:0x1000最大孔:0x1000
     
     我们之前在从 RAM 进行调试时观察到类似的错误。 我们修改了 RAM 链接器文件管理器、然后从 RAM 进行调试成功。 因此、我们在闪存链接器文件中进行了如下类似修改。
     
    2)所以在闪存链接器文件中、我已经更改为这个
     
    存储器

    第0页:
    /* begin 用于"引导至闪存"引导加载程序模式*/

    开始:origin = 0x080000,length = 0x000002
    RAMM0:origin = 0x0000F3,length = 0x00030D

    RAMLS:origin = 0x008000、length = 0x003000

    复位:origin = 0x3FFFC0,length = 0x000002

    /*闪存扇区*/
    /*组0 */
    FLASH_BANK0_SEC0:origin = 0x080002、length = 0x000FFE //片上闪存*
     
    #if defined (_TI_EABI)
    init_array:> flash_BANK0_SEC1,page = 0,align (4)
    .bss:> RAMLS5,page = 1.
    .bss:输出:> RAMLS6,页= 1
    .bss:CIO:> RAMLS,PAGE = 0
    .data :> RAMLS5,page = 1.

    其他
    .pinit:> FLASH_BANK0_SEC1,PAGE = 0,ALIGN (4)
    .ebss:> RAMLS5,PAGE = 1.
    .esysmem:> RAMLS5,page = 1.
    .cio:> RAMLS,PAGE = 0
    .econst:> FLASH_BANK0_SEC4、PAGE = 0、ALIGN (4)

    (笑声)
     
    #if defined (_TI_EABI)  
    .TI.ramfunc:load = flash_BANK0_SEC1,
    运行= RAMLS、

    其他  
    .TI.ramfunc:load = flash_BANK0_SEC1,
    运行= RAMLS、

    #endif

     
    现在、它再次抛出以下错误
     

    "./28004x_general_flash_lnk.cmd"、第113行:错误#10099-D:程序不能放入可用存储器、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 ".TI.ramfunc"大小为0x1a1epage 0的加载定位/阻断失败。 可用存储器范围:
    FLASH_BANK0_SEC1大小:0x1000未使用:0xAD7最大孔:0xAD4  
    错误#10010:链接期间遇到错误;未构建"led_ex1_blinky.out"
     
    3) 3)根据您在前一封邮件中提出的增加闪存的建议、对闪存链接器文件进行了以下修改。
     
     
    存储器

    第0页:
    /* begin 用于"引导至闪存"引导加载程序模式*/

    开始:origin = 0x080000,length = 0x000002
    RAMM0:origin = 0x0000F3,length = 0x00030D

    RAMLS:origin = 0x008000、length = 0x003000

    复位:origin = 0x3FFFC0,length = 0x000002

    /*闪存扇区*/
    /*组0 */
    FLASH_BANK0_SEC0:origin = 0x080002、length = 0x000FFE //片上闪存*
    FLASH_BANK0_SEC1:origin = 0x081000、length = 0x002000 //片上闪存*
    //flash_BANK0_sec2:origin = 0x082000,length = 0x001000 //片上闪存*
    FLASH_BANK0_SEC3:origin = 0x083000、length = 0x001000 //片上闪存*


    /*银行1 */
    FLASH_BANK1_SEC0:origin = 0x090000、length = 0x001000 //片上闪存*
    .
    FLASH_BANK1_SEC15:origin = 0x09F000、length = 0x000FF0 //片上闪存*

    // flash_Bank1_SEC15_RSVD:origin = 0x09FFF0,length = 0x000010 //保留并不用于根据勘误咨询“Memory:pretching Beyond valid Memory”(内存:超出有效内存的预取)*/的代码

    第1页:

    BOOT_RSVD:origin = 0x000002,length = 0x0000F1 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM1:origin = 0x000400,length = 0x0003F8 //片上 RAM 块 M1 */
    // RAMM1_RSVD:origin = 0x0007F8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:超出有效内存的预取),保留并不用于代码*/

    RAMLS5:origin = 0x00A800,length = 0x000800
    RAMLS6:origin = 0x00B000、length = 0x000800
    RAMLS7:origin = 0x00B800,length = 0x000800

    RAMGS0:origin = 0x00C000、length = 0x002000
    RAMGS1:origin = 0x00E000、length = 0x002000
    RAMGS2:origin = 0x010000、length = 0x002000
    RAMGS3:origin = 0x012000,length = 0x001FF8
    // RAMGS3_RSVD:origin = 0x013FF8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:有效内存之外的预取)来保留代码且不用于代码*/



    部分

    codestart:> begin,page = 0,align (4)
    .text:>> flash_BANK0_SEC3 | flash_BANK0_SEC5,page = 0,align (4)
    //.text:>> FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC5、PAGE = 0、ALIGN (4)
    .cinit:> FLASH_BANK0_SEC1,PAGE = 0,ALIGN (4)
    .switch:> FLASH_BANK0_SEC1,PAGE = 0,ALIGN (4)
    .reset:> reset,page = 0,type = DSECT //未使用,*/

    .stack:>RAMM1,PAGE = 1.

    #if defined (_TI_EABI)
    init_array:> flash_BANK0_SEC1,page = 0,align (4)
    .bss:> RAMLS5,page = 1.
    .bss:输出:> RAMLS6,页= 1
    .bss:CIO:> RAMLS,PAGE = 0
    .data :> RAMLS5,page = 1.
    .sysmem:> RAMLS5,page = 1.
    /*初始化段进入闪存*/
    .const:> FLASH_BANK0_SEC4、PAGE = 0、ALIGN (4)
    其他
    .pinit:> FLASH_BANK0_SEC1,PAGE = 0,ALIGN (4)
    .ebss:> RAMLS5,PAGE = 1.
    .esysmem:> RAMLS5,page = 1.
    .cio:> RAMLS,PAGE = 0
    .econst:> FLASH_BANK0_SEC4、PAGE = 0、ALIGN (4)
    #endif

    RAMS0:>RAMGS0,PAGE = 1
    ramgs1:>RAMGS1,page = 1.


    #if defined (_TI_EABI)
    .TI.ramfunc:load = flash_BANK0_SEC1,
    运行= RAMLS、

    其他
    .TI.ramfunc:load = flash_BANK0_SEC1,
    运行= RAMLS、

    #endif


     现在在构建或刷写过程中没有错误、但现在代码无法正常工作。 没有 GPIO 输出切换。 (在进行此修改之前、我们能够以两倍的频率切换 GPIO。 GPIO 指定应用程序代码的活动时间。 在从 RAM 模式进行调试时需要 x 次、在刷写默认链接器文件后需要2次)。  
     
    4) 4) 在系统设计方面、进行分析并检查哪些代码片段对时序至关重要、并选择性地将这些代码加载到 RAM 中、而不是整个 应用程序中、这将非常有用。  
    是的、我理解、但我们的应用程序和工作场所遵循的程序仅要求从 RAM 执行。
     
     请建议如何继续。

    谢谢、此致、

        Karthik R

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

    您好、Karthik、

    如果设置断点、GPIO 初始化位置 和 GPIO 切换位置、这些断点将被执行? 加载应用程序并进入 main 后、您可以设置断点和单步执行代码、以确保正确地从 RAM 复制和执行函数。

    谢谢、

    Ashwini

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

    您好、Aswini、

     在闪存模式下、我们可以将断点置于...?? 很抱歉、我不知道这个。

      是否没有任何实例可以简单地将 entrie 闪存内容复制到 RAM n execute Form IT...?

    谢谢、此致

     Karthik R

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

    您好、Karthik、

    是的、您可以使用硬件断点来调试闪存和 RAM 中的代码。 在初始化代码中、您应该有以下行将代码复制到 RAM 中。

    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);

    运行经过该源代码行。 然后、您可以在要调试的函数处设置 HWBP、该函数具有 GPIO 切换功能。

    我认为我们没有一个将整个代码复制到 RAM 的应用程序。 但是、上述步骤应允许您调试该问题。

    谢谢、

    Ashwini

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

    您好、Aswini、

      感谢您提供有关此内容的信息。 对我来说很新。 事实上、除非条件要求、否则我不精通修改链接器和脚本的默认设置。 我很困惑我们是否需要继续进行断点插入 n all。 GPIO 设置是我在 ISR 中执行的第一条指令、这种情况不会发生、这意味着存在根本错误。

      我再次重复了整个过程。 对于这两种模式、在编译器标志选项中添加了"--ramfunc=on"标志。

      从 RAM 进行调试时、DSC 的运行方式符合预期(通过监控 GPIO)。

      刷写后、现在 GPIO 根本不会切换。 您能否看到链接器文件有什么问题? 我认为这应该给根本错误的事情注入光亮。 我已包含完整的链接器文件内容。

    _________________________________

    RAM 链接器文件内容

    _________________________________________

    存储器

    第0页:

    /* begin 用于"引导至 SARAM"引导加载程序模式*/

    开始:origin = 0x000000,length = 0x000002

    RAMM0:origin = 0x0000F5,length = 0x00060B

    RAMLS0:origin = 0x008000、length = 0x000800

    // RAMLS1:origin = 0x008800,length = 0x000800

    // RAMLS2:origin = 0x009000,length = 0x000800

    // RAMLS3:origin = 0x009800,length = 0x000800

    // RAMLS4:origin = 0x00A000,length = 0x000800

    RAMLS1234:origin = 0x008800,length = 0x002000

    复位:origin = 0x3FFFC0,length = 0x000002

    第1页:

    BOOT_RSVD:origin = 0x000002,length = 0x0000F3 // M0的一部分,引导 ROM 将此用于栈*/

    RAMM1:origin = 0x000700、length = 0x000100 //片上 RAM 块 M1 *

    RAMLS5:origin = 0x00A800,length = 0x000800

    RAMLS6:origin = 0x00B000、length = 0x000800

    RAMLS7:origin = 0x00B800,length = 0x000800

    RAMGS0:origin = 0x00C000、length = 0x002000

    RAMGS1:origin = 0x00E000、length = 0x002000

    RAMGS2:origin = 0x010000、length = 0x002000

    RAMGS3:origin = 0x012000,length = 0x002000

    部分

    codestart:> begin,page = 0

    .TI.ramfunc:> RAMLS1234 PAGE = 0

    .text:>>RAMM0 | RAMLS0 | RAMLS1234,page = 0

    //.TI.ramfunc:>RAMM0 page = 0

    //.text:>>RAMM0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4,page = 0

    .cinit:> RAMM0,page = 0

    .pinit:> RAMM0,page = 0

    switch:>RAMM0,page = 0

    .reset:> reset,page = 0,type = DSECT //未使用,*/

    .stack:>RAMM1,PAGE = 1.

    .ebss:> RAMLS5,PAGE = 1.

    econst:> RAMLS5,page = 1.

    .esysmem:> RAMLS5,page = 1.

    RAMS0:>RAMGS0,PAGE = 1

    ramgs1:>RAMGS1,page = 1.

    _________________________________

    闪存链接器文件

    _________________________________

    存储器

    第0页:

    /* begin 用于"引导至闪存"引导加载程序模式*/

    开始:origin = 0x080000,length = 0x000002

    RAMM0:origin = 0x0000F5,length = 0x00060B

    RAMLS0:origin = 0x008000、length = 0x000800

    // RAMLS1:origin = 0x008800,length = 0x000800

    // RAMLS2:origin = 0x009000,length = 0x000800

    // RAMLS3:origin = 0x009800,length = 0x000800

    // RAMLS4:origin = 0x00A000,length = 0x000800

    RAMLS1234:origin = 0x008800,length = 0x002000

    复位:origin = 0x3FFFC0,length = 0x000002

    /*闪存扇区*/

    /*组0 */

    FLASH_BANK0_SEC0:origin = 0x080002、length = 0x000FFE //片上闪存*

    FLASH_BANK0_SEC1n2:origin = 0x081000、length = 0x002000 //片上闪存*

    //flash_BANK0_SEC1:origin = 0x081000、length = 0x001000 //片上闪存*

    //flash_BANK0_sec2:origin = 0x082000,length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC3:origin = 0x083000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC4:origin = 0x084000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC5:origin = 0x085000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC6:origin = 0x086000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC7:origin = 0x087000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC8:origin = 0x088000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC9:origin = 0x089000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC10:origin = 0x08A000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC11:origin = 0x08B000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC12:origin = 0x08C000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC13:origin = 0x08D000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC14:origin = 0x08E000、length = 0x001000 //片上闪存*

    FLASH_BANK0_SEC15:origin = 0x08F000、length = 0x001000 //片上闪存*

    /*银行1 */

    FLASH_BANK1_SEC0:origin = 0x090000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC1:origin = 0x091000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC2:origin = 0x092000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC3:origin = 0x093000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC4:origin = 0x094000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC5:origin = 0x095000、length = 0x001000 //片上闪存*/

    FLASH_BANK1_SEC6:origin = 0x096000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC7:origin = 0x097000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC8:origin = 0x098000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC9:origin = 0x099000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC10:origin = 0x09A000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC11:origin = 0x09B000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC12:origin = 0x09C000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC13:origin = 0x09D000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC14:origin = 0x09E000、length = 0x001000 //片上闪存*

    FLASH_BANK1_SEC15:origin = 0x09F000、length = 0x001000 //片上闪存*

    第1页:

    BOOT_RSVD:origin = 0x000002,length = 0x0000F3 // M0的一部分,引导 ROM 将此用于栈*/

    RAMM1:origin = 0x000700、length = 0x000100 //片上 RAM 块 M1 *

    RAMLS5:origin = 0x00A800,length = 0x000800

    RAMLS6:origin = 0x00B000、length = 0x000800

    RAMLS7:origin = 0x00B800,length = 0x000800

    RAMGS0:origin = 0x00C000、length = 0x002000

    RAMGS1:origin = 0x00E000、length = 0x002000

    RAMGS2:origin = 0x010000、length = 0x002000

    RAMGS3:origin = 0x012000,length = 0x002000

    部分

    codestart:> begin,page = 0,align (4)

    .text:>> flash_BANK0_SEC1n2 | flash_BANK0_SEC3,page = 0,align (4)

    //.text:>> FLASH_BANK0_SEC1 | FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3,PAGE = 0,ALIGN (4)

    .cinit:> FLASH_BANK0_SEC1n2,PAGE = 0,ALIGN (4)

    .pinit:> FLASH_BANK0_SEC1n2,PAGE = 0,ALIGN (4)

    .switch:> FLASH_BANK0_SEC1n2,PAGE = 0,ALIGN (4)

    .reset:> reset,page = 0,type = DSECT //未使用,*/

    .stack:>RAMM1,PAGE = 1.

    .ebss:> RAMLS5,PAGE = 1.

    .esysmem:> RAMLS5,page = 1.

    .econst:> FLASH_BANK0_SEC4、PAGE = 0、ALIGN (4)

    RAMS0:>RAMGS0,PAGE = 1

    ramgs1:>RAMGS1,page = 1.

    .TI.ramfunc:{}负载= FLASH_BANK0_SEC1n2,

    运行= RAMLS1234、

    load_start (_RamfuncsLoadStart)、

    load_size (_RamfuncsLoadSize)、

    load_end (_RamfuncsLoadEnd)、

    run_start (_RamfuncsRunStart)、

    run_size (_RamfuncsRunSize)、

    run_end (_RamfuncsRunEnd)、

    PAGE = 0、ALIGN (4)

    您能不能看到这些文件有什么问题吗

    谢谢。  

       Karthik R

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

    您好、Karthik、

    我无法找到您需要的闪存链接器命令文件的任何问题(您的项目中不需要包含 RAM 链接器命令文件)。 您还可以在 device_support 中引用 C2000Ware 中的链接器命令文件-"28004x_general_flash_lnk.cmd"

    我建议您使用上述步骤进行调试、并检查所有代码是否按预期复制到 RAM、以及 ISR 是否被触发。 如果 ISR 按预期触发-则 GPIO 配置可能未按预期执行。

    谢谢、
    Ashwini