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.

[参考译文] TMS320F28388D:有关跳转到 CM 内核中固件的入口地址的问题

Guru**** 2595805 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regarding-jumping-to-the-entry-address-of-a-firmware-in-cm-core

器件型号:TMS320F28388D

您好!


我正在使用 controlCARD 板(TMDCNCD28388D)、并已在 CM 闪存上加载两个固件文件。 我将它们称为"跳线"和"固件_A"。 跳线加载在0x00200000 (SECTOR0的开头)。 Firmware_A 在0x0020C000 (SECTOR3开始)加载。 当 DSP 引导时、跳线会运行、并跳至 Firmware_A 的开头 然后、Firmware_A 从使用以太网的外部软件 API 中获取另一个固件、我称之为"Firmware_B"、并在0x00270000 (SECTOR7开始)加载 Firmware_B。 成功加载 Firmware_B 后、我将 DSP 复位。 在这种情况下、跳线应跳转至0x00270000 (Firmware_B 的开头)。 此时的问题是、在跳线跳转至0x00270000后、固件_B 将不会运行。 但是、这里有一件奇怪的事情、我无法理解。 事情是、我尝试在0x00270000处放置一个断点、然后我可以看到、程序在跳线跳转后达到这个点。 但是、每当我单击"Resume"按钮(CCS 顶部的绿色按钮)时、Firmware_B 就不会运行。 但是、当我使用"汇编单步执行"按钮时、它将成功运行 Firmware_B

如果有人能帮助我解决这个问题、我将不胜感激。


注:
1 -跳线是一个简单的非 RTOS 固件
2-固件_A 和固件_B 使用 SYS/BIOS
3-固件_B 由"ARM 十六进制实用程序"工具生成。

(可能有用的说明:假设上述情况、但这次 Firmware_B 使用以太网从外部软件 API 获取 Firmware_A。 在这种情况下、跳线会成功跳至 Firmware_A 的开头、并且 Firmware_A 将成功运行。)


