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.

[参考译文] MSPM0G3507:.text 区域的链接器文件配置

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1510913/mspm0g3507-linker-file-configuration-of-text-region

器件型号:MSPM0G3507
主题: SysConfig 中讨论的其他器件

工具/软件:

您好的团队、

我的客户正在考虑为其应用代码设置一个特定区域。

假设他们希望放置从 0x0000001 到 0x00008000 闪存区域的代码、

他们应该如何更改 device_linker.cmd 段中的代码?

 默认值:.text  :palign(8){}> flash

此致、

Kenley

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

    尊敬的 Kenley:

    很抱歉晚才回复。 让我澄清一下有关 MSPM0 的一些命令配置规则:

    1. POR 后 MSPM0 将始终从 0x0000 地址开始。 启动程序应始终位于 0x0000 地址。

    2.通常,我们会尝试使应用程序映像起始地址与 1 个闪存扇区(1024 字节)对齐。 因此、在这种情况下、起始地址 0x0000001 是不可接受的。

    3.例如、如果客户希望放置来自 0x1800 的应用代码、则 cmd 可能是:闪存区域起始地址和.intvecs 地址应设置为所需的起始地址。 另一个引导程序应放置在 0x0000 地址处、跳转到应用程序。  

    此致、

    Pengfei

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

    嗨、Pengfei、

    感谢您的支持。

    以下内容是否 也可以接受?

    'define _BOOTSIZE (0x0000_1800)
    
    MEMORY
    {
     BOOT    (RX)  : origin = 0x00000000, length = _BOOTSIZE
        FLASH           (RX)  : origin =_BOOTSIZE, length = 0x00020000 - _BOOTSIZE
        SRAM            (RWX) : origin = 0x20200000, length = 0x00008000
        BCR_CONFIG      (R)   : origin = 0x41C00000, length = 0x00000080
        BSL_CONFIG      (R)   : origin = 0x41C00100, length = 0x00000080
    }
    
    SECTIONS
    {
        .intvecs:   > _BOOTSIZE
        .text   : palign(8) {} > FLASH
        .const  : palign(8) {} > FLASH
        .cinit  : palign(8) {} > FLASH
        .pinit  : palign(8) {} > FLASH
        .rodata : palign(8) {} > FLASH
        .ARM.exidx    : palign(8) {} > FLASH
        .init_array   : palign(8) {} > FLASH
        .binit        : palign(8) {} > FLASH
        .TI.ramfunc   : load = FLASH, palign(8), run=SRAM, table(BINIT)
    
        .vtable :   > SRAM
        .args   :   > SRAM
        .data   :   > SRAM
        .bss    :   > SRAM
        .sysmem :   > SRAM
        .stack  :   > SRAM (HIGH)
    
        .BCRConfig  : {} > BCR_CONFIG
        .BSLConfig  : {} > BSL_CONFIG
    }
    

    此致、

    Kenley

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

    尊敬的 Kenley:

    当然、它看起来很好。 您已经为 MSPM0G3507 器件提供了正确的闪存大小和 SRAM 大小。

    此致、

    Pengfei

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

    嗨、Pengfei、

    客户按照您的指导修改 device_linker.cmd、但在他们构建它时、修改后的器件将返回到默认器件。

    您能否帮助我们了解客户如何在构建项目时修改文件而不返回默认值?

    此致、

    Kenley

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

    尊敬的 Kenley:

    这是因为 cmd 文件默认由 SysConfig 生成。 您可以按照以下步骤修改 cmd 文件:

    1.构建工程、并在 Debug 文件夹下生成 cmd 文件。

    2.将 cmd 文件从 Debug 文件夹移到当前工程文件夹、如下所示:

    3.打开 SysConfig 文件并禁用如下所示的 cmd 生成函数、然后客户可以修改 cmd 文件、而 SysConfig 不会再次生成该文件。

    此致、

    Pengfei

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

    嗨、Pengfei、

    客户是按照您的要求完成的、并将固件写入 MCU、但程序无法正常工作。

    但是、当将它们重置为默认值时、程序会起作用。

    您能看看他们的链接器文件吗?

    e2e.ti.com/.../device_5F00_linker.txt

    e2e.ti.com/.../spi_5F00_peripheral_5F00_echo_5F00_interrupts_5F00_LP_5F00_MSPM0G3507_5F00_nortos_5F00_ticlang.map

    提前感谢您、

    Kenley

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

    尊敬的 Kenley:

    您是指他们从 0x8000 地址开始下载此工程并直接运行程序吗?

    实际上、我们的 MSPM0 在上电后始终从 0x0000 地址开始、因此有必要将引导项目推送到 0x0000 地址、并跳转到引导项目中的应用项目 0x8000。

    附带一张简单的幻灯片、介绍如何从引导程序跳转到应用程序。

    e2e.ti.com/.../Program-Jump-Guide.pptx

    此致、

    Pengfei

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然、它看起来很好。 您有正确的 MSPM0G3507 器件闪存大小和 SRAM 大小。

    嗨、Pengfei、您之前说过他们的代码没有问题。 您是否意味着他们需要再次更改链接器文件并按照程序跳转指南上的说明进行操作?

    此致、

    Kenley

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

    嗨、Pengfei、

    感谢您、客户现在可以正常运行程序。  

    客户 希望添加用户参数设置并为其创建闪存映像。

    例如、在矢量表和程序代码之间添加参数文件、或者 通过在构建生成的第一个程序映像(.out、txt 文件等)之后组合参数文件来创建新的映像文件。

    您是否有任何建议客户的最佳解决方案是什么?

    谢谢您、

    Kenley

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

    尊敬的 Kenley:

    抱歉、“参数设置文件“的含义是什么?

    如果客户想要为不同的应用程序映像定义矢量表和程序代码的地址、他们可以修改.cmd 链接器文件来实现这一点。  

    此致、

    Pengfei

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

    嗨、Pengfei、

    抱歉、我的解释不清楚。

    例如、客户想在.intvecs 和.text 之间的段中添加.parameter。  

    客户应该怎么做?

    例如:  

    1. 如上所述编辑.cmd 文件,例如:  

    .parameter : palign(8){}> flash  

    2.在 CCS 项目中创建一个新的源文件.c ?
    __attribute__((section(“.parameter")“))

    const uint_8T parameter[256]={0x12、0x34、… };

    3.在 main.c 文件中添加以下内容。

    extern const uint8_t 参数[256];

    此致、

    Kenley

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

    嗨、Pengfei

    为了便于您参考、似乎存在类似的线程  
    MSPM0G3507:链接器命令文件 — 基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    但本文并未说明如何通过在“存储器“中添加 userconfig 存储器来修改“段“。

    此致、

    Kenley

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

    尊敬的 Kenley:

    客户是否要将这些.parameter 段数据存储到闪存或 SRAM 中?

    通常、代码将存储在闪存的.text 段中、程序中的变量将存储在 SRAM (.data、.bss、.stack) 中。  

    根据您的说明、我认为客户希望在 SRAM 中分配一个段来存储一些特定参数。   

    它们可以定义.parameter 扇区、如下所示:

    如您所述、他们可以 在其源代码中使用__attribute__((section(“.parameter")“)) 来定义.parameter 扇区中的变量。  

    此致、

    Pengfei

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

    嗨、Pengfei、

    感谢您的支持。

    他们希望将这些参数段数据存储到闪存中、因此 即使断电、参数数据也始终存在。

    在这种情况下、客户应如何操作?

    此致、

    Kenley

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

    尊敬的 Kenley:

    客户可以按照以下指南将存储数据发送到点地址。:

    1.按如下所示定义 cmd 链接器文件、这主要用于保留不用于代码的闪存区域。

    2.在源文件中,在指向的地址位置定义参数,程序下载后将加载初始值。

    此致、

    Pengfei

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

    嗨、Pengfei、

    感谢您的支持。

    快速确认。  

    因此、如果客户想要更改参数的值、客户可以将__attribute uint32_t paraData{64}={0}中的值更改为 uint32_t paraData{64}={0、1、2、3、4、...};。

    我的理解正确吗?

    此致、

    Kenley

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

    尊敬的 Kenley:

    是的、正确。