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.

[参考译文] SIMPLELINK-CC13XX-CC26XX-SDK:bdb_reporting.c 中未对齐指针导致的硬故障

Guru**** 662690 points
Other Parts Discussed in Thread: CC2652RB, Z-STACK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1293480/simplelink-cc13xx-cc26xx-sdk-hardfault-caused-by-misaligned-pointer-in-bdb_reporting-c

器件型号:SIMPLELINK-CC13XX-CC26XX-SDK
主题中讨论的其他器件:CC2652RBZ-stack

使用 SimpleLink CC13XX/CC26XX SDK 版本 7.10.01.24、对于浮点(ZCL_datatype_single_prec) 属性的属性报告因 bdb_REPORTING_c 中第1895行的指针访问未对齐而在硬故障下失败:

      float L = *((float*)lastValue);
      float D = *((float*)delta);
      float C = *((float*)curValue);

使用-O0时可以正常工作、但使用-Oz 时、加载(未对齐)浮点的 FPU 指令会导致 硬故障。

指针 lastValue、delta 和 curValue 的类型为  uint8_t*,  对于浮点指针,至少 lastValue 和 curValue 未正确对齐(地址可被4整除)。 取消引用未对齐的指针会导致 C 中出现未定义的行为、因此 硬错误 在这里是一个完全有效的结果。

  其他_alignof 大于2的属性类型可能会发生同样的情况、但我尚未进行测试。

我 通过对所有三个值使用防御性 memcpy 解决了这一问题:

      uint8_t len = zclGetDataTypeLength( datatype );
      float L, D, C;
      OsalPort_memcpy( &L, lastValue, len );
      OsalPort_memcpy( &D, delta, len );
      OsalPort_memcpy( &C, curValue, len );

这可能应该在 SDK 中加以修复。

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

    请说明您正在使用 SDK 中的哪个示例。

    Siri

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

    我正在使用 CC2652RB 上的 zr_temperaturesensor 示例、该示例扩展为其中一个浓度测量(Conc)仪表组、具体而言就是一个二氧化碳仪表组(仪表组 ID 0x040d)。

    所有 Conc 集群(ID 为0x040C 至0x042b)都有一个类型为"single"的可报告属性"MeasuredValue"。 在该集群范围之外、浮点值在 ZCL 中很少使用、并且我在 ZCL 规范(R7和 R8)中没有找到类型为"single"的可报告属性的任何其他实例。

    zr_temperaturesensor 示例开箱即可正常使用。 使用附加属性时、只要我不为属性配置报告、它也可以正常工作。 借助上述 memcpy 权变措施、它也适用于报告。

    我假设报告适用于整数类型、因为 Arm Cortex-M4 CPU 可以处理未对齐的加载/存储指令、而 FPU 则不能。 但即使对于整数、解引用未对齐的指针也会导致 C 中出现未定义的行为、因此当前的实现 是不可移植的。

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

    尊敬的 Christian:

    感谢您提供反馈、报告此问题以及为 SimpleLink F2 SDK Z-Stack 解决方案提供可行的权变措施。  在 TI 的年度堆栈测试中、可能忽略了这种细微差别、因为它不会在现有的默认示例中激增。  尽管如此、我已通知软件开发团队此问题并提交了错误通知单、以便在将来的 SDK 版本中解决此问题。

    此致、
    瑞安

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

    您好、Ryan、

    感谢你和 Siri 的快速响应和行动。

    此致、
    克里斯蒂安