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.

[参考译文] LP-AM263P:对加载和运行地址的 CCS 调试器处理

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1498042/lp-am263p-ccs-debugger-treatment-of-load-and-run-adresses

器件型号:LP-AM263P
Thread 中讨论的其他器件:UNIFLASH

工具/软件:

大家好、TI 专家。

遇到有关 CCS 中加载和运行地址设置的一些问题。

使用当前 TI 工具链时、当生成.appimage/.MCELF 时、物理/加载地址将被忽略、段为 a)由 RAM/RUN 地址排序、段为 b)合并为单个数据"blob"、然后将该数据刷写到特定的闪存偏移量。

为了给出问题背后的一些目的/目的、实际上我们希望控制某些段最终在.mcelf 中、随后在闪存中的何处、尤其是校准段。 这样才能对各个段进行校验和/哈希处理。 理想情况下、这将通过控制每个段的加载地址来完成。

当我尝试在 CCS 中为段配置基于闪存的加载地址时、CCS 调试器似乎会将这些地址解释为 RAM/RUN 地址、从而导致 CCS 调试器无法工作。

例如、如果我为矢量表使用默认加载/运行地址(0x0到 TCMA 中)、CCS 调试器可以根据需要对该段进行编程:

链接器:

运行 CCS 调试器:

如果我将加载地址更新为基于闪存:

运行 CCS 调试器:

可见、对于选项2 (即将加载地址设置为基于闪存)、CCS 调试器现在无法再对 Vectors 段(PT_LOAD[0])进行编程。 查看存储器映射:

可能目前该段未再放入 R5SS0_CORE0_TCMA_RAM 中。

因此、在我看来、CCS 调试器使用段加载地址作为需要运行段的地址。 这似乎违反直觉、因为这基本上使所有段的"加载地址"选项无用、因为 CCS 调试器无法正常工作。

此假设是否正确? CCS 调试器没有使用 RAM/运行地址进行调试吗? 是否有办法使 CCS 调试器使用运行地址而不是加载地址进行调试?

谢谢、

