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.

[参考译文] MSP432E401Y:带闪存引导加载程序的 TI-RTOS 应用程序的链接器命令文件

Guru**** 2553450 points
Other Parts Discussed in Thread: MSP432E401Y, UNIFLASH, SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1038637/msp432e401y-linker-command-file-for-ti-rtos-application-with-flash-bootloader

器件型号:MSP432E401Y
主题中讨论的其他器件: UNIFLASHSYSBIOS

尊敬的 TI 专家:

我将在运行使用 TI-RTOS 的应用程序的 MSP432E401Y 上实现闪存引导加载程序。

一切都按预期工作、但我不确定矢量是否在正确的位置。

当我同时使用引导加载程序+应用程序通过 UniFlash 刷写空白器件时,我会收到以下消息:  

在我的应用中、矢量通常不是它们所在的位置、是什么 UniFlash 将其称为"非法地址"?

以下是我的 cmd 文件:

/*
 * Copyright (c) 2017-2020, Texas Instruments Incorporated
 * All rights reserved.
 *
 * 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.
 */
/*
 *  ======== MSP_EXP432E401Y_TIRTOS.cmd ========
 *  Define the memory block start/length for the MSP_EXP432E401Y M4F
 */
--stack_size=1024   /* C stack is also used for ISR stack */

HEAPSIZE = 0x20000;  /* Size of heap buffer used by HeapMem */


MEMORY
{
    FLASH (RX) : origin = 0x00004000, length = 0x000FC000
    SRAM (RWX) : origin = 0x20000000, length = 0x00040000
}

/* Section allocation in memory */

SECTIONS
{
    .text   :   > FLASH
    .const  :   > FLASH
    .rodata :   > FLASH
    .cinit  :   > FLASH
    .pinit  :   > FLASH
    .init_array : > FLASH

    .TI.ramfunc : {} load=FLASH, run=SRAM, table(BINIT)
    .data   :   > SRAM
    .bss    :   > SRAM
    .sysmem :   > SRAM

    /* Heap buffer used by HeapMem */
    .priheap   : {
        __primary_heap_start__ = .;
        . += HEAPSIZE;
        __primary_heap_end__ = .;
    } > SRAM align 8

    .stack  :   > SRAM (HIGH)
}

我是否应该在.intvecs:    > 0x00004000“SECTIONS”中添加“”或其他内容?

感谢你的帮助。

此致、

