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.

[参考译文] TMS320F28386S:创建可在 RAM 中运行的闪存映像

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1191625/tms320f28386s-creating-a-flash-image-that-can-be-run-in-ram

器件型号:TMS320F28386S

我有一个独立的程序、我想存储在闪存中、但在 RAM 中运行、我对一些细节一无所知。 我一直在研究出色的"TMS320C6000汇编语言工具"
v8.3.x SPRUI03E"文档、但我仍有一些问题。 到目前为止、我似乎需要在链接器文件中单独加载和运行地址。 但有几个问题。

我应该构建一个基于 RAM 的项目并将输出文件存储在闪存中吗?

输出文件是否具有 load_start()、run_start()和 size()运算符所需的信息?

如何识别 或放置该代码的句柄、以便我可以在段中识别该代码、从而按照在基于 RAM 的工程中处理.text 和.cinit 的方式将其定向到 RAM?

要运行代码、是否会使用分支语句或函数指针?

谢谢、

John

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

    尊敬的 John:

    这个基于 RAM 的项目是闪存内核吗? 输出文件的链接器命令文件中应包含 load_start()、run_start()和 size()运算符以用于生成该文件。  

    谢谢、

    查尔斯

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

    感谢您的回答。

    我只在基于闪存的工程中找到这些运算符。 这是一个基于 RAM 的项目输出文件、我希望将其存储在基于闪存的项目中。 也许我还不知道如何应用它们。 当我弄清楚如何在段中指定输出文件时、我可能会得到一个句柄。

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

    您好!

    如果 您使用基于 RAM 的链接器 cmd、程序被加载到 RAM 中、并且将在上电复位时被擦除。  加载/运行是一种方法。 这确保了程序在闪存中、被复制到 RAM 中并从 RAM 运行。

    如果您只想从 RAM 中运行特定函数、可以使用#pragma CODE_SECTION 将这些函数分配给.TI.ramfunc.arefice、

    Veena

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

    您好、Veena、感谢您的回复。

    我可能没有很好地表达自己或正确地提出我的问题。 因此、请多多包涵、我将解释我们的目标。

    我们有在 CPU1和 CM 上运行的现有应用、我们希望使用串行闪存编程器来更新它们。 我们遇到了一个小问题、因为 SCIA 引导例程指定了特定的 TX/RX 引脚组合、我们没有使用这些对、他们不想制作新的电路板。

    我提出了3种潜在的解决方案。

    (1)修改 SCI_Boot()和串行闪存编程器希望与之通信的支持函数以使用我们拥有的 TX/RX 对。 然后将其构建为基于 RAM 的独立应用程序、并在我的现有应用程序中添加生成的输出文件、以便在需要时调用。

    (2)与1)相似、但不是创建单独的项目和输出文件、而是将 SCI_Boot 代码添加到我的项目中、但将此部分存储在闪存中并在需要时运行在 RAM 中。 我认为加载/运行在这里会起作用。 这种选择的缺点是、如果更新失败、则此代码的闪存副本或将其复制到 RAM 的代码可能会损坏。

    (3)如果(1)和(2)不起作用、请将闪存内核置于闪存中并在 RAM 中运行。 由于来回切换 CPU1内核以进行 CM 更新、这将更加复杂。

    问题:

    1 - 如果可以执行上述(1)操作、如何在具有不同加载和运行位置的链接器 cmd 文件的段部分中指定输出文件?

    2 - 使用加载/运行时、如何选择运行位置? 由于基于闪存的主应用程序在复位前不需要再运行、是否可以将其复制到 RAM 的开头?

    3 -我昨天刚刚阅读了有关加载/运行的内容、但尚未使用。 我的应用是否需要使用 memcpy()将代码从闪存加载位置复制到 RAM 运行位置? 复制后、应该通过函数指针调用它、还是使用某种类型的分支?

    我很遗憾这是如此的糟糕、但我想为我的问题提供一个良好的背景。

    谢谢、

    John

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

    尊敬的 John:

    让我将您的疑问转发给闪存内核专家。

    此致、

    Veena

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

    谢谢 Veena。  它正在向下到达线路、因此我期待着再次听到。

    John

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

    尊敬的 John:

    要回答您的问题:

    1) 1) .out 文件不是.text 段的替代或替代文件。  

    2) 2)用户将运行位置分配 给任何可用的存储器位置 (例如 RAMLS03)。 复位后、可将其复制到 RAM。

    3) 3)是的、您需要将代码从闪存存储器复制到 RAM。 是应该使用 memcpy 函数来适应这种情况。

    memcpy 函数上的相关线程: e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/197807/memcopy-vs-memcpy

    将数据从闪存复制到 RAM 的相关线程:e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/878674/faq-flash---how-to-modify-an-application-from-ram-configuration-to-flash-configuration

    查尔斯

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

    感谢您发帖。

    关于1):-是否有办法取出可在 cmd 文件的 SECTIONS 部分中使用的文件内容? 这是我不断回到的根本问题。 我应该改用 obj 文件吗?

    感谢您的在线程。

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

    "取出文件内容"是否意味着取出与 cmd 文件其余部分不符的部分? 您只需将 这些段分配到内存中、或将其注释掉即可。

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

    OUT 文件是来自另一个完全独立的基于 RAM 的项目的输出、该项目模拟 SCI_Boot、我在这里将其命名为 SCI。 请从开始查看我的上述帖子

    [引用 userid="152282" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1191625/tms320f28386s-creating-a-flash-image-that-can-be-run-in-ram/4492625 #4492625"]您好,Veena,感谢您的回复。

    尤其是开头的句子

    [引用 userid="152282" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1191625/tms320f28386s-creating-a-flash-image-that-can-be-run-in-ram/4492625 #4492625"](1)修改 SCI_Boot ()和支持函数[/quot]

    我想获取这个完全独立的 SCI 项目(基于 RAM)生成的输出文件、并将其保存在我的大型应用程序中的闪存中。 大型工程基于闪存。 我希望大型项目能够从闪存中提取我的 SCI 应用程序、将其加载到 RAM 中并运行它。 我认为输出文件具有所需的内容。

    谢谢、

    John

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

    谢谢、这使它更清晰。 John 您应该使用与您尝试使用的.out 文件关联的目标文件。 obj 文件可被识别为输出段分配映射的一部分。