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.

[参考译文] TMS320F28386D:直接寻址

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1374497/tms320f28386d-direct-addressing

器件型号:TMS320F28386D

工具与软件:

"你是什么人? 将代码从 COFF 迁移到 EABI 之后。 asm 中的部分代码不适合我、因为寻址不正确。 例如、对于定义为的变量 PwmBKB

PwmBKB .usect ".vipg1"、2、1、1。  在我想指向 PwmBKB+1的情况下、编译器不会给我错误、但 ACC 值没有把它写入 PwmBKB+1、而是把它写入 PwmBKB+0

MOVL ACC、XAR6
MOVH @PwmBKB+1、附件
MOV @PwmBKB+0、ACC

有什么建议吗?

谢谢。  

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

    Marcos、您好、能否查看这些资源、看看您是否能够解决问题?  否则、您可以回复、看看我是否能找到主题专家来提供帮助。

    C2000从 COFF 迁移到 EABI

    特别是 《C28x 嵌入式应用二进制接口应用报告》 (SPRAC71)提供了一些寻址提示。

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

    您好、Joe、我在 定义  数组时使用__ attribute __((blocked))存在此问题。  我已阅读《 TMS320C28x 优化 C/C++编译器 v22.6.0.LTS》

    3.11数据页(DP)指针加载优化

    当按名称访问全局变量时、编译器使用直接寻址。 C28x 支持通过数据页指针寄存器 DP 进行直接寻址。 DP 寄存器指向长度为64字的页的开头

    为了避免每次直接访问都加载 DP、编译器会对某些数据和段进行"分块"。 分块技术可确保对象要么完全包含在单个页中、要么与64字页边界对齐。 这种数据页分块技术允许编译器更频繁地使用直接寻址模式。 因此、在访问已知存储在单个数据页上的全局变量时、该功能更大限度地减少了对 DP 加载指令的需求。

    对于 COFF ABI、所有非常量数据均被分块。

    对于 EABI、默认的分块规则为:

           •数组及其各段不分块。

           •具有外部链接(C 中的 extern)的结构需分块。

           •具有内部链接(C 中的 static)的结构不分块、但这些结构的各段需分块。

    感谢您的合作

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

    太棒了!  感谢您分享您的解决方案!