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.

[参考译文] TM4C129XNCZAD:TM4C OneWire 应用手册:枚举错误

Guru**** 2419530 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/791638/tm4c129xnczad-tm4c-onewire-application-note-enumeration-error

器件型号:TM4C129XNCZAD

您好!

spma057示例代码(修订版 C) www.ti.com/.../litabsmultiplefilelist.tsp

问题发生在与要读取的第一个 ROM ID 第一次冲突时、如下所示:

  1. 起始条件:i32ConflictBitNumber =-1 (有符号)、ui32BitNumber = 0 (无符号)、i32NumSlaves = 0 (有符号)
  2. 由于第376行中有一个隐式类型转换、比较进入其它路径
  3. 否则 if (ui32BitNumber > i32ConflictBitNumber)
    { 

  4. 通过访问之前的 ROM ID、i32NumSlaves=0、我们超出了 ROM ID 数组的边界、导致不可预知的代码执行
//
//采用上一个 ROM 编号的路径。
//从找到的最后一个 ROM 编号获取最后一条路径
//
ui32WriteBit =(g_pui64SlaveAddr[i32NumSlaves-1]
>> ui32BitNumber)& 1);

在大多数情况下、这不会导致严重问题、因为无效的数组 locatoin 只被读取、并且算法将继续用于所有其他冲突位置。

但是、由于此问题、我遇到了一些 ID 未找到的问题。 由于它取决于存储器布局、调试过程有点令人沮丧。

@TI 支持:您可以确认吗? 请使用以下任一修复更新您的示例代码:

  1. 第376行
否则、if (((int32_t) ui32BitNumber > i32ConflictBitNumber)
{

第199行

//
//在细胞迭代中被考虑的位的数量。
//
int32_t ui32BitNumber; 

此致

Fabian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Fabian、
    感谢您花时间对此进行调试。 我同意您的类型转换建议。 我们将记下该内容、并可能在将来更新应用手册。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的确认。

    在应用示例中包含修复程序时、您能告诉我吗

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Fabian、
    现在我不能真正告诉你时间轴。 它将需要是下一个 TivaWare 版本的一部分。