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.
工具与软件:
如何更改目标的 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
在 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
在生产环境中、我们在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处的闪存、引导加载程序代码应该仍然存在。