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:移位计数太大!!

Guru**** 2589245 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1106808/tms320f28379d-shift-count-is-too-large

器件型号:TMS320F28379D

尊敬的 TI 团队:  

根据以下警告、我有一些错误:

错误: 描述资源路径位置类型
#1851案例标签值已出现在该交换机的275行中  
#1851案例标签值已出现在该交换机的275行中  
#1851案例标签值已出现在该交换机的275行中  
#1851案例标签值已出现在该交换机的275行中  
#1851案例标签值已出现在276行的此开关中  
#1851案例标签值已出现在276行的此开关中
#1851案例标签值已出现在276行的此开关中  
#1851案例标签值已出现在276行的此开关中  
#1851案例标签值已出现在此开关中的277行处
#1851案例标签值已出现在此开关中的277行处
#1851案例标签值已出现在此开关中的277行处
#1851案例标签值已出现在278行的此开关中  
#1851案例标签值已出现在278行的此开关中  
#1851案例标签值已出现在279行的此开关中

警告:  
64-D 移位计数太大  
64-D 移位计数太大  
64-D 移位计数太大  
64-D 移位计数太大  
64-D 移位计数太大  
64-D 移位计数太大  
64-D 移位计数太大  
69-D 整数转换导致符号改变  

创建错误和警告的代码如下所示:

 

enum XYZ
{
     A  = 1<< 0
    ,B  = 1<< 1
    ,C  = 1<< 2
    ,D  = 1<< 3
    ,E  = 1<< 4
    ,F  = 1<< 5
    ,G  = 1<< 6
    ,H  = 1<< 7
    ,I  = 1<< 8
    ,J  = 1<< 9
    ,K  = 1<<10
    ,L  = 1<<11
    ,M  = 1<<12
    ,N  = 1<<13
    ,O  = 1<<14
    ,P  = 1<<15
    ,Q  = 1<<16
    ,R  = 1<<17
    ,S  = 1<<18
    ,T  = 1<<19
    ,U  = 1<<20
    ,V  = 1<<21
    ,W  = 1<<22
};


inline const char* ANYNAME(unsigned FOREXSTATUS)
{
    const char* CONSTValue = "UNKNOWN";

    switch(FOREXSTATUS)
    {
    case A: CONSTValue = "A"; break;
    case B: CONSTValue = "B"; break;
    case C: CONSTValue = "C"; break;
    case D: CONSTValue = "D"; break;
    case E: CONSTValue = "E"; break;
    case F: CONSTValue = "F"; break;
    case G: CONSTValue = "G"; break;
    case F: CONSTValue = "F"; break;
    case H: CONSTValue = "H"; break;
    case I: CONSTValue = "I"; break;
    case J: CONSTValue = "J"; break;
    case K: CONSTValue = "K"; break;
    case L: CONSTValue = "L"; break;
    case M: CONSTValue = "M"; break;
    case N: CONSTValue = "N"; break;
    case O: CONSTValue = "O"; break;
    case P: CONSTValue = "P"; break;
    case Q: CONSTValue = "Q"; break;
    case R: CONSTValue = "R"; break;
    case S: CONSTValue = "S"; break;
    case T: CONSTValue = "T"; break;
    case U: CONSTValue = "U"; break;
    case V: CONSTValue = "V"; break;
    }

    return CONSTValue;
}

问题是我无法更改头文件中变量的类型、因为这会导致错误。 其他项目使用相同的头文件、但不同的编译器运行良好。  

即使 在将1拼写错误键入 UL 后、也会删除警告而不是错误。因为 默认情况下枚举大小为 16位?

如何将枚举大小更改为32或更大?

那么、  解决这种错误的方法是什么?  

谢谢、  

副总裁  

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

    你必须...

    [~引脚 userid="484362" URL"/support/microrims/C2000-microset-group/C2000/f/C2000-microriers-forum/1106808/tms320f28379d-shift-count-is too large "]将1添加到 UL[/QUESP]

    ...因为标准指出,如果右操作数(移位计数)的值大于或等于左操作数类型的位数,则移位运算的结果是未定义的。  整数常量 1的默认类型 int、为16位宽。   

    即使进行了该更改、此源代码也存在另外两个问题。

    一 个. F 号案件 出现两次,出现在第40和42行。

    两个... 函数参数 FOREXITSTATUS符号、这是一种16位宽类型。  它绝不能等于任何比它更宽的枚举常量。  从而诊断。  当我将 FOREXITSTATUS 更改为 unsigned long 时、只会显示一个诊断。  这是有关从未调用过内联函数 ANYNAME 的警告。

    谢谢、此致、

    乔治

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

    尊敬的乔治:  

    感谢你的答复。  

    [引用 userid="4373 " URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forume/1106808/tms320f28379d-shift-count-iso-large/4101415#4101415"]一个... 案例 F 出现两次,出现在第40行和第42行上。

    这是我输入错误、对此我深表歉意、但我检查了代码、不再重复。  

    [引用 userid="4373 " URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1106808/tms320f28379d-shift-count-is-to-large/4101415#4101415"]您必须...

    实际上、我打开这个线程是因为我无法修改头文件、所以我正在寻找一些 code composer 设置(如果有)来更改'enum'的大小、 如下面的线程所示。 我将编译器 v20.2.LTS 与 CCS10搭配使用。  

    e2e.ti.com/.../2534249

    此外、因为 GCC 编译器不会给出错误。  

    此致、  

    副总裁

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="484362" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1106808/tms320f28379d-shift-count-ise-toe-large/4101989"]我正在寻找一些代码编写器设置(如果有)以更改'enum'的大小[引用]

    遗憾的是、没有这样的设置。  有关详细信息、 请在 C28x 编译器手册中搜索 标题 为 Enum 类型大小的子章节。   

    [引用 userid="484362" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1106808/tms320f28379d-shift-count-is-to-large/4101989#4101989]GCC 编译器未给出错误。  [/报价]

    对于此 GCC 编译器、内置类型 int 的大小可能为32位。  对于 C28x 编译器、int 的大小为16位。

    谢谢、此致、

    乔治

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

    好的、谢谢、George。