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.

[参考译文] CODECOMPOSER:如何使用 GEL 加载多个图像?

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1463646/codecomposer-how-to-load-multiple-images-with-gel

器件型号:CODECOMPOSER
主题中讨论的其他器件:MSPM0G3519UNIFLASH

工具与软件:

您好!

CCS 20.0.1和 MSPM0G3519

这与 https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1461153/codecomposer-loading-program-and-symbols-from-different-files 相关

假设我有 Bank0、Bank1和数据闪存的三个映像(适用于 MSPM0G3519)。

在连续调用中使用 GEL_Load()会擦除之前加载的数据- Bank0程序被擦除、Bank1将加载新数据。 当函数超出映像文件中的数据时、这是非常意外的行为。

使用 GEL_LoadMemory()无限期挂起。

如何加载 特定存储器范围的多个映像文件?

我正在附加图像文件。

此致、

尤金

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

    不确定这有什么帮助。

    当我将 UNIFLASH 与三个映像一起使用并同时对它们进行编程时、它会起作用。

    如果我有选择地使用 UNIFLASH 对其中任何一个进行编程,那么 问题似乎是相同的。 看起来即使图像数据只属于有限的地址范围、也会发生某种形式的批量擦除。

    尤金

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

    尊敬的 Eugene:

    默认情况下、 在闪存设置中、将对器件执行批量擦除。

    若要加载单独的映像、您需要进入闪存设置并选择"Do not erase flash memory"选项来禁用擦除功能

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

    亨利

    感谢您的答复。

    两个问题:

    1."不擦除闪存"有什么作用? 它是否仅从映像中擦除扇区、或者根本不擦除扇区? AFIAG、要对闪存重新编程、必须先将其擦除。

    2. Code Composer GEL 函数如何?

    此致、

    尤金

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

    尊敬的 Eugene:

    执行初始擦除后、您可以对其他映像进行编程、因此对于第一个映像、您可以执行 Erase Main 和 Data、然后后续程序选择 Do Not Erase Flash Memory。 您需要在写入前执行擦除、但如果擦除所有内容并仅对特定段进行编程、则无需每次都执行擦除。

    或者、您可以按范围擦除主存储器扇区、并在组0执行第一个映像、在组1执行第二个映像、然后在"仅擦除数据存储器"选项中使用数据库映像。

    ---

    将其发送给我们的 Code Composer 团队以处理 GEL 函数、但摘自我在关于 GEL 文件的 Code Composer Studio 用户指南中看到的内容。

    GEL_MemoryLoad(startAddress、page、length、"fileName"、[bitsize]、 [swap]) 将是我要使用的函数。

    此致、
    Luke

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

    尊敬的 Luke:

    感谢您发送编修。 然而、国际卫生组织在这方面有相当多的逻辑和行为问题。  我假设这些工具有助于开发人员、而不是使他们的生活变得复杂。  请考虑您的建议在我开发应用程序的过程中多次执行。

    我将在这里详细说明我的想法,希望它会在某种程度上有所帮助,并可能通过 UNIFLASH 解决:

    1. 批量擦除应该是一个选项、而不是编程工具的默认假定行为。 我们通常会擦除整个扇区或地址范围。 这是用户请求、而不是工具假设。
    2. 只应擦除输入文件中的地址范围并对其重新编程。 如果数据由于输入正常溢出到整个闪存扇区、这是用户错误。 该工具不应擦除超过整个闪存扇区的整个内容。
    3. 擦除 NONMAIN 存储器非常危险。 此处的警告(甚至与选项不一致)是不够的。 UNIFLASH 应该让擦除 NONMAIN 存储器变得困难、至少将其隐藏在几层选项后面、并带有警告对话框和备份它的可能性? 恢复路径也必须存在。
    4. GEL_MemoryLoad ()似乎不能与 CCS 20.0.1和 MSPM0G3519一同使用。 它只是不执行任何操作(GEL 可能会崩溃、但不会加载?)

    此致、

    尤金

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="636987" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1463646/codecomposer-how-to-load-multiple-images-with-gel/5617186 #5617186"]GEL_MemoryLoad ()似乎不能与 CCS 20.0.1和 MSPM0G3519一同使用。 它只是不执行任何操作(GEL 可能崩溃、但无法加载?)[/QUOT]

    您加载的文件格式是什么? 十六进制?

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

    由 tiarmhex 生成的 S37记录。

    如果这是问题的罪魁祸首、我希望在 GEL 输出窗口中看到有关不支持的格式。

    编辑:我尝试了 tiarmhex 的 bin 文件、但都不起作用。

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

    请注意、GEL_MemoryLoad()将无法写入闪存。 如果尝试将二进制文件加载到闪存、则需要使用 GEL_LoadBin。 这将使用加载的调试器程序、然后可以调用器件的闪存编程器。  

    使用程序加载程序时、它将使用设置的闪存设置、例如上面讨论的擦除设置。

    关于与闪存擦除选项相关的另外三个注释、我将让器件专家(Luke、Henry)来回答这些注释。

    谢谢

    Ki

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

    尊敬的 Ki:

    我们回到了原来的问题。  

    "如  GEL_Load 、此函数将程序代码和数据下载到目标上 指定的地址读取 UCD 器件 . 但是、调试器不会尝试加载符号信息。"

    GEL_Load...()函数的质量似乎 与上述描述相矛盾 GEL_LoadProgramOnly  CCS 帮助的其他人。 根据描述、这些函数支持 S 记录。

    UNIFLASH 具有上述类似问题。 批量擦除应是一个选项、而不是默认行为。

    我需要有选择性地将内容加载到闪存中、但不需要批量擦除。 我如何在 CCS 中使用 GEL 函数执行此操作。

    按照 Luke 的建议,在工具之间进行开发切换并重新配置它们会造成噩梦。

    此致。

    尤金

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

    尊敬的 Eugene:

    让我为您提供有关如何执行按地址擦除内存模式的代码

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

    尊敬的 Eugene:

    对延迟响应深表歉意。

    所执行的擦除由位于 C:\ti\路径中的 mspm0闪存属性 xml 中选择的擦除方法确定 \ccs\ccs_base\DebugServer\propertyDB\MSPM0_FlashProperties.xml

    在 FlashEraseSelection 属性 id 下的.xml 内、有一个 DefaultValue 字段、您可以从该字段中配置 闪存加载程序将使用的擦除方法。

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

    您好、Henry:

    感谢您指向配置文件。 遗憾的是、这没有帮助。


    TMS470RAX
    擦除方法
    选择列表

    仅擦除主内存
    仅擦除数据存储器
    擦除主存储器和数据存储器
    擦除主存储器和 NONMAIN 存储器(请参阅上文的警告)
    擦除 MAIN、DATA 和 NONMAIN 存储器(请参阅上文的警告)
    仅擦除 MAIN 和 NONMAIN 必要扇区(请参阅上文警告)
    按范围擦除主存储器扇区(请在下方指定)
    请勿擦除闪存

    仅擦除主内存

    我没有看到从输入文件中擦除扇区的选项、或者它不明显。

    我仍说明在 UNIFLASH 中擦除 NONMAIN 存储器非常危险。

    问题不是默认选择(我会问为什么我需要修改 CCS 安装?) 但是、对于任何下载都会执行批量擦除或不擦除一次这一事实。 这并非最佳。 批量擦除是用户仅在需要时选择的单个操作。 在任何其他情况下、工具只能擦除输入文件中的地址范围并对其重新编程。

    此致。

    尤金

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

    尊敬的 Eugene:

    通常、 如果您希望  通过 GUI 使用 Uniflash、用户可以直接从 GUI 配置擦除选项。

    纯粹通过 GEL 文件来执行此操作不是最简单的、因为它通常会从 CCS 的工程中的.launch 文件中抓取它。 我目前在查看 Uniflash 中的配置、但启动会话时通常会遇到  .uniflash 格式的文件、用于保存所有设置。

    一个可以完成的操作是、因为 看起来你的设置中的所有内容都是从一个 GEL 文件中执行的、将使用 GEL API 来修改 调试属性。  可以使用与 DebugProperty 相关的 GEL API 修改或读取闪存属性.xml、因此、诸如 GEL_SetBoolDebugProperty 或 Get 版本的均可根据需要修改这些值。  

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

    在您也希望修改擦除范围的情况下、您也可以利用此 API 来修改扇区操作的起始地址和结束地址、并将默认擦除属性设置为扇区擦除。

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

    您好、Henry:

    该 API 可以提供权变措施。 谢谢你。 我会尝试它。

    但是、我仍然不明白为什么输入文件的这种范围行为不是工具中的默认行为或可设置行为、以及为什么用户必须解决所有这些复杂问题?

    此致、

    尤金

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

    关于 GEL 的重点是 API 行为与对其的描述不同。

    "如  GEL_Load 、此函数将程序代码和数据下载到目标上  指定的地址读取 UCD 器件 . 但是、调试器不会尝试加载符号信息。"

    这似乎是一个需要修复的错误。

    尤金

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我需要选择性地将内容加载到闪存中、但无需批量擦除。 如何在 CCS 中使用 GEL 函数执行此操作。[/QUOT]

    请注意、您可以 在初始化脚本中使用 CCS Scripting Settings API 来执行此操作。 这使用户能够从脚本修改调试器选项(包括闪存选项)。

    settings.getDetailedSettings() API 将返回可用选项的详细列表、您可以使用 settings.set API 设置这些选项。 参阅 /ccs/scripting/docs/interfaces/Settings.html、了解更多详细信息。

    谢谢

    Ki

      

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

    尊敬的 Ki:

    为什么这么简单才这么复杂呢? 为什么 GEL_Load()在框外无法正常工作、因为它的说明状态是这样的?

    这些是基本行为、适用于任何闪存/调试工具。 为什么 CCS 选择不这样做?

    尤金

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么 GEL_Load ()无法按照其说明的规定开箱即用?

    我不确定什么不起作用。 GEL_Load 模仿 IDE 的 Load Program 功能。 许多 CCS 版本的行为都是相同的。

    Unknown 说:
    ]在连续调用中使用 GEL_Load ()擦除先前加载的数据-擦除 Bank0程序、加载新数据。 当函数超出映像文件中的数据时、这种行为是非常意外的。

    这是预期行为、因为 GEL_Load 正在调用 CCS 程序加载程序。 CCS 程序加载程序在加载到闪存时将始终遵守闪存选项。

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

    尊敬的 Ki:

    我想程序加载程序也会有问题。 批量擦除不是任何加载程序的默认行为。 它还不能用于众多专业工具。

    "如  GEL_Load 、此函数将程序代码和数据下载到目标上  指定的地址读取 UCD 器件 . 但是、调试器不会尝试加载符号信息。"

    这是对加载器的逻辑描述...但它不是它所做的。 它通过批量擦除损坏其它地址。

    为什么我们围绕这个圆周前进? 您不同意加载程序函数是否存在问题、并且 CCS/UNIFLASH 不会修复这些问题?

    此致、

    尤金

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

    尊敬的 Eugene:

    我认为这里的区别在于对函数用途本身的理解。 我们目前没有一种简单的方法可以直接加载文件和解析该文件来擦除程序中列出的特定部分、然后对器件进行闪存。 这将要求我们支持编程的每种输出格式有几个不同的句法分析器、目的是提取存储器地址并仅擦除相关段、然后调用当前加载函数。

    现在、您必须创建一个批处理脚本(或类似脚本)、通过地址字段调用存储器擦除或解析您的文件、然后输入参数。  我们提供了 Uniflash 命令行函数、您可以 在批处理文件中使用这些函数来执行相关命令。

    与此同时、我会加载一个 TT、将其放入备货中、因为这是一个很好的 Qol 项目、可以更轻松地刷写设备。  

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

    尊敬的 Luke:

    是的、应该以某种方式解决这一问题。 仅供参考、如果我脱离 CCS 和 UNIFLASH、这就是大多数其他工具的工作方式。

    此致、

    尤金

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

    您好、Henry:

    执行的擦除操作由位于 C:\ti\路径下的 mspm0闪存属性 xml 中选择的擦除方法确定 \ccs\ccs_base\DebugServer\propertyDB\MSPM0_FlashProperties.xml

    我已经能够将此方法与 GEL 函数一起用于 main 存储器。 不过、数据存储器似乎只能整体擦除? 是否可以使用 GEL 函数为数据存储器选择擦除地址范围?

    此致、

    尤金

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

    尊敬的 Eugene:

    很抱歉 这个问题以及迟到的回复。  在我这边做了一些测试 、 闪存驱动器的当前状态将在 数据库上引发扇区擦除错误。 我只是在我这边更新了它并把它附下来供你们在这边使用。 您可以 备份原始文件并  将其粘贴到此路径。 C:\ti\ \ccs\ccs_base\DebugServer\bin

    e2e.ti.com/.../FlashMSPM0.dll

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

    您好、Henry:

    我刚刚在我这边更新了它并附上了它供您在这边使用。 您可以 备份原始文件并  将其粘贴到此路径。 C:\ti\ \ccs\ccs_base\DebugServer\bin

    这似乎对 ME-NO 错误消息和数据闪存已编程。 该更新是否应该在下一个版本的 CCS 中进行?

    但是、选择列表存在问题。  "按范围擦除主存储器扇区(请在下面指定)" 现在是不正确的、可能包含"data"和适用于 UINIFLASH。

    此致、

    尤金

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

    尊敬的 Eugene:

    是的、此版本将在下一版本的 CCS 中发布。

    我还会牢记您的建议、并 将其添加到将来的版本中。

    谢谢!

    Henry Nguyen