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.

[参考译文] TMS320F28379D:具有 movd32指令的编译器错误

Guru**** 2611705 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1030637/tms320f28379d-compiler-errror-with-movd32-instruction

器件型号:TMS320F28379D

您好!

我偶然发现 Delfino F28379D 编译器的编译器错误(在 TI 编译器20.2.1和21.6.0.0上检查)。

以下是调用编译器错误的最低代码示例:

#include <stddef.h>
#include <stdlib.h>

typedef struct
{
    float a;  float b;
    float c;  float d;
    float e;  float f;
    float in; float in_prev;
} str;

typedef struct
{
    float reserved[25];
    str aa;
} movd32_example;

#pragma DATA_ALIGN ( md32 , 0x40 )
movd32_example md32;

static inline void calculate(str *a, float in) {
    a->c = a->a * a->in_prev + a->b * a->c;
    a->in_prev = in;
    a->e = a->f * (a->in - a->c);
    a->d = in - a->e;
}

void main(void) {
    for (;;) {
        md32.aa.in = (rand() % 100) / 10.0f;
        calculate(&md32.aa, md32.aa.in);
    }
}

对于我的项目(已附)、链接器将 m32放置在地址0xa800 - 64字页的开头。

线  

a->in_prev = in;

可通过以下指令集实现:

MOVW      DP,#_md32+64          ; [CPU_ARAU]
MOV32     *+XAR4[AR1],R0H       ; [CPU_FPU] |30| 
MOVB      XAR1,#58              ; [CPU_ALU] |24| 
MOV32     R2H,*+XAR4[AR0]       ; [CPU_FPU] |24| 
SUBF32    R1H,R2H,R1H           ; [CPU_FPU] |24| 
MOVD32    R4H,@$BLOCKED(_md32)+62 ; [CPU_FPU] |23|

最后一条 MOVD32指令使用直接寻址、因此需要为数据页码设置 DP 寄存器、并且在 MOVD32指令中、只传递最后6位。

MOVD32指令的预期效果为:

R4H := [md32+62:md32+63]
[md32+64:md32+65] := [md32+62:md32+63]

由于 MD32+62和 MD32+64地址位于不同的64字页上、并且 DP 寄存器设置为 MD32+64页、因此 movd32指令的两个部分都执行错误。

R2H 寄存器从 MD32+126而不是 MD32+62获取值、该值写入 MD+128、可能会覆盖其他一些数据。

我附加了竞争 CCS 项目来重现这种 fenom农 神庙。

 

e2e.ti.com/.../movd32_5F00_compiler_5F00_error.zip

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

    遗憾的是、CCS 工程的某些部分缺失、我无法构建它。   

    即使如此、我也可以用您发送的内容来接近构建它。  我仅缺少编译器构建选项。  构建此 CCS 工程、然后从"Console"视图将完整编译命令的文本复制并粘贴到下一个帖子中。  请勿使用屏幕截图。

    谢谢、此致、

    乔治

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

    抱歉、我认为.cproject 文件包含所有相关数据。 以下是我的编译输出:

    ****为项目 MP26构建配置2837xD_CPU2_Release **

    /home/krezolekpa/ti/ccs1011/ccs/utils/bin/gmake -k -j 8 all -O

    编译文件:"../DSP2837xD/F2837xD_CodeStartBranch.asm"
    调用:C2000编译器
    "/home/krezolekpa/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/bin/cl2000 /home/krezolekpa/repo/mp26 /home/krezolekpa/repo/mp26/include -v28 -ml -mt --cla_support=cla1 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu2 -O4 -opt_for_speed=5 -fp_mode=relaxed -include_path="-include_path="-sprendature=v37xd_ex-spxd_exclus-sp37xd_example.d=/home/krezolekpa/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/include -sp37xd_bi-board-spxd_exclus-sp37xd_sband_decominature=-sp37xd_ex-board-board-board-sp37xd_exclus-board-board-board-board-spxd_overview-sp37xd_overview-spxd_overview-sp37d_overview-spxd_overview-board-spxd_overview-sp37d_overview-sp37d_overview-spxd_overview-board-sp37d_overview-board-spxd_ov /home/krezolekpa/repo/mp26/include/DSP2837xD
    完成构建:"../DSP2837xD/F2837xD_CodeStartBranch.asm"

    编译文件:"../CTU2/main_CPU2.c"
    调用:C2000编译器
    "/home/krezolekpa/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/bin/cl2000 /home/krezolekpa/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/include /home/krezolekpa/repo/mp26/include -v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="/home/krezolekpa/repo/mp26 /home/krezolekpa/repo/mp26/include/DSP2837xD --include_path="--cpru2=-out_cpu2=-reguld_cpu2-board-supervisorit_cpu2-board-cpu2-inu2-inu2-board-cpu2-board-regulation="-cpu2-ination-cpu2-board-cpu2-ination-cpu2-board-cpu2-board-overview-cpu2-ination-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-cpu2-overview-prob
    已完成构建:"../CTU2/main_CPU2.c"

    构建目标:"MP26_CPU2.out"
    调用:C2000链接器
    "/home/krezolekpa/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/bin/cl2000 -v28 -ml -mt --cla_support=cla1 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu2 -O4 -opt_for_speed=5 -fp_mode=relaxed -advice:performance=cpu2=-vcu_support=vcu2 -exclus_exclus-rom-rom-display_code_display-rom-rom-out-display-display_code_display-rom-rom-out-display_code_display-rom-display-rom-display-display_code_display-rom-exclus_code_display-exclus_code_display-rom-p=-rom-display-p=-ine-intrack_code_display-display-rom-display-ine-ine-control-display-rom-display-ine-ine_display-rom-rom-display-pf-necon_code_display-p2.htm#-code.htm#-display-display_code_display-code_display-code_display-display-p /linker/2837xD/F2837xD_Headers_nonBIOS_cpu2.cmd /linker/2837xD/2837xD_FLASH_lnk_cpu2.cmd /home/krezolekpa/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/include /home/krezolekpa/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/lib

    警告#10063-D:指定了"_c_int00"以外的入口点符号:"code_start"
    已完成构建目标:"MP26_CPU2.out"

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

    感谢您提供构建选项。  当我使用版本20.2.1.LTS 时、我能够重现问题。  最新的20.2.x.LTS 版本(版本20.2.5.LTS)不会出现问题。  因此、升级到版本20.2.5.LTS 是解决该问题的一种可能方法。

    [引用 userid="329175" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1030637/tms320f28379d-compiler-errror-with-movd32-instruction "]我偶然发现 Delfino F28379D 编译器的编译器错误(在 TI 编译器20.2.1和21.6.0.0上检查)。[/quot]

    我无法重现编译器版本21.6.0.LTS 的问题。

    谢谢、此致、

    乔治