RENs

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid="640733" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1498042/lp-am263p-ccs-debugger-treatment-of-load-and-run-adresses

    因此、在我看来、CCS 调试器使用段加载地址作为需要运行段的地址。 这似乎违反直觉、因为这基本上使所有段的"加载地址"选项无用、因为 CCS 调试器无法正常工作。

    此假设是否正确? CCS 调试器没有使用 RAM/运行地址进行调试吗? 是否有办法使 CCS 调试器使用运行地址而不是加载地址进行调试?

    [/报价]

    CCS 调试器将使用调试符号中的任何运行地址。 因此、假设使用正确的加载/运行地址正确编译可执行文件、并且从加载和运行地址复制了适用的代码、那么调试器应该能够正确调试从运行地址执行的代码。

    [引述 userid="640733" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1498042/lp-am263p-ccs-debugger-treatment-of-load-and-run-adresses

    运行 CCS 调试器:

    [/报价]

    以下屏幕截图中的错误是 刷写失败。 闪存算法执行失败。 当将加载存储器更改为闪存时(即使运行地址也设置为相同)、也会获得此信息。 我将提请器件专家注意此主题、以供进一步评论。

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

    AM263Px MCU+ SDK 中所述:启用 XIP 或就地执行、应用入口点、中断向量和高达的初始代码 main() 仍应从 RAM 执行。 随后 main() 代码可以从闪存执行。 我看到您尝试将 R5F_VES 放入闪存而不是 RAM 中。 只需将.text 和.rodata 存储到闪存中。

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

    感谢您的评论。 也许我没有很清楚地说明这个例子。 我仅使用了 R5F_VECS 部分、作为加载地址发生变化时 CCS 调试器行为变化的示例、我知道 XIP 有其他要求。

    由于我们希望控制段在生成的 mcelf 中以及随后在闪存中的放置、理想情况下每个段的加载地址将基于闪存(0x6xxx)、因此我可以在将段写入 mcelf 之前使用物理地址对段进行排序。 当然、每个段都仍然具有其基于 RAM 的运行地址(0x7xxx)。

    然而、据我所知、这种方法的问题在于、CCS 调试器也利用每个段的加载地址来进行调试会话、而不是使用运行地址-就正常调试会话而言、我们希望将程序加载到 RAM 中。 如果我为加载地址设置基于闪存的地址、CCS 调试器将无法加载到该地址、因为它不是 RAM 中的一个位置。 这听起来是否正确?

    我原本希望 CCS 调试器可能有一种权变措施、在这种  情况下、我们可以强制调试器始终对每个段使用运行地址来加载段数据、而不是加载地址。 这意味着您可以指定不同的加载/运行地址、调试器仍然可以工作。 这可能是一厢情愿的想法。 从它的声音,这是不可能的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是、据我了解、此方法的问题是 CCS 调试器也使用每段的加载地址进行调试会话、而不是使用运行地址、对于正常的调试会话、我们希望将程序加载到 RAM 中。 如果我为加载地址设置基于闪存的地址、CCS 调试器将无法加载到该地址、因为它不是 RAM 中的一个位置。 这听起来是否正确?

    不可以、假设可执行文件的调试符号中包含有关加载地址和运行地址的正确信息、则不应出现这种情况。 CCS 调试器应解析调试符号、并使用加载地址作为要加载的地址、并使用符号中的运行地址进行调试。  

    这意味着您可以指定不同的加载/运行地址、调试器仍然可以工作。 这可能是一厢情愿的想法。 从它的声音,这是不可能的?

    这应该已经起作用-再次假设上述条件。

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

    好的、感谢您的澄清-非常感谢!

    在这种情况下、正如您所说的当前问题、我发现了闪光器无法工作的原因。

    跟进问题:

    1:CCS 调试器的段格式是否有任何限制? 需要注意的是 a)最大段大小或 b)对齐-是否所有段都需要与闪存器件页面对齐(在本例中为256字节)

    2:大概以下可执行文件(取决于电路板类型)负责将段加载到闪存/RAM 存储器中。 是否有更多关于这些来源的信息? 了解 am263px_cc_flasher.out、am263px_lpx_flasher.out  和 am263px_sip_flasher.out 之间的设置差异会非常有用。 AFAIK、闪存驱动器设置在 cc 和 LP 之间应该非常相似

    3:从该过程中的哪个位置 调用 am263px_cc_flasher.out? 浏览所有.gel 文件、我们似乎传递了一般 AM263Px.gel 设置中的大多数初始化步骤、但我很难找到一个调用此加载器的 GEL 函数。 或者这是在其他地方定义的吗?

    感谢您对这一个的耐心..

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

    这些是我将推迟到设备专家讨论的问题。

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

    只是要求更新-设备专家能否得出结论? 谢谢

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

    对延迟深表歉意。


    2:大概以下可执行文件(取决于电路板类型)负责将段加载到闪存或 RAM 存储器中。 是否有更多关于这些来源的信息? 了解 am263px_cc_flasher.out、am263px_lpx_flasher.out  和 am263px_sip_flasher.out 之间的设置差异会非常有用。 AFAIK、闪存驱动程序设置在 cc 和 LP
    之间应该非常相似

    没错、这是闪存写入器应用程序。 源文件位于 {SDK_PATH}/tools/flasher/jtag_uniflash 。 所有电路板的源代码都相同、不同之处在于在工程的 board.c 文件中捕获的闪存复位机制。 对于 SIP 板、即使闪存配置有所不同、可通过 syscfg 进行修改。  

    3:在该过程中、从何处 调用 am263px_cc_flasher.out? 浏览所有.gel 文件、我们似乎传递了一般 AM263Px.gel 设置中的大多数初始化步骤、但我很难找到一个调用此加载器的 GEL 函数。 还是在其他地方定义?

    该可执行文件是从 Windows 中预编译的库"FlashSitaraMCU.dll"和 Linux 中的"libFlashSitaraMCU.so"调用的。  

    1:CCS 调试器的段格式是否有任何限制? 需要注意的是 a)最大段大小或 b)对齐-是否所有段都需要与闪存器件页面对齐(在本例中为256字节)

    我不确定是否存在最大段大小限制、但是的、该段需要页面对齐。 让我检查一下最大尺寸、然后返回给您。

    此致、
    Aswathi

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

    感谢您确认 Aswathi。 在这种情况下、页面对齐 可能会导致当前出现问题。

    当您将任何(页面对齐)段的加载地址更改为基于闪存时、您是否能够通过 CCS 调试器工作来刷写?

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

    尊敬的 Rens:

    是对于任何 XIP 应用、我们将加载地址和运行地址保留为基于闪存并正常运行。 但如果我将运行地址更改为任何其他地址、它将不起作用、除非我确保在运行时期间有一段代码会将相同的代码复制到我的运行地址。