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.

[参考译文] TMS320F28P559SJ-Q1:关于计算位宽的讨论。

Guru**** 2553260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1547335/tms320f28p559sj-q1-discussion-on-the-calculation-bit-width

器件型号:TMS320F28P559SJ-Q1


工具/软件:

您好专家

客户是 C2000 器件的新用户、他们在测试期间会看到一些输出、想要讨论以下内容:

1.在操作中:DVB =(uint32_t)((level-1)*(0x7FF-0x0c))、DVB 类型是 Uint32、级别类型是 Uint32、预期输出是 0x0007E31A、但实际输出是 0x0000E31A、数字 7 由于溢出而被忽略。 问题是为什么无论什么级别类型都是 uint16 或 uint16。 运算  (LEVEL-1)*(0x7FF-0x0c) 的返回值始终看起来像 uint16 结果?

2.在操作 (uint32_t) pData[3]<<24 | pData[2]<<16 | pData[1]<<8 | pData[0];最终返回值是 uint16 类型、这会导致 pData[3]和 pData[2]丢失。 pData 是一个 uint_8 数组。 CPU 如何在寄存器中处理此操作?

谢谢

Joe

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

    您好 Joe、

    1.是否可以尝试将数字转换为 Uint32 或使用 32 位十六进制表示法。 这可能是减法后得到 uint16 值。 如果可以、请告诉我。

    2.我认为你需要键入对 pData 的每次调用,以将它视为 32 位值,然后你开始移动位。

    请告诉我这些功能是否适合您。

    此致、

    Ozino

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

    嗨、Ozino

    感谢会在我拿到 Launchpad 后尝试您的建议、我还要讨论的另一件事是、是否有文档总结了 CPU 计算的操作角色、例如:

    如果变量“level"是“是 uint16 类型、且常量“1"被“被视为 uint16 定点、则如果高 4 个字节为 0 或者高 4 个字节不为 0、“level-1"的“的结果将使 uint16 类型或作为 uint16 类型。

    对于位移位操作、如果数据类型为 uint8(在 C28 中看到为 uint16)、则左移 24 位、数据是否会因溢出而被忽略、或者 中间变量的数据类型是 32 位宽度并保留所有值?

    谢谢

    Joe

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

    请查看以下文档、其中包含 CPU 指令集、可以提供更多详细信息。

    https://www.ti.com/lit/ug/spru430f/spru430f.pdf