Victor Tolosana

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

    尊敬的 Victor:

    我会尝试此主题中列出的一些建议[链接]、其中他们尝试将 MSP432E401Y 上的应用程序起始地址从0x0000更改为0x4000。

    谢谢、

    王国新

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

    您好!

    我一直在尝试同样的方法-从 SDK 中提供的演示闪存引导加载程序示例跳转到 TI RTOS 应用程序。 显然、需要将整个项目移动(移动到0x4000)、使其位于闪存引导加载程序之后。 我认为上面链接中的示例是非 RTOS 应用程序、因此将 APP_START 更改为0x4000非常简单。

    如果我尝试移动 http 服务器演示- httpserver_MSP_EXP432E401Y_tirtos_ccs、链接器会抱怨复位矢量不在正确的地址范围内、这些矢量由导入的 TI RTOS 工程 - tirtos_builds_MSP_EXP432E401Y_release_ccs 定义。

    可以通过更改 tirtos_builds_MSP_EXP432E401Y_RELEASE_CCS/Debug/configPkg/linker.cmd 来手动编辑 RTOS 项目-更改行
    .resetVecs:load > 0x0
    0x4000
    现在、这将链接、并且看起来正常-我可以通过 BSLScripter 加载 http 服务器演示、它运行并提供网页服务

    遗憾 的是、linker.cmd 文件是自动生成的、并且、正如它在顶部所说的、如果我重建 RTOS 项目、我的更改会被覆盖。

    TI-RTOS 内核用户指南 SPRUEX3V.pdf (2020年6月) p151提供了3个如何正确更改 .resetVecs 值的示例。 遗憾的是,它引用了似乎不再存在的3项联机帮助:
    http://rtsc.eclipseprojects.io/cdoc-tip/xdc/cfg/Program.html%23sections.Exclude
    http://rtsc.eclipseprojects.io/cdoc-tip/xdc/cfg/Program.html%23sections.Template
    http://rtsc.eclipseprojects.io/cdoc-tip/xdc/cfg/Program.html%23link.Template

    实际上、 rtsc.eclipseprojects.io 似乎都没有响应!

    是否有该文档的新链接? 我是否正朝着这个方向前进?

    谢谢

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

    您好、Jim、

    我认为您在这方面走得非常好。 我找不到任何有效的联机链接、但这些文件 使用 XDCTools 压缩。 我随附了随 XDCTools 3.62提供的压缩文档。 您可以在 XDCTools 安装位置或软件产品页面上找到此 zip 文件。

    e2e.ti.com/.../docs.zip

    谢谢、

    王国新

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

    您好、Urica、
    感谢这些文档、这很有帮助、但我仍然找不到整个工作原理的解释、因此有一些猜测!

    看起来我可能需要如下所示的器件:

    VAR 计划= xdc.useModule('xdc.cfg.Program');
    Program.sectionsExclude ="^\.resetVecs$";

    从生成的 linker.cmd 中删除现有的.resetVecs。
    我假设这些新行位于 tirtos_builds_MSP_EXP432E401Y_release_ccs\release.cfg 中、但在哪里?

    如果我只添加一个"var Program..." /*===========中的行 程序配置=================== */ SECTION 或更高版本,我得到一个构建错误:

    (笑声)
    正在从 package/cfg/release_pem4f.cfg 配置 release.xem4f ...
    subdir_rules.mk:12:目标'Build-90018911-InProc '的配方失败
    JS:"c:/Users/whitehousej/workspace_v10/tirtos_builds_MSP_EXP432E401Y_release_ccs/release.cfg、第294行:TypeError:Cannot read property "global" from undefined (C:/Users/whitehousej/workspace_v10/tirtos_builds_MSP_EXP432E401Y_release_ccs/release.cfg #294)
    "./package/cfg/release_pem4f.cfg,第189行
    xdctools_3_62_01_15_core\gmake.exe:***[package.mak:202:package/cfg/release_pem4f.xdl]错误1
    xdctools_3_62_01_15_core\gmake.exe:***[package/cfg/release_pem4f.xdl]删除文件'package/cfg/release_pem4f.h'
    xdctools_3_62_01_15_core\gmake.exe:***[package/cfg/release_pem4f.xdl]删除文件'package/cfg/release_pem4f.c'

    添加:

    VAR 计划= xdc.useModule('xdc.cfg.Program');
    Program.sectionsExclude ="^\.resetVecs$";

    在 release.cfg 的顶部、它构建时没有错误、我看到.resetVecs 条目现在从 linker.cmd 中的段中消失-次要成功

    从 Program.sectionsTemplate 的文档中、我应该能够为自定义模板文件添加一个文件名、以便在 SECTIONS 位中执行"某些操作"。 如果我现在添加:

    VAR 计划= xdc.useModule('xdc.cfg.Program');
    Program.sectionsExclude ="^\.resetVecs$";
    Program.sectionsTemplate ='./test.xdt';

    在 release.cfg 的顶部、并将 test.xdt 置于 tirtos_builds_MSP_EXP432E401Y_release_ccs\Debug\configPkg 中、我似乎总是收到错误:

    (笑声)
    正在从 package/cfg/release_pem4f.cfg 配置 release.xem4f ...
    正在生成自定义 ti.sysbios 库 makefile ...
    subdir_rules.mk:12:目标'Build-90018911-InProc '的配方失败
    JS:"c:/ti/simplelink_msp432e4_sdk_4_20_00_12/kernel/tirtos/packages/ti/platforms/msp432/linkcmd.xdt、第125行:Java 方法 java.lang.String.replace 匹配的 JavaScript 参数类型(函数、字符串)的选择是不明确的;候选方法是:
    类 java.lang.String 替换(char、char)
    类 java.lang.String replace(java.lang.CharSequence, java.lang.CharSequence)
    "C:/ti/simplelink_msp432e4_sdk_4_20_00_12/kernel/tirtos/packages/ti/platforms/msp432/linkcmd.xdt "、第125行
    "C:/ti/simplelink_msp432e4_sdk_4_20_00_12/kernel/tirtos/packages/ti/platforms/msp432/linkcmd.xdt、第134行
    xdctools_3_62_01_15_core\gmake.exe:***[package.mak:202:package/cfg/release_pem4f.xdl]错误1

    我尝试使用空文件进行 test.xdt、并在 Program.sectionsTemplate 文档中尝试了该示例的各种版本、但很不幸!

    如有任何进一步的建议、我们将不胜感激!
    谢谢

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

    您好、Jim、

    您是否可以尝试在自定义模板文件的路径("./test.xdt")周围使用双引号? 在第62行的 linkcmd.xdt 中有一条注释:应使用双引号将路径括起来、否则链接的将错误地解析路径。

    谢谢、

    王国新

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

    您好!

    这似乎没有什么影响。 如果找不到该文件、它会给出一条清晰的消息!

    我怀疑我的问题是我的文件中实际上包含什么内容。 我尝试将其留空、并根据示例尝试了几次尝试、但似乎与我所做的任何事情都不一样。

    谢谢

    Jim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="500257" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1038637/msp432e401y-linker-command-file-for-ti-rtos-application-with-flash-bootloader/3853884 #3853884"]不幸的是 ,linker.cmd 文件是自动生成的,正如其顶部所说的,如果我重建 RTOS 项目,我的更改将被覆盖。

    在.cfg 文件中尝试设置 m3Hwi.resetVectorAddress

    例如、连接到 TM4C1294NCPDT 的示例:RTOS:BIOS 不起作用 在.cfg 文件中使用了以下内容:

    var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
    
    /* Set a non-zero reset vector address for this application, since is started by a bootloader placed at address zero.
       The FLASH memory region in the linker command file is set to start at this address, to avoid using any flash
       reserved for the bootloader. */
    m3Hwi.resetVectorAddress = 0x8100;
    

    这导致自动生成的 linker.cmd 文件出现以下情况:

    SECTIONS
    {
        .bootVecs:  type = DSECT
        .vecs: load > 0x20000000
        .resetVecs: load > 0x8100
    
    
    
        xdc.meta: type = COPY
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="500257" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1038637/msp432e401y-linker-command-file-for-ti-rtos-application-with-flash-bootloader/3853884 #3853884">该文档是否有新的链接? [/报价]

    在 CCS 10.4安装中、使用 Help -> Help Contents 并在搜索中输入"ti.sysbios.family.arm.m3.Hwi"可从  安装有 SYS/BIOS 支持的不同产品中找到多个命中点、例如从 SimpleLink MSP432E SDK 中找到。

    文档也可在 https://software-dl.ti.com 上找到。 例如 、metaonly config Hwi.resetVectorAddress

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

    谢谢、太棒了。

    事实上、这更简单- TI RTOS 项目的 release.cfg 文件已经有一个部分:

    /*========================= Hwi 配置=================== *
    var halHwi = xdc.useModule('ti.sysbios.hal.Hwi');
    var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');

    (笑声)

    因此、我需要做的就是 、在后面的某个位置添加:

    m3Hwi.resetVectorAddress = 0x4000;

    它变得更加简单!

    文件文本视图中的 Hwi 配置部分 对应于 XGCONF GUI 编辑器中的 Hwi (ti.sysbios.family.arm.m3)部分。 隐藏在眼前的是矢量表重置矢量表地址-如果我只是在此处的框中输入0x4000、则是此行

    m3Hwi.resetVectorAddress = 0x4000;

    添加到文件末尾、现在它会构建合适的偏移、以便通过闪存引导加载程序示例加载