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.

[参考译文] TMS320F28377D:TI C2000工具版本22.6.0 LTS 问题?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1167764/tms320f28377d-ti-c2000-tools-ver-22-6-0-lts-problem

器件型号:TMS320F28377D

我将编译以下行:

volatile uint32 *gpioDataReg;

gpioDataReg =(易失性 uint32 *)&GpioDataReg +(104/32)*GPY_DATA_OFFSET;

在上面的 gpioDataReg 指针应该为0x7F18、但看起来"plus"没有完成、我得到值0x7F00 ( GpioDataReg 的地址)。

为了解决这个问题、我将上述内容拆分为两行:

gpioDataReg =(易失性 uint32 *)&GpioDataRegs;

gpioDataReg +=(104/32)*GPY_DATA_OFFSET;

现在它起作用了。

我在这里错过了什么?

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

    您好吗——您能告诉我们您使用22.6 C2000编译器构建代码时使用了哪些选项吗? 此外、如果您可以按照本文中的说明进行操作: 如何提交编译器测试用例 以提交可重现的测试用例、这将使我们更容易查看正在发生的情况。

    谢谢!

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

    e2e.ti.com/.../Compiler_5F00_Options.txt

    e2e.ti.com/.../A2D.pp.txte2e.ti.com/.../assembly_5F00_image.jpg.txt

    第22241行。

    编译器版本:22.6.0 LTS

    jpg 显示加载图像后它在内存中的外观。

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

    嗯、当我编译预处理的测试文件进行汇编时、我看到以下情况:

    ;--------------------------------------------------------------
    ;22241 | gpioDataReg =(易失性 uint32 *)&GpioDataRegs +(104/32)*(0x8/2);
    ;--------------------------------------------------------------
    MOVL XAR4、#||GpioDataRegs|+24;[CPU_ARAU]|22241|

    您能否使用-s 进行编译并查看您是否看到此"+24"?

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

    此外、当我反汇编目标文件时、我会看到:

    00000022 $C$L10:
    00000022 1e00 MOVL @0x0、ACC
    00000023 8f00 MOVL XAR4、#0x000018
    00000024 0018

    尽管由于文件未链接、GpioDataRegs 的地址还没有值、但它明确地将24 (十六进制18)添加到其值0。

    我在您的编译器标志中没有看到优化级别。  您是否正在进行优化编译?

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

    我还看到了在链接器和加载映像之后的存储器中看到的+24 (或+0x18)、这是我在 jpg 文件中发送给您的内容(没有添加+24)。

    由于 GpioDataReg 地址没有+0x18、图像运行。

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

    我不使用任何优化...

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

    链接器会已更新该地址以包含24。  为什么您认为地址不正确?  在哪里可以看到  GpioDataRegs 的基址?

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

    GpioDataRegs 是 TI 文件 F2837xD_GlobalVariablesDefs.c 中定义的 TI GPIO 寄存器、其地址为0x7F00。

    当我用+=拆分行时、我得到正确的结果0x7F18。

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

    由于预处理测试用例中的代码生成似乎没有问题、因此链接器在计算直接地址时可能会出错。  我需要用于链接此项目的其余文件。  这是 CCS/SDK 项目吗?  或者、您能否提供剩余的目标文件(我不需要源文件)来链接它?

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

    另一种考虑...的可能性 链接器发出正确的指令编码。  之后、其他一些东西会导致指令中的操作码更改为错误的值。  这不常见、但我已经看到它发生了。  要对此进行研究、请手动反汇编由链接器创建的最终链接.out 文件。  使用类似于...的命令

    Fullscreen
    1
    dis2000 final_executable_file.out > disassembly.txt
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    检查反汇编.txt。  您在问题地址0x009d78看到了什么?  这是你所期望的吗?

    谢谢、此致、

    乔治

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

    不是我所期待的

    不会像我之前发送的 jpg 中那样添加0x18。

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

    感谢您的耐心等待。  我创建了一个重复同样行为的测试用例。  我提交了 EXT_EP-10948条目  以进行调查。  欢迎您访问该链接。

    谢谢、此致、

    乔治