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.

[参考译文] LAUNCHXL-F28379D:进入 C2000ware 函数 InitGpio 时的 CCS F28379D ITRAP 指令

Guru**** 2589330 points
Other Parts Discussed in Thread: C2000WARE, LAUNCHXL-F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1312131/launchxl-f28379d-ccs-f28379d-itrap-instructions-at-entry-to-c2000ware-function-initgpio

器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件:C2000WARE

我们有一个成熟的从 F28335移植到 F27389D DSP 的应用。 尽可能使用 C2000ware 库对 F28379D 处理器上的片上和片外外设进行初始化和访问。  我们使用的是 CCS 版本12.4、C200ware 版本4.01和编译器版本22.6。  

我遇到了一个明显的编译器或链接器问题。 我已经创建了2个构建配置、都是针对 JTAG 上的调试会话创建的。 一种配置使用 GPIO 分配、以备在新产品发布时用于专有电路板设计。 另一个用于在我们用来调试应用的 LaunchXL-F28379D 演示板上运行代码、直到专有板送达为止。 两个构建配置之间的唯一显著差异是 GPIO 引脚分配、该引脚分配在2个目标板之间是不同的。

使用新硬件的编译配置时、标准 C2000ware 初始化逻辑工作正常。 在 LaunchXL 板的构建配置上、C2000ware 函数 InitGpio 的入口点会出现6个 ITRAP 指令、之后会显示应位于入口点的目标代码。 我有一个来自 CCS 调试会话的屏幕截图、其中显示了在两种情况下反汇编的 InitGpio 入口点。

我已经在两个构建配置中使用了编译器指令--gen_func_subsections=on。 两个编译配置的链接器命令文件对所有 Page 0存储器块使用 Align (8)指令。  

