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/EK-TM4C1294XL:CCS9.1调试十六进制&ASCII、奇数长度

Guru**** 2452580 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/856963/ccs-ek-tm4c1294xl-ccs9-1-debug-hex-ascii-odd-length

器件型号:EK-TM4C1294XL

工具/软件:Code Composer Studio

您好!

CCS 9.1也许更早版本的调试数组值同时显示为十进制和十六进制、并不能保持一致的行为、这使得它的内容和来源非常令人困惑。 来自外部世界的输入是'A'还是0x41、而 CCS 已经两次执行该命令? 我知道它在进入 CCS 之前是0x41、但问题'A'、因为 HexToDece()在数组值的单次读取上会产生阻塞。  

此外、字符串的长度显示的值大于正在读取的字节数。 因此、十六进制0x03为1字节、添加了终结器"\0"是2字节、而不是调试所示的3字节。 如果我们尝试将两个字符放入 tick 中、例如"23"代码分析、并将其构建为潜在的移植警告。 那么、空终结符节拍内的反斜杠是否被计为一个字节、但不允许在任何其他时间作为两个字符移植? 奇怪的是,C++研究指南没有关于 NULL 终结器这个主题的信息,除了它看起来像'0'和 strlen()将它添加到字符串的末尾。

 

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

    BP101 说:
    CCS 9.1也许甚至早期版本的调试数组值都显示为十进制和十六进制,但并不能保持一致的行为,这使人很困惑它的来源和来源。

    CCS Expressions 视图默认为十进制数字格式、但您可以通过右键单击变量并选择数字格式、将任何值设置为十六进制等其他格式。 这可能是某些数组元素发生的情况。

    [引用 user="BP101">此外,字符串长度显示的值大于正在读取的字节数。 [/报价]

    我不清楚您的代码将实现什么目标。 您是否正在尝试使用 strlen 获取字符串的长度? 它看起来您实际上并不是将字符串传递为输入。

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

    Aarticg 说:
    CCS Expressions 视图默认为十进制数字格式、但您可以通过右键单击变量并选择数字格式、将任何值设置为十六进制等其他格式。 这可能是某些数组元素发生的情况。

    然而、输入不是十进制整数、它都是十六进制的、因此 CCS 调试行为不正确且非常可疑。 我可以将各个行更改为显示、但至少可以说是非常模糊的行为。 整个调试单步 F5/F6错误地将'A'十进制65显示为存储的变量、此时在十进制转换之前它应该是0x41、清楚地显示为十六进制0x41而不是十进制整数。 它显然是不正确的调试行为、因为它按照定义定义定义删除了"调试"一词、并使工程师混淆了地球上正在发生的情况。

    [引用 user="Aarticg">我不清楚您的代码的目标是什么。 您是否正在尝试使用 strlen 获取字符串的长度? 您实际上并未将字符串作为输入。

    调试字节为 hexVal 0x03、它应该是一个以 NUL 结尾的二进制字符串十六进制转换为十进制数。  因此、一个字节显然仍被视为一个字符串、并且'\0'计数为两个字节、而不是一个字节。 此问题与 CCS 编辑器重影代码行有关、在最终的 HexToBin 输出中、对象缺失、但在编译时出现在编辑器中。 这使得在左侧调试视图上发布的十六进制输入的所有转换在存储到参数变量中时被改编。