工具与软件:
"你是什么人? 将代码从 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
有什么建议吗?
谢谢。
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.
工具与软件:
"你是什么人? 将代码从 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、您好、能否查看这些资源、看看您是否能够解决问题? 否则、您可以回复、看看我是否能找到主题专家来提供帮助。
您好、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)的结构不分块、但这些结构的各段需分块。
感谢您的合作