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.

[参考译文] MSPM0L1228:将预编译文件复制到工程中

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1469698/mspm0l1228-copy-prebuilt-file-into-project

器件型号:MSPM0L1228

工具与软件:

您好!

我正在尝试使用链接器将预编译的.bin 文件复制到输出文件中的特定位置。
目标是将之前创建的引导加载程序放置在存储器的0x0000处、以便两个项目都保存在一个十六进制文件中

我在链接器命令文件中创建了一个新段、并尝试将 bootloader.bin 加载到定义的存储器区域中。

SECTIONS
{
	.my_boot: type = NOINIT {../Bootloader/bootloader.bin } > BOOT

但我得到了误差

说明   资源   路径   位置   类型
#10004无法识别的文件: "..cms"/Bootloader/bootloader.bin   linker.cmd   /firmware-ti   line 68   C/C++问题

可能我必须以二进制格式指定我的文件。 我不知道该怎么说。 我在 TI ARM CLANG 用户指南中找不到相关内容。

我使用 CCS 12.8.1、 链接器在 bootloader.bin 中找到、否则出现其它错误。

我希望您清楚地知道我想做什么、您可以帮我解决。

提前感谢

此致、
Timo

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

    尊敬的 Timo:

    以前、我只是通过将第二个二进制文件所需的存储器区域留空、然后在对初始工程进行编程后分别加载其他二进制文件来完成此操作。 当然、这是很烦人的额外几步。

    我认为您遇到此问题是因为链接器不支持使用 RAW .bin 文件。 我建议将输出构建为.o 文件、也可以是.hex 文件。 如果能够将其构建为.o 文件、则应该能够使用类似的链接器命令:

    SECTIONS{
        .myPrebuiltObjectFile : {
            objectFile.o (.data)
            } > BOOT
    }

    您能否试一下、并告诉我这是否可以解决问题? 我的要点是、我认为使用.bin 总是会导致这里出现问题。

    另一种选择是将输出文件转换为 c 数组、将其包含在您的项目中、然后将其放置在所需的内存位置。

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

    尊敬的 Dylan:

    感谢您的回答。

    遗憾的是、手动加载两个二进制文件对我来说不是一个好选项。

    我的引导加载程序是一个单独的项目、它是为自己编译的。 因此、我只能获得一个作为可执行文件的已完成文件、如.bin、.hex 或.out。 正如我所知、一个完整项目是不可能获得一个.o 的。 您能告诉我如何操作吗?

    当我尝试.hex 时、我遇到错误
    说明   资源   路径   位置   类型
    #10034-D 非法文件类型: "..linker.cmd"/Bootloader/bootloader.hex 必须指定目标文件或归档文件   linker.cmd   /firmware-ti   line 68   C/C++问题

    我认为必须有一种方法可以在 GCC 等链接器文件中加载引导加载程序。 您确定 TI Clang 没有.bin 或.hex 的选项吗?
    我已经考虑过使用 C 阵列的可能性、如果没有其他方法可以尝试的话。

    此致、
    Timo

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

    CCS 中的默认编译过程应该会为您提供一个奇异.o 文件->此文件位于工程的调试目录中、名为[PROJECT_NAME].O. 除非您在工程属性中禁用了此功能、否则我希望这些功能仍然存在。

    我将 邀请我们软件工具组织的一个成员、看看他们是否能在这里提供更有用的评论。

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

    尊敬的 Dylan:

    我没有得到[PROJECT_NAME].O. 每个源文件只需一个.o。 我会说我没有更改"Properties"中的任何内容。 请告诉我可以在哪里启用它。
    我得到的是.out、正如我所说的。 但这将强制出现误差
    说明   资源   路径   位置   类型
    #10417文件"..CCS40"/Bootloader/bootloader.out 不能是静态或动态链接   /firmware-ti      C/C++问题

    如果有来自软件工具的人支持的话、那很好。

    此致、
    Timo

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

    尊敬的 Timo:

    请给我们一点时间。

    此致、
    Luke

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

    谢谢 Luke。

    尊敬的 Timo:

    我刚才谈到的是我们一个软件工具组织的成员。 TIClang 当前不提供使用链接器输入包含预编译二进制文件的方法。 因此、您可以通过两种方法将这些代码编程到器件中:

    1) 1)您可以合并 CCS 项目、将它们编译在一起、并在链接器中指定它们的位置、以便将它们一步内置、一步编程、然后放置在您需要的位置。 缺点是您需要调整源。

    2) 2)您可以使用一个应用代码对器件进行编程、然后手动刷写第二个应用代码、如前所述。 您不需要重写任何项目、但您确实需要执行额外的步骤、即手动刷写第二个文件。 执行此操作的一种方法在中进行了说明  

    MSPM0启动映像管理器(BIM)用户指南

    如果您对此还有其他问题、请告诉我。