此致、
Alex

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

    您正在执行什么类型的复位? 只是调试器复位?

    [引用 userid="475471" URL"~/support/microrims/C2000-microset-group/C2000/f/C2000-microset-forum/1117017/tms320f28388d-an-issue-regard-ding-the-entry-address-of-a-firmware-in-cm-core "]但是、每当我单击"CCS_Resume"按钮时、单击顶部的"B 固件"按钮时(不运行"about")。

    您能告诉我们它的发展有多远吗? 比如跳转到 Firmware_B、然后在某个位置丢失? 固件_B 在卡死前执行了多少个固件_B。

    [引用 userid="475471" URL"~/support/microset/C2000-microset-group/C2000/f/C2000-microset-forum/1117017/tms320f28388d-an-issue-regarding-the-entry-address-of a-firmware-in-cm-core "]但是、当我成功使用"Step_Firmware"[引用]按钮时、会成功运行"Assembly"。

    单步执行某个位后、是否有一个点可以点击"resume"、然后它将成功运行? 需要单步执行的只是到 Firmware_B 的跳转。 一般而言、当我想到正常运行时不起作用、而是单步执行时起作用时、我会想到硬件中发生的竞争情况。 就像您在跳线中重新初始化 RAM 并在完成该过程之前尝试运行 Firmware_B 等...

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~用户 id="123578" URL"支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regard-king-the-entry-address-of a-firmware-in-cm-core/4141269#4141269#4141269]您正在进行何种复位? 只需重置调试器?[/quot]

    是的、只是调试器复位。

    [~用户 id="123578" URL"支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regarding-the-booby-to-entry-address-of-mware-in-core/4141269#4141269]您可以告诉您该如何?" 比如跳转到 Firmware_B、然后在某个位置丢失? 固件_B 在卡死前执行了多少个固件。

    当跳线跳转至 0x00270000 (Firmware_B 的开头)时、我可以看到程序转至0x00262e90、如下图中用蓝色突出显示的那样。 然后、我浏览汇编代码、可以看到、当我单击地址0x00262eb8的"汇编单步执行"按钮时、我无法再使用"汇编单步执行"按钮、因为该按钮已隐藏。

    [~ userid="123578" URL"支持/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regarding-the-bite-the-entry-address-of a-firmware-in-cm-core/4141269#4141269#4141269在单步执行后、您可以在哪个位置成功运行?] 需要单步执行的只是到 Firmware_B 的跳转。 一般而言、当我想到正常运行时不起作用、而是单步执行时起作用时、我会想到硬件中发生的竞争情况。 就像您在跳线中重新初始化 RAM 并在完成该过程之前尝试运行 Firmware_B 等...

    我认为回答这个问题有点困难,因为我应该检查很多地址。 尽管如此、我尽可能多地尝试并跳转到了多个地址、例如 0x00262eb8 (我提到的用于回答您的第二个问题的地址)、但它们都不起作用。 关于你对比赛条件的解释、我知道你的意思、我将会进一步努力 、如你所提到的那样确定这一点。

    但是、在执行该操作之前、我必须说 这两个 Firmware_A 和 Firmware_B 是完全相同的固件、除非它们放置在闪存的不同扇区中。 实际上、Firmware_A 位于 SECTOR3、SECTOR4、SECTOR5和 SECTOR6、而 Firmware_B 位于 SECTOR7、SECTOR8、SECTOR9和 SECTOR10。 我之所以解释这一点、是因为 我尝试了另一个非常相似(几乎相同)的测试案例、并且测试成功。 测试用例是:我在闪存上加载跳线和 Firmware_B。 然后、当我运行代码时、跳线跳转至 Firmware_B、然后固件_B 通过使用以太网从外部软件 API 中获取 Firmware_A、并将其加载到闪存(在 sector7-10上)。 现在、当我复位 DSP 时、我可以看到跳线成功跳至 Firmware_A、我看到 Firmware_A 运行良好。  基于此解释以及 Firmware_A 和 Firmware_B 几乎相同的事实、 我认为 另一种情况(测试用例) 应该可以正常工作、而不会发生任何变化。 请告诉我您的想法。 谢谢。

    最棒的

    Alex

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

    为了补充我的解释、Firmware_A 和 Firmware_B 由 ARM 十六进制实用程序以相同的配置生成。 如前所述、除了具有不同的链接器命令文件(.cmd)外、它们几乎相同。

    最棒的

    Alex

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

    您是否能够在 CCS 中为 Firmware_B 加载符号以使调试更加简单? 我想、代码中的这一切已经足够早了、无论如何可能都是汇编语言(就像在 cint00中一样)、对吧?

    Firmware_A 和 Firmware_B 之间的链接器差异是否与它们在闪存中的位置相关、或者也存在一些 RAM 分配差异?

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="123578" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regarding-the-entry-address-of-a-firmware-in-cm-core/4141680#41480#41480B 固件中的符号、可以让您在 CCS 中轻松调试符号?] 我想代码中的这一切已经足够早了、无论如何可能都是汇编语言(就像在 cint00中一样)、对吧?

    我尝试多次加载 Firmware_B 的符号、但每次我加载该符号并重新启动 CM 时、代码跳转到 Firmware_B 的"main"函数、而不是跳线的"main"函数。 因此、我需要重新加载跳线(而不擦除 Firmware_A 和 Firmware_B 已放置的扇区)、从而删除 Firmware_B 的符号  

    [引用 userid="123578" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regard-exced-the-entry-address-of-a-firmware-in-cm-core/41480#41480#41480_A firmware_b 与闪存/闪存的所有位置或链接器之间存在差异、因此它们之间的部分差异与闪存/固件分配存在很大差异。]

     是的、唯一的区别是它们在闪存中的位置。 这也是我的.cmd 文件。

    /*
     * Copyright (c) 2018, 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.
     */
    
    #ifdef ADDRESS_A
    	MEMORY
    	{
    	   /* Flash sectors */
    	   CMBANK0_RESETISR : origin = 0x0020C000, length = 0x00000008 /* Boot Entry:  SECTOR3 */
    	   CMBANK0_SECTOR0  : origin = 0x00200000, length = 0x00004000
    	   CMBANK0_SECTOR1  : origin = 0x00204000, length = 0x00004000
    	   CMBANK0_SECTOR2  : origin = 0x00208000, length = 0x00004000
    	   CMBANK0_SECTOR3  : origin = 0x0020C008, length = 0x00003FF8
    	   CMBANK0_SECTOR4  : origin = 0x00210000, length = 0x00010000
    	   CMBANK0_SECTOR5  : origin = 0x00220000, length = 0x00010000
    	   CMBANK0_SECTOR6  : origin = 0x00230000, length = 0x00010000
    	   CMBANK0_SECTOR7  : origin = 0x00240000, length = 0x00010000
    	   CMBANK0_SECTOR8  : origin = 0x00250000, length = 0x00010000
    	   CMBANK0_SECTOR9  : origin = 0x00260000, length = 0x00010000
    	   CMBANK0_SECTOR10 : origin = 0x00270000, length = 0x00004000
    	   CMBANK0_SECTOR11 : origin = 0x00274000, length = 0x00004000
    	   CMBANK0_SECTOR12 : origin = 0x00278000, length = 0x00004000
    	   CMBANK0_SECTOR13 : origin = 0x0027C000, length = 0x00004000
    
    	   C1RAM            : origin = 0x1FFFC000, length = 0x00001FFF
    	   C0RAM            : origin = 0x1FFFE000, length = 0x00001FFF
    
    	   /* Part of S0, BOOT rom will use this for stack */
    	   BOOT_RSVD        : origin = 0x20000000, length = 0x00000800
    	   S0RAM            : origin = 0x20000800, length = 0x0000E4FF //0x0000D8FF  //0x0000F7FF
    	//   S0RAM            : origin = 0x20000800, length = 0x000037FF
    	//   S1RAM            : origin = 0x20004000, length = 0x00003FFF
    	//   S2RAM            : origin = 0x20008000, length = 0x00003FFF
    	//   S3RAM            : origin = 0x2000C000, length = 0x00003FFF
    	   E0RAM            : origin = 0x2000ED00, length = 0x00004FFF //0x00005BFF               //0x20010000  0x00003FFF
    
    	   CPU1TOCMMSGRAM0  : origin = 0x20080000, length = 0x00000800
    	   CPU1TOCMMSGRAM1  : origin = 0x20080800, length = 0x00000800
    	   CMTOCPU1MSGRAM0  : origin = 0x20082000, length = 0x00000800
    	   CMTOCPU1MSGRAM1  : origin = 0x20082800, length = 0x00000800
    	   CPU2TOCMMSGRAM0  : origin = 0x20084000, length = 0x00000800
    	   CPU2TOCMMSGRAM1  : origin = 0x20084800, length = 0x00000800
    	   CMTOCPU2MSGRAM0  : origin = 0x20086000, length = 0x00000800
    	   CMTOCPU2MSGRAM1  : origin = 0x20086800, length = 0x00000800
    	}
    
    	SECTIONS
    	{
    	   .resetisr        : > CMBANK0_RESETISR, ALIGN(8)
    	   .vftable         : > CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5 | CMBANK0_SECTOR6, ALIGN(8)    /* App vector table Flash */
    	   .vtable          : > S0RAM              /* App vector table RAM */
    	   .text            : >> CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5 | CMBANK0_SECTOR6, ALIGN(8)
    	   .cinit           : >  CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5 | CMBANK0_SECTOR6, ALIGN(8)
    	   .pinit           : >  CMBANK0_SECTOR3 | CMBANK0_SECTOR4, ALIGN(8)
    	   .switch          : >> CMBANK0_SECTOR3 | CMBANK0_SECTOR4, ALIGN(8)
    	   .sysmem          : > S0RAM
    	   .stack           : > C1RAM | C0RAM | S0RAM
    	   .ebss            : > C1RAM
    	   .econst          : >> CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5 | CMBANK0_SECTOR6, ALIGN(8)
    	   .esysmem         : > C1RAM
    	   .data            : > C1RAM //S0RAM
    	   .bss             : >> S0RAM | C0RAM | C1RAM // AHZ: This line was ".bss: > S0RAM" before I changed it!
    	   .const           : >> CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5 | CMBANK0_SECTOR6, ALIGN(8)
    
    	    .tcpecho_bios_heap : >> E0RAM
    
    
    		DataBufferSection : > C0RAM | C1RAM | S0RAM, ALIGN(8) // AHZ: I changed this from "C1RAM" to "C0RAM | C1RAM | S0RAM". This was becuase of json[512] array.
    
    
    	    .TI.ramfunc : {-l F2838x_CM_FlashAPI.lib} LOAD = CMBANK0_SECTOR6,
    	                           RUN = C0RAM | C1RAM,
    	                           LOAD_START(RamfuncsLoadStart),
    	                           LOAD_SIZE(RamfuncsLoadSize),
    	                           LOAD_END(RamfuncsLoadEnd),
    	                           RUN_START(RamfuncsRunStart),
    	                           RUN_SIZE(RamfuncsRunSize),
    	                           RUN_END(RamfuncsRunEnd),
    	                           ALIGN(8)
    
    	    MSGRAM_CM_TO_CPU1 : > CMTOCPU1MSGRAM0 , type=NOINIT
    	    MSGRAM_CM_TO_CPU1_1 : > CMTOCPU1MSGRAM1 , type=NOINIT
    	    MSGRAM_CM_TO_CPU2 : > CMTOCPU2MSGRAM0, type=NOINIT
    	    MSGRAM_CM_TO_CPU2_1 : > CMTOCPU2MSGRAM1, type=NOINIT
    	    MSGRAM_CPU1_TO_CM : > CPU1TOCMMSGRAM0, type=NOINIT
    	    MSGRAM_CPU2_TO_CM : > CPU2TOCMMSGRAM0, type=NOINIT
    
    	}
    
    #endif
    
    #ifdef ADDRESS_B
    	/*
    	 * Copyright (c) 2018, 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.
    	 */
    
    	MEMORY
    	{
    	   /* Flash sectors */
    	   CMBANK0_RESETISR : origin = 0x00270000, length = 0x00000008 /* Boot Entry:  SECTOR10 */
    	   CMBANK0_SECTOR0  : origin = 0x00200000, length = 0x00004000
    	   CMBANK0_SECTOR1  : origin = 0x00204000, length = 0x00004000
    	   CMBANK0_SECTOR2  : origin = 0x00208000, length = 0x00004000
    	   CMBANK0_SECTOR3  : origin = 0x0020C000, length = 0x00004000
    	   CMBANK0_SECTOR4  : origin = 0x00210000, length = 0x00010000
    	   CMBANK0_SECTOR5  : origin = 0x00220000, length = 0x00010000
    	   CMBANK0_SECTOR6  : origin = 0x00230000, length = 0x00010000
    	   CMBANK0_SECTOR7  : origin = 0x00240000, length = 0x00010000
    	   CMBANK0_SECTOR8  : origin = 0x00250000, length = 0x00010000
    	   CMBANK0_SECTOR9  : origin = 0x00260000, length = 0x00010000
    	   CMBANK0_SECTOR10 : origin = 0x00270008, length = 0x00003FF8
    	   CMBANK0_SECTOR11 : origin = 0x00274000, length = 0x00004000
    	   CMBANK0_SECTOR12 : origin = 0x00278000, length = 0x00004000
    	   CMBANK0_SECTOR13 : origin = 0x0027C000, length = 0x00004000
    
    	   C1RAM            : origin = 0x1FFFC000, length = 0x00001FFF
    	   C0RAM            : origin = 0x1FFFE000, length = 0x00001FFF
    
    	   /* Part of S0, BOOT rom will use this for stack */
    	   BOOT_RSVD        : origin = 0x20000000, length = 0x00000800
    	   S0RAM            : origin = 0x20000800, length = 0x0000E4FF //0x0000D8FF  //0x0000F7FF
    	//   S0RAM            : origin = 0x20000800, length = 0x000037FF
    	//   S1RAM            : origin = 0x20004000, length = 0x00003FFF
    	//   S2RAM            : origin = 0x20008000, length = 0x00003FFF
    	//   S3RAM            : origin = 0x2000C000, length = 0x00003FFF
    	   E0RAM            : origin = 0x2000ED00, length = 0x00004FFF //0x00005BFF               //0x20010000  0x00003FFF
    
    	   CPU1TOCMMSGRAM0  : origin = 0x20080000, length = 0x00000800
    	   CPU1TOCMMSGRAM1  : origin = 0x20080800, length = 0x00000800
    	   CMTOCPU1MSGRAM0  : origin = 0x20082000, length = 0x00000800
    	   CMTOCPU1MSGRAM1  : origin = 0x20082800, length = 0x00000800
    	   CPU2TOCMMSGRAM0  : origin = 0x20084000, length = 0x00000800
    	   CPU2TOCMMSGRAM1  : origin = 0x20084800, length = 0x00000800
    	   CMTOCPU2MSGRAM0  : origin = 0x20086000, length = 0x00000800
    	   CMTOCPU2MSGRAM1  : origin = 0x20086800, length = 0x00000800
    	}
    
    	SECTIONS
    	{
    	   .resetisr        : > CMBANK0_RESETISR, ALIGN(8)
    	   .vftable         : > CMBANK0_SECTOR7, ALIGN(8)    /* App vector table Flash */
    	   .vtable          : > S0RAM              /* App vector table RAM */
    	   .text            : >> CMBANK0_SECTOR7 | CMBANK0_SECTOR8 | CMBANK0_SECTOR9 | CMBANK0_SECTOR10, ALIGN(8)
    	   .cinit           : >  CMBANK0_SECTOR7 | CMBANK0_SECTOR8 | CMBANK0_SECTOR9 | CMBANK0_SECTOR10, ALIGN(8)
    	   .pinit           : >  CMBANK0_SECTOR7 | CMBANK0_SECTOR8, ALIGN(8)
    	   .switch          : >> CMBANK0_SECTOR7 | CMBANK0_SECTOR8, ALIGN(8)
    	   .sysmem          : > S0RAM
    	   .stack           : > C1RAM | C0RAM | S0RAM
    	   .ebss            : > C1RAM
    	   .econst          : >> CMBANK0_SECTOR7 | CMBANK0_SECTOR8 | CMBANK0_SECTOR9 | CMBANK0_SECTOR10, ALIGN(8)
    	   .esysmem         : > C1RAM
    	   .data            : > C1RAM //S0RAM
    	   .bss             : >> S0RAM | C0RAM | C1RAM // AHZ: This line was ".bss: > S0RAM" before I changed it!
    	   .const           : >> CMBANK0_SECTOR7 | CMBANK0_SECTOR8 | CMBANK0_SECTOR9 | CMBANK0_SECTOR10, ALIGN(8)
    
    	    .tcpecho_bios_heap : >> E0RAM
    
    		DataBufferSection : > C0RAM | C1RAM | S0RAM, ALIGN(8) // AHZ: I changed this from "C1RAM" to "C0RAM | C1RAM | S0RAM". This was becuase of json[512] array.
    
    		isBootFailed : > C1RAM
    
    
    	    .TI.ramfunc : {-l F2838x_CM_FlashAPI.lib} LOAD = CMBANK0_SECTOR9,
    	                           RUN = C0RAM | C1RAM,
    	                           LOAD_START(RamfuncsLoadStart),
    	                           LOAD_SIZE(RamfuncsLoadSize),
    	                           LOAD_END(RamfuncsLoadEnd),
    	                           RUN_START(RamfuncsRunStart),
    	                           RUN_SIZE(RamfuncsRunSize),
    	                           RUN_END(RamfuncsRunEnd),
    	                           ALIGN(8)
    
    	    MSGRAM_CM_TO_CPU1 : > CMTOCPU1MSGRAM0 , type=NOINIT
    	    MSGRAM_CM_TO_CPU1_1 : > CMTOCPU1MSGRAM1 , type=NOINIT
    	    MSGRAM_CM_TO_CPU2 : > CMTOCPU2MSGRAM0, type=NOINIT
    	    MSGRAM_CM_TO_CPU2_1 : > CMTOCPU2MSGRAM1, type=NOINIT
    	    MSGRAM_CPU1_TO_CM : > CPU1TOCMMSGRAM0, type=NOINIT
    	    MSGRAM_CPU2_TO_CM : > CPU2TOCMMSGRAM0, type=NOINIT
    
    	}
    #endif
    

    最棒的

    Alex

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

    我想您可以在复位后加载符号、以避免跳转到 main。 您可能能够完全关闭该功能。 请参阅 Tools -> Debugger Options -> Auto Run and Launch Options 中的 Auto Run 选项。

    惠特尼

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

    您还可以添加符号以同时加载跳线和固件符号。

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

    谢谢。 "添加符号"工作正常。 我之前尝试过"加载符号"。

    无论如何、似乎它通过了_c_int00()。 当我单击地址0x00264600 (下图)上的"汇编单步执行"按钮时、我无法再使用"汇编单步执行"按钮、因为该按钮已被隐藏。

    最棒的

    Alex

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

    不确定为什么会像这样隐藏汇编步骤按钮。 您是否能够转到"Disassembly"窗口中的_args_main 地址并在其上放置一个断点? 或者您是否也失去了放置断点的能力? _args_main 只是几条指令,然后调用 main()。

    惠特尼

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

    是的、我可以在_args_main 上放置一个断点、也可以在主函数上放置一个断点。 在这两种情况下、我都可以看到代码达到了这些地址。 我正在尝试在 main 中调用的某些函数上放置一个断点、以确定它无法到达的确切位置。 将尽快通知您。

    [引用 userid="123578" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regarding-the-entry-address-of-a-firmware-in-cm-core/4144630#4144630]引用步骤按钮为何不会被隐藏[引用]

    当我单击"Resume"按钮时、会发生这种情况。

    最棒的

    Alex

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

    我浏览了汇编代码、发现每当我尝试单击第0025004e 行上的"汇编单步执行"按钮(下图)时、我就无法再使用汇编单步执行按钮。 这个"CfgNew()函数是我在固件中使用的 NDK 中的函数。 您能不能在这里指导我解决什么问题?

    最棒的

    Alex

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

    既然您实际上已经进入了应用程序、我希望您可以像正常那样进行调试。 我怀疑在 Firmware_B 开始执行之前有一些未正确初始化的内容、我们需要对此进行跟踪。 ROV 是否正常工作? 您能否将其打开并查看 SYS/BIOS 是否已经正常启动? 是否报告了任何错误?

    我对 NDK 不是很熟悉、但看起来 CfgNew 在做一些内存分配。 如果在函数调用之后的行中放置一个断点、它是否成功返回? 它是否返回有效的指针?

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="123578" URL"支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-an 问题-关于跳转到入口地址-固件-在 cm-core/4147259#4147259#4147259'的报价是否有效?] 您能否将其打开并查看 SYS/BIOS 是否已经正常启动? 是否报告了任何错误?

    否、ROV 不工作。 我在其中唯一能看到的是以下图片、我认为这张图片不有用:

    [引用 userid="123578" URL"~支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-AN-issue-regard-king-the-entry-address-of-a-firmware-in-cm-core/4147259#4147259进行分配、但我并不熟悉新的 CNd259"。 如果在函数调用之后的行中放置一个断点、它是否成功返回? 它是否返回有效指针?

    不可以。我在下图的行0025004e 中放置了一个断点。 然后单击"Resume"按钮、我可以看到代码达到了这个地址。 但是、当我尝试在该地址上"汇编步越"时、正如我之前提到的、所有"步进"和"汇编步进"按钮都将隐藏。 因此、我无法再浏览代码。

    最棒的

    Alex

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

    另一个观察结果是、当我尝试对链接器文件应用以下更改、然后使用 ARM 十六进制实用程序生成 Firmware_A 和 Firmware_B 时、我可以看到跳线成功地从 Firmware_A 跳到 Firmware_B、因此 Firmware_B 运行良好。  但是、在这种情况下、从 Firmware_B 跳转到 Firmware_A 不起作用。

    这些更改是链接器文件中突出显示的行、如下图所示。

    正如您在这些图片中看到的、与我之前在此线程中的一篇文章中附加的链接器文件相比、大小为0x00010000的扇区的大小现在更改为0x0000FF00 (我随机选择的数字)。 第一张图片是 Firmware_A 的链接器文件、第二张图片是 Firmware_B 的链接器文件

    我不明白这里到底发生了什么,为什么这是一个问题。 但是、我的问题似乎在某种程度上与闪存扇区的大小有关。 我希望找到解决方案可能会有所帮助。

    最棒的

    Alex

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

    ROV 看起来是使用跳线符号而不是 Firmware_B、因此它不知道如何处理它。 我不确定是否有办法让它进行切换、而不是加载 Firmware_B 符号并让它们擦除跳线1。

    [~用户名="475471" URL"支持/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-AN-issue-regard-the-boosing-the-entry-address-of-mware-in-core/4150543#4150543#4150543]编号 我在下图的第0025004e 行中放置了一个断点。 然后单击"Resume"按钮、我可以看到代码到达该地址。

    我主要想知道您是否可以在00250052处放置一个断点并点击它(表示 CfgNew 返回正常)。 当步进按钮被隐藏时、它是否正在运行? 就像"恢复"按钮是否也呈灰色显示? 如果你只是运行一个位并停止它、它是否跳到了奇怪的地方、或者它仍然在运行 Firmware_B、只是运行方式不符合预期?

    [引用 userid="475471" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regard-the-booby-the-entry-address-of-mware-in-core/4150600#4150600#4150600"、确切地了解这一问题的发生原因。] 但是、我的问题似乎与闪存扇区的大小有关。

    这是一个有趣的观察结果。 如果您比较这两种配置的.map 文件、您会看到什么差异? 这可能会给我们一些提示。

    惠特尼