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.

[参考译文] MSPM0L1306:如何生成 dl_flashctl.c 的单个.out 文件

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1562288/mspm0l1306-how-to-generate-a-single-out-file-of-dl_flashctl-c

器件型号:MSPM0L1306


工具/软件:

尊敬的支持团队:

闪存驱动程序代码需要在 RAM 中运行、闪存驱动程序代码可以保存为用于引导加载程序的单个.out 文件。

我知道调用 dl_flashctrl.c 中的 DL_FlashCTL_executeCommandFromRAM () 的函数意味着闪存驱动程序代码在 RAM 中运行。

我不知道如何 将在 RAM 中运行的闪存驱动程序代码生成到单个.out 中。

我还希望生成 应用工程的验证代码(校验和,CRC 等)、并 将结果存储在生成的 .out  文件的分配地址中

CCS 是否支持脚本/config 以生成和存储验证代码? 或其他方法?

谢谢!

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

    我不太理解您的问题。  我只关注其中一个。

    我不知道如何生成 在 RAM 中运行的闪存驱动程序代码到单个.out 中。

    您希望解决什么总体问题?  为什么您认为您需要单个.out 文件?

    谢谢。此致、

    -乔治

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

    您好、George、

    感谢您的帮助。 引导加载程序的要求。 必须保存到单个文件中的闪存驱动程序代码必须下载到 RAM 中。

     当它处于调试状态时、我发现 DL_FlashCTL_executeCommandFromRAM() 在地址 0x20000758 中。

    将 RAM 内容保存到文件操作:右键点击并选择具有特殊地址和长度的“Save Memory“、然后选择所需的文件类型。 我已经做到了。 如果您有其他方法、请与我分享。

    我现在的问题是:

    1、函数 DL_FlashCTL_executeCommandFromRAM() 是在 RAM 中运行的唯一闪存驱动器代码吗?

    2、 DL_FlashCTL_executeCommandFromRAM () 的代码是否为地址 0x20000758 至 0x20000BFF(地址来自调试状态下的内存浏览)? 在我看来、它有点大。

    3、函数 DL_FlashCTL_executeCommandFromRAM() 现在包含在代码中。 如何排除此 函数生成的内容?

      在 DL_FlashCTL_executeCommandFromRAM () 中对代码进行注释并将下图的相同注释下载到 地址 0x20000758 是否正常?

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

    尊敬的:

    您是否试图 避免使用 DL_FlashCTL_executeCommandFromRAM ()、因为它在应用程序中的“大小“?

    我还想说明的是、应用代码加载到闪存中、而不是加载到 RAM 中。

    此致、

    Owen

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

    尊敬的 Owen:

    有 2 个单独的 (应用程序和闪存驱动程序)部分要使用引导加载程序下载。

    应用代码下载到闪存中、闪存驱动器被下载并运行到 RAM 中。

    客户需要更新应用程序代码时、闪存驱动器会下载到 RAM 中。 在我看来、这是为了安全。

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

    尊敬的:

    感谢您的澄清。  我认为这需要修改链接器文件。 我会为您研究此问题、然后返回给您。  

    此致、

    Owen

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

    尊敬的:

    如需参考如何修改链接器文件、我建议查看 SDK 中的 secondary_bsl_uart 示例。 您可以将其与默认链接器文件进行比较、以了解需要更新的内容。

    /*
     * Copyright (c) 2024, 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.
     */
    
    -uinterruptVectors
    
    /*----------------------------------------------------------------------------*/
    /* Memory Map                                                                 */
    
    MEMORY
    {
    	FLASH_SBSL_INTVEC(RWX)  :	 org = 0x00001000,      len = 0x00000040,
    	FLASH_SBSL_START(RWX)   :	 org = 0x00001040,      len = 0x00000040,
    	FLASH_SBSL(RWX)   		:	 org = 0x00001080,      len = 0x00001F80,
    
        SRAM(RW)				:    org = 0x20000000,      len = 0x00001000,
    
        BCR_CFG		 		    : 	 org = 0x41C00000,      len = 0x00000080,
        BSL_CFG				    : 	 org = 0x41C00100,      len = 0x00000080,
        FACTORY_CFG		  		: 	 org = 0x41C40000,      len = 0x00000200,
    }
    
    /*----------------------------------------------------------------------------*/
    /* Section Configuration                                                      */
    
    SECTIONS
    {
    	.intvecs			: PALIGN(8) {} > FLASH_SBSL_INTVEC
    	.sblStart			: PALIGN(8) {} > FLASH_SBSL_START
    
        GROUP(FLASH_MEMORY) {
            .text          	: PALIGN(8) {}
            .const         	: PALIGN(8) {}
            .cinit         	: PALIGN(8) {}
            .rodata			: PALIGN(8) {}
        } > FLASH_SBSL
    
        GROUP(SRAM) {
        	.vtable 		: {}
            .data          	: {}
            .bss           	: {}
       } > SRAM
    
    	.TI.ramfunc   : load = FLASH_SBSL, palign(8), run=SRAM, table(BINIT)
    
        .stack  :   > SRAM (HIGH) SIZE(BSL_CI_stackSize)
    
        .factoryConfig          : {} > FACTORY_CFG
        .BCRConfig              : {} > BCR_CFG
        .BSLConfig              : {} > BSL_CFG
    }
    

    我认为要在 RAM 中存储闪存驱动程序代码、您只需使用“FromRAM"DriverLib 函“ 函数。 例如、当运行 DL_FlashCTL_eraseMemoryFromRAM 时、代码将从闪存加载到 RAM。

    如需更多有关此主题的信息、请参阅 MSPM0 引导加载程序用户指南和 MSPM0 引导加载程序实施指南。

    此致、

    Owen

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

    烤箱、

    我在您的重播中学习了链接。 谢谢!

    RAM 中的闪存驱动器代码正常。

      地址 0x20000758 和 0x20000BFF 之间的 DL_FlashCTL_executeCommandFromRAM () 代码(地址在调试状态下来自 Memory Browse,请参阅下图)。

     在函数中的内容被注释掉后、DL_FlashCTL_executeCommandFromRAM() 的内容仍包含在 RAM 中(与下图相同)。

    我想实施:

      MCU 运行后、地址 0x20000758 和 0x20000BFF 之间的内容为空白。

    0x20000758 和 0x20000BFF 中的内容与从 LIN 接收到的数据一起写入。

    如何注释  DL_FlashCTL_executeCommandFromRAM() 中的内容?

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

    尊敬的:

    我不知道为什么函数没有从该存储器区域中清除。 如果调用 FromRAM DriverLib 函数、则可能会调用 DL_FlashCTL_executeCommandFromRAM () 函数。

    您的 LIN 数据是否必须介于  0x20000758 和 0x20000BFF 之间? 如果可能、我建议将 LIN 数据存储在不同的地址。 用户可以调整链接器文件、以便为此分配存储器区域。 在代码中、您也可以只使用指针而不是指定 RAM 地址。

    此致、

    Owen

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

    尊敬的 Owen:

    LIN 数据地址是自动生成的、我不知道如何 定义地址。 您对此有一些想法吗?

    谢谢

    Johnny

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

    尊敬的:

    LIN 数据存储在外设寄存器中、而不是存储在闪存或 RAM 中。 技术参考手册中规定该区域的开头为 0x4000.0000:

    在 UART 寄存器表中:

    您还可以参考 SDK 示例 lin_commanderlin_responder 进行实现。

    这是你想要的吗?

    此致、

    Owen

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

    尊敬的 Owen:

    不是关于 LIN。

    我想执行以下步骤:

    1、    在当前代码中、DL_FlashCTL_executeCommandFromRAM () 的 RAM 地址介于 0x20000758 和 0x20000BFF 之间。 然后 将整个地址的内容保存到“flashdrv.hex"中“中。

    2、接下来我 注释 DL_FlashCTL_executeCommandFromRAM () 和编译器传递中的内容

    3、接下来将“flashdrv.hex"下载“下载到 RAM 地址 0x20000758 和 0x20000BFF 中。

    上部操作是否存在任何风险? 如果是、请给出您的建议。 谢谢!

    BR

    Johnny

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

    尊敬的:

    我不确定我是否理解这些步骤、但下面是我如何解释这些步骤。

    •  是否要将 DL_FlashCTL_executeCommandFromRAM() 函数另存为十六进制文件?

    • 您为什么要评论该功能的实现? 这将进行编译、但代码不会按预期执行。

    • 是否要将代码放回地址中?

    • 这样做背后的想法是什么?

    在我看来,你试图删除的东西只是把它放回同一个地方吗?

    此致、

    Owen

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

    尊敬的 Owen:

    •  是否要将 DL_FlashCTL_executeCommandFromRAM() 函数另存为十六进制文件? 是的

    • 您为什么要评论该功能的实现?  是的。 这将进行编译、但代码不会按预期执行。  

    • 是否要将代码放回地址中? 是的、代码的执行将与之前的 DL_FlashCTL_executeCommandFromRAM () 注释相同。  

    • 这样做背后的想法是什么?  这是客户的要求。 当应用程序代码需要重新刷写时、必须将闪存驱动程序下载到 RAM 中。
    • 在我看来,你试图删除的东西只是把它放回同一个地方吗?  是的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的:

    感谢您的澄清。 我想我现在已经开始理解了。

    您是否尝试从 RAM 运行闪存加载程序?

    我遇到了 这个 E2E 主题、该主题涉及在 RAM 中运行。 这对您有帮助吗?

    由于编译器并不会自然地将代码放入 RAM 中、因此我认为您也可以更新链接器文件来执行此操作、但这是我需要研究的。 您甚至可以将程序加载到闪存中、生成十六进制文件并将该十六进制文件加载到 RAM 中、但可能存在一些寻址风险、因为它会在与构建目标不同的位置运行。

    此致、

    Owen