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.

[参考译文] 编译器/TM4C1294KCPDT:为什么 char = 0x0

Guru**** 2534600 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/857938/compiler-tm4c1294kcpdt-why-char-0x0

器件型号:TM4C1294KCPDT

工具/软件:TI C/C++编译器

编译器将0x00更改为0x0时、通过(char)将串行接收到的十六进制值转换为大于65535的整数时出现大问题。 因此262144或0x40000变为400个基址、16个移位位置为0x00。 如果我们移动所有3个串行字节(4、0、0)的总和、则会得到262144结果、但任何整数<65535是不正确的。 我们需要编译器停止处理十六进制零和255 (0xff)、以便 NUL 保持0x00、而不会改变为0x0、即基16被截断。

我们是否可以将 NULL 调整为0x00而不是0x0? 只要系统知道指令测试 char 0xff 时的差异、我们就可以将0xff 设置为0x0。

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

    示例:外部世界向 UART 接收器发送0x40000。 正如您看到的(黄色)、这不是放入 C++存储阵列单元中的内容。 函数监视器(如上)打印、并通过读回先前写入的数组单元格的变量进行确认。 当在系统级别将 NULL 0x00替换为0x0时、外界的现实已经受到影响。  

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

    很遗憾、我不理解您的问题。  请选择一个存在此问题的函数。  对于包含此函数 的源文件、请按照文章如何提交编译器测试用例中的说明进行操作。  此外、请说明以下内容:

    • 函数的名称
    • 有关它现在的行为方式的详细说明
    • 详细描述了它应该如何操作

    谢谢、此致、

    乔治

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

    BP101、

    我假设您发布的屏幕截图是来自 TM4C129x 串行端口的输出、您期望的是00而不是0。 对吗? 如果是这种情况、问题不在于编译器将0x00更改为0x0 (毕竟、它们是相同的)、而是如何格式化 printf (或 UARTprintf)。 使用%02x、而不是使用%x 作为格式。 该选项指定每个数字将打印至少2个字符并带有前导零。 有关设置 printf 输出格式的更多信息、请查看 C 语言参考指南。  

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

    [引用 user="Bob Crosby">我假设您发布的屏幕截图是来自 TM4C129x 串行端口的输出、您期望值为00而不是0。 这是正确的吗?[/引述]

    这只是问题的一半、因为 UARTprintf()也将0xff 转换为0x0。 0x400实际上会在 GUI 编号框中生成1024、因此它仅在0x00假定出现 NULL 时才会下降半字节。  奇怪的模块包括 null = 0、也许您的位于正确的路径、它是模块级问题、而不是编译器十六进制默认行为。 请注意、项目属性 ARM Hex 段具有数组输出格式的多种方法、目前未设置为任何格式。  

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

    UARTpritf()是如何修改缓冲区阵列单元读数的,但现在0x80000产生十进制524288,它不会在昨晚执行该操作。 因此、这对于需要生成3个十六进制字节的非常大的整数来说已经足够好了。

    感谢 Bob!