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.

[参考译文] F28M35H52C:使用主位置从引导加载程序跳转

Guru**** 2390755 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1010270/f28m35h52c-using-main-location-to-jump-from-bootloader

器件型号:F28M35H52C
Thread 中讨论的其他器件:controlSUITE

您好!

我们正在器件中使用 F28M35H52控制器、我们正在开发固件升级。  

我们为同一个开发了单独的引导加载程序(MCU 侧)。 当我们从引导加载程序跳转时、我们面临以下问题:

1) 1)当我们跳转到应用程序的"main"位置时、代码不会进一步执行

2)当我们使用 c_int 位置(取自.map 文件)进行跳转时、代码会正确执行

3) 3)现在、这个 c_int 文件随每次生成而变化。 这使得我们很难执行固件升级功能。

您能不能指导我们如何跳转到主位置、或者是否有方法将 c_int 修复到指定位置?

跳转至应用程序开始位置在 DSP 代码中工作正常。  DSP 的应用程序开始位置在.cmd 文件中配置

MCU 的类似方法不起作用。  

此致、

Lakshmi

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

    您好、Lakshmi、

    如果我正确理解该问题、则直接跳转到 main 不起作用、因为您没有调用 C 初始化例程、这是在引导加载程序通过控制后首先需要运行的例程。 然后、C 初始化例程(_c_int00)将执行必要的初始化、然后调用应用程序的 main()。

    现在、为了让您从引导加载程序调用_c_int00、您可以执行如下操作:

    通常、对_c_int00的调用将位于汇编文件中、如 device_name_codestartbranch.asm、如下所示。

    (三
    *函数:codestart 段
    *
    *说明:分支到代码起始点
    (三

    .sect "codestart"
    保留

    code_start:
    如果 WD_DISABLE = 1
    LB WD_DISABLE;分支到看门狗禁用代码
    其他
    LB _c_int00;分支到 RTS 库中启动。_asm
    .endif

    ;结束 codestart 段

    2.在链接器命令文件中、可以将 codestart 指向 begin、如下所示。

    部分

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

    然后、应将 BEGIN 映射到地址、引导加载程序在完成执行后将控制权传递给该地址。 例如、这将是闪存入口点(在闪存引导模式下)。

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

    谢谢、

    Sira

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

    您好 Sira、

    我们在修复_c_int00时遇到问题。  

    我们按照给定的方式将命令添加到.cmd 文件中。 我们添加了.asm 文件并使用了命令 LD _c_int00。

    这将找不到 code_start 引用。

    同样的方法适用于 DSP 内核。 但对于 MCU 内核、.asm 文件不会查找 CODE_START。 我们认为这可能是项目设置问题。 您能为我们提供有关设置的帮助。  

    下面是我们在构建项目时遇到的错误

    这是我们所做的项目设置

    当我们添加.asm 文件时、错误会增加、但没有解决问题。

    您能帮助解决此问题吗?

    P.S:我无法附加图像。 向论坛插入图像不清晰。

    此致、

    Lakshmi

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

    您好 Sira、

    您能否就以下观察结果向我们提供支持?

    我们无法修复_c_int、这会导致功能出现问题。

    此致、

    Lakshmi

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

    Lakshmi、

    很抱歉,我不在办公室。

    codestartbranch.asm 文件需要包含在项目中、就像包含其他源文件(C)一样。 asm 文件应该具有一个 LB _c_int00。 您能否向我发送您的.asm 文件以便我查看一下? 我认为这是 TI 提供的东西。

    我不确定--copy_file 选项的含义。 在最新的 C2000编译器中、此选项不存在。 因此我完全不使用该选项。

    另一个要做的事情是将 code_start 指定为--entry_point、如该图所示。

    谢谢、

    Sira  

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

    您好 Sira、

    "-copy-file 出现在 Advanced Options -> Assembler Options 中

    我们在这里添加.asm 文件。 是必需的吗? 如何将.asm 文件包含在工程中以进行编译?

    我们使用以下版本:

    CCS 版本: 版本:7.0.0.00043

    SYS/BIOS 版本:版本6.35.4.50

    XDC 工具版本:版本3.25.3.72

    XDC 编译器版本: TI v16.9.0.LTS

    XDC 汇编器版本:  

    这些版本的维护是为了旧版。  

    下面给出了 asm 文件。  

    ; //###########################################################################
    ; // TITLE: Branch for redirecting code execution after boot.
    ; // For these examples, code_start is the first code that is executed after
    ; // exiting the boot ROM code.
    ; //
    ; // The codestart section in the linker cmd file is used to physically place
    ; // this code at the correct memory location.  This section should be placed
    ; // at the location the BOOT ROM will re-direct the code to.  For example,
    ; // for boot to FLASH this code will be located at 0x13FFF0.
    ; //
    ; // In addition, the example F28M35x projects are setup such that the codegen
    ; // entry point is also set to the code_start label.  This is done by linker
    ; // option -e in the project build options.  When the debugger loads the code,
    ; // it will automatically set the PC to the "entry point" address indicated by
    ; // the -e linker option.  In this case the debugger is simply assigning the
    ; // PC, it is not the same as a full reset of the device.
    ; //
    ; // The compiler may warn that the entry point for the project is other then
    ; //  _c_init00.  _c_init00 is the C environment setup and is run before
    ; // main() is entered. The code_start code will re-direct the execution
    ; // to _c_init00 and thus there is no worry and this warning can be ignored.
    ; //###########################################################################
    ; // $TI Release: F28M35x Driver Library vBeta1 $
    ; // $Release Date: August 31, 2011 $
    ; //###########################################################################
    
    ***********************************************************************
    
        .ref _c_int00
        .global code_start
    
    ***********************************************************************
    *Function : codestart section
    *
    *Description : Branch to code starting point
    ***********************************************************************
    
        .sect "codestart"
    	.retain
    
    
    code_start:
        LB _c_int00         ; Branch to start of boot.asm in RTS library
                            ; end codestart section
    
    
    
    
    

    我们还在 Symbol Management 中尝试了 code_start -它也导致了错误。  

    此致、

    Lakshmi

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

    Lakshmi、

    只需在 CCS 中右键点击工程名称并选择"Add Files"即可。  

    .asm 文件看起来正常。 我会说取消选择--copy_file 选项并执行我在上面建议的操作。 看看它是否起作用。

    还向我发送您的链接器 cmd 文件。

    谢谢、

    Sira

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

    您好 Sira、

    我们按照说明操作。 删除了--copy-file 并仅配置了 code_start。

    我们仍然会遇到错误、无法修复 code_start 位置

    错误图像如下所示:

    cmd 文件附在下面: (F28M35H52C1.cmd)

    /* --COPYRIGHT--,BSD
     * Copyright (c) $(CPYYEAR), 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.
     * --/COPYRIGHT--*/
    
    /*
     *  ======== F28M35H52C1.cmd ========
     *  Define the memory block start/length for the F28M35H52C1 M3
     */
    
    /* System memory map */
    
    
    MEMORY
    {
        /* Ethernet Bootloader*/
        /*FLASH_BOOT (RWX): origin = 0x00220000, length = 0x4
        FLASH (RWX)     : origin = 0x002201f0, length = 0x5fd10
        RESETVECS (RWX) : origin = 0x00220040, length = 0x1b0
        INTVECS (RX)    : origin = 0x00280000, length = 0x01B0*/
    	
        /* With bootloader */
        /* BootLoader --> size -> 48kb ((N-16)+(M-16)+(L-16) ) */
        //FLASH_BOOT (RWX): origin = 0x200030,   length = 0x4
        //FLASH (RWX)     : origin = 0x200034,   length = 0x6FFCC
    
        // Image-A --> size -> 208kb ((K-16)+(J-64)+(I-64)+(H-64) )
        FLASH_BOOT (RWX): origin = 0x0020C000, length = 0x4
        FLASH (RWX)     : origin = 0x0020C104, length = 0x0033EFC   	// : 0x00240000
    
    	// Image-B --> size -> 208kb ((G-64)+(F-64)+(E-64)+(D-16) )
        //FLASH_BOOT (RWX): origin = 0x00240000, length = 0x4
        //FLASH (RWX)     : origin = 0x00240104, length = 0x00033EFC   	// : 0x00274000
    
    	//Flash_Api data Write and Read purpose used
        FLASH_C (RWX)    : origin = 0x00274000, length = 0x4000 /*16k*/
        FLASH_B (RWX)    : origin = 0x00278000, length = 0x4000 /*16k*/
        FLASH_A (RWX)    : origin = 0x0027C000, length = 0x3fd0 /*~16k*/ // == 0x0027FFD0
        
        //Working code_flash c0 c1 c2 c3
        C03SRAM (RWX)   : origin = 0x20000000, length = 0x2000
        C03SRAMHP (RWX) : origin = 0x20002000, length = 0x5680
    
        DMARAM  (RWX)   : origin = 0x20007680, length = 0x800
        DMARAMDATA(RWX) : origin = 0x20007e80, length = 0x180
    
        S01SHRAM (RWX)  : origin = 0x20008000, length = 0x4000
        S23SHRAM (RWX)  : origin = 0x2000c000, length = 0x4000
    
        S47SHRAM (RWX)  : origin = 0x20010000, length = 0x8000
    
        CTOMMSGRAM (R)  : origin = 0x2007F000, length = 0x6c0
        SHARED_DEF (R)  : origin = 0x2007F6c0, length = 0x040
        MTOCMSGRAM (RW) : origin = 0x2007F800, length = 0x700
        LWIP_STAT (RW)  : origin = 0x2007FF00, length = 0x0f8
        MACID (RW)      : origin = 0x2007FFf8, length = 0x008
    }
    
    SECTIONS
    {
        /* Allocate program areas: */
    	.resetVecs		: load > FLASH
    
        .text       	: > FLASH
    //    codestart       : > FLASH_BOOT, PAGE = 0, ALIGN(4)
    	codestart       : > FLASH_BOOT
    
        .cinit      	: > FLASH
        .pinit      	: > FLASH
        .binit      	: > FLASH
        .init_array 	: > FLASH
    
        
        /* Initalized sections go in Flash */
        .const      : > FLASH
    
        /* Allocate uninitalized data sections: */
        .sysbios_heap : > C03SRAMHP
    
    
      //  ramfuncs      : LOAD = FLASH,
      //                  RUN = C03SRAM, /*SPN/TEK, 20121017*/
      //                  /*RUN = DMARAM,*/
      //                  LOAD_START(RamfuncsLoadStart),
      //                  LOAD_END(RamfuncsLoadEnd),
      //                  RUN_START(RamfuncsRunStart),
      //                  PAGE = 0
    
        .stack 		: > C03SRAM
        .data       : >> /*C03SRAM|*/DMARAMDATA|S23SHRAM
        .bss        : > /*C03SRAM|*/S23SHRAM|S47SHRAM
        .sysmem     : > /*C03SRAM|*/S23SHRAM
        .cio        : > /*C03SRAM|*/S23SHRAM
        .neardata   : > /*C03SRAM|*/S23SHRAM
        .rodata     : > /*C03SRAM|*/S23SHRAM
        .args       : > /*C03SRAM|*/S23SHRAM
    
        .s01shram 	: > S01SHRAM
        .s47shram 	: > S47SHRAM
    
    #ifdef __TI_COMPILER_VERSION__
        #if __TI_COMPILER_VERSION__ >= 15009000
             GROUP
             {
              	ramfuncs
               {
                 -l F021_API_CortexM3_LE.lib
               }
             }
             LOAD = FLASH,
             RUN =  C03SRAM,//S47SHRAM,
             LOAD_START(RamfuncsLoadStart),
             LOAD_END(RamfuncsLoadEnd),
             RUN_START(RamfuncsRunStart),
             PAGE = 0,ALIGN(4)
        #else
             GROUP
             {
               ramfuncs
               {
                 -l F021_API_CortexM3_LE.lib
               }
             }
             LOAD = FLASH,
             RUN = C03SRAM, //S47SHRAM,
             LOAD_START(RamfuncsLoadStart),
             LOAD_END(RamfuncsLoadEnd),
             RUN_START(RamfuncsRunStart),
             PAGE = 0,ALIGN(4)
        #endif
    #endif
    
    
        //ramfuncs : {} > C03SRAM,   PAGE = 0
    
        GROUP : > DMARAM
        {
            DMA_CTRLRAM
            .serial_buf
        }
    
        GROUP : > MTOCMSGRAM
        {
            M3_MSGRAM_FIFOS
            M3_FIFO_PTRS
        }
    
        GROUP : > CTOMMSGRAM
        {
            C28_MSGRAM_FIFOS : TYPE = DSECT
            C28_FIFO_PTRS  : TYPE = DSECT
        }
    
        GROUP : > SHARED_DEF
        {
            shared_def : TYPE = DSECT
        }
    
        GROUP : > LWIP_STAT
        {
            lwip_stats
            .serial_counters
        }
    
        GROUP : > MACID
        {
            .macid
        }
    
    }
    
    _STACK_TOP = __stack + 512;
    /*__STACK_TOP = __stack + 256;*/
    
    

    您能不能就我们可以进一步采取哪些措施来解决这个问题提出建议。 它是否与编译器相关? 因为此选项适用于 C28内核、不适用于 M3内核。

    此致、

    Lakshmi

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

    Lakshmi、

    好的、我直到现在才意识到您的错误发生在 M3侧、而不是 C28侧。

    您的 C28x CCS 项目构建良好、但 M3 CCS 项目不能。

    请告诉我我的理解是否正确?

    如果是、我可能需要在团队中寻求其他人的帮助来支持此问题、因为我在 M3方面没有专业知识。 对于启动器、我甚至不确定 LB 是否是有效的 M3 CPU 指令。

    谢谢、

    Sira

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

    是 Sira。 完全正确。 我们在 M3 code_start 方面遇到问题。 C28工作正常。

    此致、

    Lakshmi

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

    Lakshmi、我将寻求帮助来支持您的问题。

    谢谢、

    Sira

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

    Lakshmi、

    我将此主题移至 Code Composer 论坛、因为您的问题似乎与项目构建相关。

    如果您为 M3 (主器件)构建 controlSUITE 示例、编译器是否能够解析"code_start"标签? 如果是、您的最后一种方法是使用 controlSUITE 示例作为起始模板来重新制作 M3项目。

    您是否还可以尝试在新的工作区中重建项目? 我听说工作区有时会损坏并导致非感应错误。

    Tommy

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

    Tommy、您好!

    我们已经尝试了 controlSUITE M3示例项目。 我们得到的错误与我们在项目空间中得到的错误相同。

    我们还尝试创建新的工作区、但仍会出现相同的错误。

    请注意、CODE_START 和 ASM 文件在 C28文件中工作正常、而不是在 M3侧工作。

    此致、

    Lakshmi

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

    Lakshmi、

    如果您无法构建未经修改的 controlSUITE 示例、则开发环境中可能存在一些不适当的情况。 我能够在我的机器上构建该项目、而不会出现任何错误。

    您能否尝试使用全新的 CCS 和/或 controlSUITE 安装来构建 controlSUITE 示例?

    Tommy

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

    没有 Tommy。 我能够构建一个 controlSUITE 项目。

    现在、我尝试添加.asm 文件并配置 CODE_START。 那么我无法构建 controlSUITE 项目。

    使用的版本如下:

    CCS 版本:  版本:7.0.0.00043

    SYS/BIOS 版本:版本6.35.4.50

    XDC 工具版本:版本3.25.3.72

    我们需要将这些版本用于旧版。

    您能帮助我们解决此问题吗?

    此致、

    Lakshmi

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

    Lakshmi、

    如果我回到线程中、Sira 好像误解了您原来的问题与 C28x 有关、所以他关于包含 codestart asm 文件的建议是考虑到 C28x 的。 因此、M3构建错误可能是由于您将 C28x 代码与 ARM 编译器一起使用。 我建议删除 Sira 的建议修改、以便您的项目可以恢复到工作状态。

    使用 controlSUITE 示例(~\f28M35x_examples_Dual\flash_prog\m3)作为公共参考、我会提请您注意  startup_ccs.c 项目文件中的 ResetISR ()函数。 您可以在注释中看到这是 M3项目执行开始并分支到_c_int00的位置ResetISR()函数放置在0x00200030的".resertisr"存储器部分中。 这与 M-Boot ROM 的 TRM 说明一致、其中将闪存引导的入口点地址指定为0x200030:

    如果引导加载程序未在闪存中执行、则可以分支到此固定入口点位置。

    如果您将该位置用于引导加载程序,则看起来您可以类似地将函数放置在固定的存储器位置,以与定义 ResetISR()相同的方式分支到_c_int00。

    Tommy

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

    Tommy、您好!

    我们在引导加载程序代码中有 ResetISR。 应用程序没有 ResetISR。  

    因此我们无法执行您的建议。 当我们尝试其他选项时、我们使用了这种方法、它起了作用

    我们修复了映射文件中给定的引导条目

    并在引导加载程序中使用相同的方法来调用应用程序

    这有助于我们跳转到应用程序到固定地址

    感谢您的支持

    此致、

    Lakshmi