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.

[参考译文] CCS/MSP430FR5969:C28 -移位计数太大

Guru**** 2522770 points
Other Parts Discussed in Thread: MSP430FR5969

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/706020/ccs-msp430fr5969-c28---shift-count-is-too-large

器件型号:MSP430FR5969

工具/软件:Code Composer Studio

我试图将一个轻量级加密代码从网上放到 MSP430FR5969微控制器上、但我的代码中有很多实例、其中显示 "#64D -移位计数太大"。  

我使用的是 Code Composer Studio 8.0.0版。  

是否有解决此问题的建议? 以下是一些行、如果它完全可以帮助您:  

compress_Byte_array (k、k0_o、k0_e);
compress_Byte_array (k+8、k1_o、k1_e);
compress_Byte_array (npub、n0_o、n0_e);
compress_Byte_array (npub+8、n1_o、n1_e);

 t1_e =(u32)(((crypto_KEYBYTES * 8)<< 24 |(速率* 8)<< 16 | pa_ROUNDS << 8 | PB_ROUNDS << 0);

x0_e = t1_e << 16;
x0_o = t1_o << 16;  

compress_Byte_array (ad、in_o、in_e)

in_o |= t0_o << 16;
in_e |= t0_e << 16;

expand_U32 (t1_e、x0_o、x0_e);
expand_U32 (t1_o、x0_o>>16、x0_e>>16)

expand_U32 (t1_e、x3_o>>16、x3_e>>16);
((u32*) c)[0]= U32BIG (t1_e);
expand_U32 (t1_e、x3_o、x3_e);
((u32*) c)[1]= U32BIG (t1_e);
expand_U32 (t1_e、x4_o>>16、x4_e>>16);
((u32*) c)[2]= U32BIG (t1_e);
expand_U32 (t1_e、x4_o、x4_e);
((u32*) c)[3]= U32BIG (t1_e);

如果代码更好、我也可以链接!  

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

    请不要忘记、在 C28上、"int"仅为16位。  此代码假设"int"为32位。  您需要更改代码以将 cast 插入到 uint32_t、如下所示:

    t1_e =((((u32) crypto_KEYBYTES * 8)<< 24 |((u32)速率* 8)<< 16 |(u32) pa_Rounds << 8 | PB_ROUNDS << 0);

    x0_e =(u32) t1_e << 16;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    稍等... 您使用的是 C28x 还是 MSP430? 如果是后者、我不知道问题是什么。 您能否向我们显示警告的确切位置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦、我没有使用 C28、我没有意识到我提出了错误的问题(这是我第一次使用这个论坛、所以我很抱歉!)  我正在使用 MSP430FR5969微控制器。 我使用的是轻量加密、我附加了我正在使用的代码。 很遗憾、代码出现错误的行有很多:197、198、199、200、204、 (笑声) 324、328、331与 e2e.ti.com/.../ascon.c 基本相同

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

    e2e.ti.com/.../8306.ascon.cProbably并不会带来很大的差异、但我放置了错误的代码版本

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

    在 MSP430上、内置类型 int 的大小为16位。  因此、即使假设您使用 C28x 器件、考古学家在第一篇帖子中给出的解释也是正确的。  我将给出相同的解释、但对其进行一些不同的解释。

    在 MSP430上,以下表达式不是合法的 C...

    1 << 16 

    移位计数太大。  移位计数不能超过移位左操作数的宽度。  在这种情况下、该操作数是类型为 int 的常量"1"。  由于 int 为16位宽、因此会发出诊断。  解决方法是将左侧操作数的类型从 int 更改为 long。  有几种不同的方法可以实现这一目的。  一种方法是将后缀 L 添加到常量中...

    1L << 16 

    在您的代码中、您需要采取类似的步骤来确保、只要移位计数>=16、左侧操作数的类型就为 long。   

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MSP430还具有16位"int"、因此您需要在所有代码中小心谨慎、确保转换为 u32、其中代码假定它处理的是32位类型。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯,所以我以前不必这么做,只是想确保我做的正确,我只做这件事:

    (((u32) compress_Byte_array (k、k0_o、k0_e))?

    我尝试实施了考古学家建议的线路、但线路仍标有相同的警告
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是错误的分析级别。  您需要仔细检查每个移位表达式、其中右侧操作数的值为16或更多。  在您的情况下、此类表达式确实出现在宏中。  确保左侧操作数的类型为 long (或者、也许是 unsigned long)。  这通常通过添加强制转换或向常量添加后缀来完成。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我修好了! 非常感谢你们!! )