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.

[参考译文] RTOS/LAUNCHXL-CC3235SF:"maxValueSize""JSON_getValue"函数的参数

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/787939/rtos-launchxl-cc3235sf-appropriate-values-for-maxvaluesize-parameter-of-json_getvalue-function

器件型号:LAUNCHXL-CC3235SF

工具/软件:TI-RTOS

大家好!

您能在 JSON 库中澄清一点吗? 我的问题与此函数的最后一个参数"uint16_t * maxValueSize"有关:

int16_t JSON_getValue (JSON_Handle objHandle、const char * pkey、void * pValue、uint16_t * maxValueSize); 

我应该通过此处的引用传递哪个值?

据我了解、对于字符串和原始数据类型、我应该将指针传递到为其值分配的若干字节。
对于"int32"、"UINT32"、"real32"、"ureal32"、我应将指针传递到其类型大小(字节)、"sizeof (int32_t)"、"sizeof (uint32_t)"、"sizeof (real32_t)"、"sizeof (ure32_t)"、 我的理解。
但如果是"boole"类型、 "maxValueSize"变量为什么不应小于2? 如果我将指针传递给变量、equals 1、则该函数返回错误代码"-101"("jSON_RC___ANLOADCK_SAMPREG_SIZE _EXCED")、布尔类型的 althoug 内部表示为"uint8_t"。 如果要遵循我的逻辑、"maxValueSize"变量应为1。 因此、我想澄清这一点、以便传递正确的值。

如果我理解正确,您对 json_engine.h 文件中“__JSON_GetValue()”函数的描述有点过时。 在注释部分中、您忘记提到受支持的无符号类型("UINT32_t"和"ureal32_t")。

很抱歉、如果我误解了某个内容、因为我没有找到包含示例的完整文档。

此致、
罗马

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

    如果我们查看_json_GetValue 中的代码、在 json_engine.c 的第1185行、所有非字符串都将 memcpy 放入提供的缓冲区中。 复制的字节数取决于值大小。 正如您所说、布尔值的大小为2字节。 结果是将从临时位置复制两个字节(found_property->common +1)。 由于 sizeof (布尔值)应该为1、因此只有在以某种方式将"true"/"false"解析为 uint16值时、这才会正常工作。 否则、您可以复制垃圾数据。

    可能由于布尔"true"/"false"必须首先解析为字符串、这可能是库为其保留2字节值的原因。 我没有 JSON 测试程序、但您也许可以单步执行 JSON 库、看看它如何解析真/假字符串、以了解该库为什么需要2个字节。 该调试的结果将帮助 TI 确定正在进行的操作。

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

    非常感谢您的回复、CE!

    我已经知道,“DetermineValueSize()”函数在此行“* value_size = sizeof (uint16_t);”中填充值大小,因此对于“property_type__Boolean _BASE”和“property_type__string_base”,它的值等于2。 但如果是"property_type__string_base"、则似乎在后续代码中未使用"value_size"。 遗憾的是、我没有太多时间来详细了解 JSON 库源代码的所有细节、它看起来非常复杂、因此、如果遇到其他模糊问题、当我的应用程序的其他部分准备就绪时、我可能会更深入地检查它。 目前、我只需为布尔值分配2个字节、而不用考虑低级函数的实现。 我希望 TI 最终能提供详尽的文档;-)
    但现在、我遇到了 JSON 库中其他不明显的问题。 当 json 变量的传输值超出边界时、JSON 库既不会产生错误、也不会溢出变量、它会舍入到最近的值(min 或 max)。 例如、如果模板具有变量的"UINT32"类型、并且 json 文本包含此变量的"-1"值、则 JSON 库不会生成任何错误、它会将此值舍入到"0"、而不是像 C 编译器在"(uint32_t)-1"转换语句的情况下通常所做的那样将此值舍入为"2^32-1"。
    此外、如果我以这样的方式修改 json_app 示例中的 json 模板、以便我将任何类型替换为"real32"或"ureal32"、则"json_createTemplate()"函数返回"-25"("json_RC_recovered_ilical_Q_values")。
    因此、最好对此库进行更详细的描述。

    此致、
    罗马

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

    您好、Roman、

    JSON 库中确实有 SDK 文档。 在 CC32xx 2.40 SDK 中、这位于 docs/ns 文件夹中、但已移至3.10 SDK 中的 docs/tutils。 示例中还有一个 JSON 示例/ / /ns (或 tutils)文件夹。

    无论如何、我将邀请一位有关该库的专家、因为我不确定您的其他问题是否会包含在文档中。 他们应该能够回答您的其余问题。

    此致、
    Sarah

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

    如果我对您的理解正确、您在 编写 JSON 文档时就意味着本页面 dev.ti.com/.../group__ti__utils__json__JSON.html。 我找不到适用于 CC32XX 控制器的"3.10 SDK"。 我知道、此页面看起来像文档、但它显示的所需内容不够。 我相信 TI 专家可以为该库编写更完整的文档、从而进一步节省用户的时间。 因为本文档甚至不涵盖允许的 json 值类型。

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

    您好、Roman、

    SimpleLink CC32XX 3.10 SDK 尚未发布、但很快就会推出。 您在文档中遇到的一些问题已在此处解决、即添加了以下内容:

    可在 JSON 模板中指定的类型有:int32、uint32、raw、string 和布尔值。 API 参考指南中提供了使用示例。

    注意: 浮点值解析不正确、可能不应使用。 这将在未来版本中修复、并由 TIUTILS-8跟踪。

    谢谢、
    Gerardo

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

    好的、好的、我明白了。 谢谢你。 我别无选择、只能等待即将推出的文档和修复程序、并希望能有结果。

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

    罗马

    简单来说、 SimpleLink CC32XX 3.10 SDK 现已推出、可在此处找到:
    http://www.ti.com/tool/download/SIMPLELINK-CC32XX-SDK

    此致、
    Gerardo

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

    我已经希望看到一些承诺的增加,但实际上只增加了一个关于浮点值的评论,没有别的。 这不值得等待。

    此致、
    罗马
x 出现错误。请重试或与管理员联系。