什么可能导致这种差异、如何解决它?

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

    您好!

    我有一份来自 CCS 调试会话的屏幕截图,其中显示在两种情况下对 InitGpio 入口点进行了反汇编。

    您能提供这张屏幕截图吗?

    谢谢

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

    我不能把软件放在公共论坛上。 我可以通过私人消息将屏幕截图发送给您吗?

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

    是的、请分享两种情况下的拆卸屏幕截图。

    此致

    西达尔特

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

    我尝试在私人信息中插入图像。 我收到消息"文件或 URL 不允许插入"。 您能否提供连接 JPG 的说明?

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

    您好!  

    请参阅此帖子。

    https://e2e.ti.com/support/site-support-group/site-support/f/site-support-forum/693323/faq-how-do-i-send-and-receive-a-private-message-on-e2e-support-forums

    此致

    西达尔特

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

    该链接并未描述如何克服我所描述的错误消息。 我已经向 Sahil Deshpande 发送了一封私人电子邮件、并按照他在我们的 TI 私人消息对话中的请求、附上了2张屏幕截图图像。 已经4天了,我没有收到任何答复。

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

    我已经回复了你的私人信息,让我知道你是否能够附加文件并发送它。

    此致

    西达尔特

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

    大家好、Thomas:

    我看了屏幕截图、问题似乎是、由于某种原因、InitGpio 函数的调用位置不同;该函数地址的存储器设置为全0、因此 ITRAP。 您是否仔细检查了是否在 CPU1上运行此代码?

    当您说您有2个不同的配置时、是在讨论可供您选择的 CCS 编译配置、还是项目本身的2个不同版本? 如果是前者、您是否已验证生成的映射文件是相同的? 您可以在 CPU1_RAM 文件夹(或构建配置的名称)中找到它、 .map。

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

    同一应用程序的两个编译配置在包含的源内容方面有足够的不同、我不希望映射文件具有相同的分配。

    但是、根据您查看链接器 cmd 文件的请求、我进行了更仔细的研究。 在函数 InitGpio 的开头生成 ITRAP 指令的编译配置在 program_RAM (.text)中分配了 RAMD0、而工作编译配置则没有。 我将具有 ITRAP 问题的编译配置的 cmd 文件更改为与工作编译配置相同的.text RAM 分配、因此问题消失了。

    似乎应该有一个链接器警告、该警告指向了创建错误的 cmd 文件的那一部分、但该版本与工作编译配置相比没有其他编译错误或警告。  

    无论如何,插入 ITRAP 命令的问题,可能是因为函数 InitGpio 的入口点在链接图中不正确,已经纠正,我可以继续调试应用程序。 感谢您的帮助。  

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

    这是 BAAAACK!  这次我正在处理一个相关程序、它与我最初创建这个 e2e 线程的程序共享了很多源代码。 Disassembly 在 C++函数的入口点展示了一系列 ITRAP 指令。 入口点位于地址0X00D000、即存储器块 RAMGS1的起始位置、这一点很有意思、可能也有关联。 应该存储在该地址的代码从位置0x00D008开始。 链接命令文件为所有源代码目标文件指定 Align (4)。 这个问题在我之前的案例中消失了、仅仅是因为我指示链接命令文件不要使用内存块 RAMD0。 在新的实例中、RAMD0也未被使用、因为这似乎是第一次引起问题。 您能建议我可能做出哪些更改来解决这个问题吗?  和以前一样、我不能与美国代表共享源代码、除非是通过私人消息。 如果您希望源文件或源文件的屏幕图像、我们可以打开一个私人消息会话。 问题显然没有得到解决。  

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

    大家好、Thomas:

    因此,如果您想要源文件或源文件的屏幕图像,请打开私人消息会话。

    是的,我认为最好的是,如果你可以分享屏幕截图,这样我就 可以看到问题是否可以复制到我身边。 我已向您发送朋友请求。

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

    Omer -我已接受您朋友的请求。 我可以在链接器放置在0x0D000处的函数开始处向您发送 ITRAP 指令的屏幕截图、以及我的链接器命令文件的副本。 链接器命令文件中可能是某件事导致函数入口点未对齐。 请注意、在链接器命令文件中将 RAMGS1的开头从0x0D000更改为0xD0008、可正确放置入口点。 我是否使用 align (4)或 align (8)没有区别。  

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

    可以、我会私下传送屏幕截图、如果可以、还会发送链接器命令文件、这样我就可以尝试查看是否出现类似问题。

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

    我已经向 Omer 演示、在 CCS 版本12.4和 C2000编译器版本22.4中构建的项目能够在0x0D000处分配一个进入点、但是应当在该位置的代码会在随后出现在 CCS Disassembly 窗口中的8个字。 执行时、程序在入口点处的 ITRAP 指令上崩溃。  我今天发现、使用编译器 v20.12的相同工程和相同构建配置的编译会在 CCS 调试器中正确运行。 但是、使用编译器版本22.4时偏移入口点的问题似乎是间歇性的、因此我不知道我们是否可以断定错误在 v22.4中、而不是 v20.12中。

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

    请将这些文件放入 zip 文件:链接器命令文件、映射文件和可执行文件。  将该 zip 文件附加到给我的私人消息中。  要向我发送私人消息,请 将鼠标悬停在我的屏幕名称或头像上。 将弹出一个框。 单击  发送私密消息

    谢谢。此致、

    -乔治

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

    George -感谢您的登记、为我们提供帮助。 我发送了一条包含您请求的 ZIP 文件的私人消息。  

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

    我迷路了 

    。 因为您说...
    CCS 版本12.4和 C2000编译器版本22.4中的工程构建能够在0x0D000处分配入口点,但应在该位置的代码会显示在 CCS "Disassembly"窗口中

    ...我预期看到问题附近地址0x0000d000.  但在链接器映射文件中我看到...

      RAMGS1                0000d000   00001000  00000000  00001000  RWIX

    第一列是存储器范围的名称。  第三列是此内存范围内所使用的字的数量。  在本例中为0。  也就是说、不会向内存范围分配任何 RAMGS1 在地址0x0000d000处。  

    你还说...

    程序在入口点的 ITRAP 指令崩溃

    根据映射文件,这是入口点...

    ENTRY POINT SYMBOL: "CsciCodeStart_Asm"  address: 00081e20

    我在该地址看到的一切都是典型的。  这是一个很好的例子。

    00081e20        CsciCodeStart_Asm:
    00081e20   0048   LB           0x081e00
    00081e21   1e00

    所以、我看不出问题所在。  我缺少什么?

    谢谢。此致、

    -乔治