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:更改调试配置中的加载和起始地址

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1450347/msp432e401y-change-load-and-start-address-in-debug-configuration

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

工具与软件:

如何更改目标的 CCS 调试配置、以便从特定闪存地址(在本例中为 0x00040000)加载并执行程序?

cmd 和 cfg 文件中的相应设置已经完成。

谢谢、 此致
Peter

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

    尊敬的 Peter:

     请参阅以下示例。  

    1.点击"管理配置"添加新配置。 我将其命名为 My_Run_Address_At_ 0x40000

    2.创建 My_Run_Address_At_ 0 x 40000配置后、单击"Set Active"(设置为活动)使其成为活动配置。  

    3、现在您可以添加任何特定于此配置的内容(例如、文件、项目设置、特定的链接器 cmd)。  

    4.假设您有两个名为 foo1.c 和 foo2.c 的文件 您可以使 foo1.c 用于调试配置、但不能创建 foo2.c 在这种情况下、在 Debug 配置中、您应从构建中排除 foo2.c。 相反、您会在  My_Run_Address_At_ 0 x 40000配置中排除 foo1.c。  

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

    尊敬的 Charles:

    感谢您的快速回复。 但是、我的问题不是关于如何创建其他编译配置、而是关于如何在调试配置中设置不同的起始地址。

    如果您已进行设置
    #define APP_BASE 0x00040000
    分别在 cmd 文件中键入
    m3Hwi.resetVectorAddress = 0x00040000;
    在 cfg 文件中、如何在按下 DEBUG 按钮时将二进制文件上传到0x00040000、而无需编译、通过 UniFlash 加载并随后通过调试器手动连接。

    我已经阅读"Debug Configuration"对话框中的某个位置应该有一个选项用于指定"Load Symbols and Program"和"Set PC to entry point"的地址、但我找不到这样的选项。

    总之、在工程的调试配置中、我可以在哪里设置应用的启动矢量地址?

    此致
    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="413639" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1450347/msp432e401y-change-load-and-start-address-in-debug-configuration/5562975 #5562975"]

    在 cfg 文件中、如何在按下 DEBUG 按钮时将二进制文件上传到0x00040000、而无需编译、通过 UniFlash 加载并随后通过调试器手动连接。

    我已经阅读"Debug Configuration"对话框中的某个位置应该有一个选项用于指定"Load Symbols and Program"和"Set PC to entry point"的地址、但我找不到这样的选项。

    [报价]

    您是否认为二进制映像已通过其他方式构建(例如使用 Uniflash)、并且您已经将.out 文件加载到闪存中? 如果映像从0x40000开始、则编程器(例如使用 Uniflash)将在0x40000开始时将映像加载至闪存。 如果稍后打开 CCS、则只需加载符号并指定要加载的.out 文件。 CCS 将不会重新刷新符号、而只会刷新符号。 不确定这是否是您的问题。 .out 文件具有从0x40000开始的所有符号信息和注释。  

    如果您编写了一个以0x40000开头的程序、但只想单击"Debug"(调试)按钮、则将进行编译、连接至目标、加载程序。 同样、如果过去已经对二进制映像进行编程、您不想点击"Debug"按钮、而只想加载符号、可以在 Run 下执行"Load Symbols"。 当然、我假设您已经手动连接到目标。  

    请记住、二进制文件不能仅从0x40000开始、而在0x0处没有任何内容。 您必须至少在0x0和0x4处定义了一个栈指针和复位向量。 复位后、CPU 将从0x0开始。 如果0x0处没有任何内容、程序将崩溃。  

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

    尊敬的 Charles:

    在生产环境中、我们在0x0处有一个引导加载程序、它将在 0x00040000处加载实际固件。

    对于开发、我们通常将调试固件加载到0x0、以便能够直接在 CCS 中进行上传和执行、而版本目标器件使用 0x00040000作为开始向量。

    现在我们遇到这样的情况:固件在 0x00040000上运行时、才会出现问题、这就是我们从该位置调试固件的原因。 我希望有一种方法可以告诉调试器将固件加载到所需的地址、并自动设置跳转至程序启动的位置。

    如果无法实现、如果我通过 UniFlash 将引导加载程序上传到0x0、如何告诉 CCS 调试器将其 bin 上传到0x00040000 、但不要覆盖下面的内存区域?

    此致
    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="413639" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1450347/msp432e401y-change-load-and-start-address-in-debug-configuration/5564361 #5564361"]

    在生产环境中、我们在0x0处有一个引导加载程序、它将在 0x00040000处加载实际固件。

    [报价]

    好的。

    如果无法做到这一点、如果我通过 UniFlash 将引导加载程序上载至0x0、如何告诉 CCS 调试器将自己的 bin 上载到 0x00040000、并且不覆盖下面的内存区域?

    请参阅以下示例、其中我使用 JTAG 同时从0x0开始加载 boot_serial.bin (这是引导加载程序)并从0x4000开始加载 boot_demo1.bin (这是应用固件)。 加载两个二进制 文件后、您可以转到 CCS 并只需执行"Load Symbols"、在这里、您可以指定包含符号的 boot_demo1.out (请注意、这是.out 文件)。 CCS 将不会重新刷新、而只加载符号。  

    所有这些操作都可以在 CCS 内实现。

    1.转到"Tools->On-Chip Flash"(工具->片上闪存)并为"Erase Method"(擦除方法)选择"Necessary Pages Only"(仅必要页面)。 这样、当您从0x40000开始加载固件时、CCS 将不会擦除引导加载程序。  

    2.首先加载您的引导加载程序(例如 boot_serial.out)。 在这里、我加载.out。  刷写后、您将看到引导加载程序从0x0开始。  

    3.接下来加载您的固件(例如 boot_demo1.out)。 再说一次、包含符号的是.out。 刷写后、它不会擦除0x0处的引导加载程序。 您可以查看0x0处的闪存、引导加载程序代码应该仍然存在。