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.

[参考译文] 如何将`main`符号条目添加回 load_image ELF? (MSP432目标)

Guru**** 2589275 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1003313/how-can-i-add-a-main-symbol-entry-back-to-a-load_image-elf-msp432-target

通过添加一个工程(引导加载程序)作为依赖项并将其作为编译后处理步骤添加到 另 一个工程(应用程序)、我能够将引导加载程序和应用程序固件组合到单个映像中:

"${CG_TOOL_ROOT}/bin/armhex.exe" "${PROJECT_ROOT}/app-boot-combo.cmd" "${build_var:/${REF_PROJECT_2_NAME}/BuildArtifactFilePath}" "${BuildArtifactFileName}" --outfile="${BuildArtifactFileBaseName}.combo.out"

命令文件为:

--load_image
--load_image:combine_sections=false
--image
 
ROMS {
    Bootloader  : origin = 0x00000000, length = 0x00008000
    Application : origin = 0x00008000, length = 0x00038000
}

现在、我希望 CCS 在调试应用时使用该组合的"加载映像"。 我发现、如果 我不合并到`-outfile="${BuildArtiftFileBaseName}.combo.out"`、而只需使用`--outfile="${BuildArtiftFileName}"`、它会使用 组合文件覆盖原始的仅应用程序输出文件、并且 CCS 将自动刷写组合文件、这是一个很好的开始。

但是、当我这么做时 、我从调试器中得到错误:

CORTEX_M4_0: AutoRun: Target not run as the symbol "main" is not defined
CORTEX_M4_0: AutoRun: Target not run as the symbol "main" is not defined

 

我注意  到、在《ARM 汇编语言工具用户指南》(spnu118y)第12.6.2节"加载映像特性"中、文件未标记为可执行文件、并且不包含入口点"。

如何将"main"符号重新添加回、以便 CCS 调试器不会被升级?

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

    您好!

    在程序中不强制使用'main'符号。 您遇到的问题是调试器"自动运行至符号"功能、其中默认标签为"main"。 您可以在调试器选项中禁用该功能或指定新符号:

    https://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_debug-main.html#auto-run-and-launch-options

    谢谢

    Ki

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

    不幸的是、我 发现它比这更重要。 当我使用 load_image 时、我无法设置任何断点、并显示"没有代码 与 C:\…\myfile.cpp 关联、任何已加载符号中的 X 行"

    因此、我认为我所需要的不仅仅是"main"、还包括至少来自我的应用程序映像的所有符号、以将其信息复制到加载映像中。 我该怎么做?

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

    您似乎缺少了一些调试符号。 根据您的原始帖子、您似乎合并了两个可执行文件。 我不太熟悉您使用的技术、但我假设两个*。out 文件中的符号都应位于一个组合文件中? 如果您打开 模块视图、您是否看到所有预期符号?