修复了TinyWireS库的i2c地址问题
Fixing I2C-address issue with TinyWireS library
嘿,我最近发布了一个I2C (slave)库TinyWireS的问题。由于某种原因,我不能使用高于63的从地址。
我现在想开始一个新的线程,以解决这个问题:
您可以在我的上一篇文章中找到更多关于我的项目的信息。主、从和电路的代码仍然是相同的。
我发现了:
当主服务器试图通过特定地址与从服务器通信时,从服务器调用ISR函数(file: usiTwiSlave.c line: 569)。如果主服务器发送到不同的从服务器,这个函数也会被调用,因为它会检查地址是否正确。
但是:
当我告诉主服务器连接从服务器> 63时,ISR永远不会执行。不幸的是,我没有发现ISR函数在哪里被调用。我搜索了所有文件,但没有找到任何"父"函数。
我很确定我快要找到bug了,但是我没有太多的C/c++经验。
我希望你能帮助我!
我不知道您是否已经解决了这个问题,但是从我的分析来看,我怀疑这个问题比您建议的要复杂一点。我不相信这个问题肯定是在TinyWireS(尽管它可能存在),我这么说的原因是我的奴隶代码与大多数主人工作得很好,只有当我运行ESP8266作为主人时,我才看到与您描述的相同的问题。ESP8266工作良好的主与非attiny85奴隶在任何地址。没有示波器,我不能确定,但我认为i2c开始和地址的第一个位可能存在时序问题,当它是1时,这意味着从USI产生中断的条件不满足。考虑到很少有人报告ATTiny85 8MHz的问题,我不排除时序问题是与主端有关,但我很确定这是一个微妙的时序问题。我还应该提到,偶尔,我可以在ATTIny85上识别请求,当它有一个高地址时,但这是罕见的,再次表明时序问题。我希望这有助于构建这个问题的图像,如果您有能力确定i2c总线的范围,我怀疑问题将变得明显。
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在c++程序中找到函数的地址
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 被解释为低级别const的const对象的地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 内联程序集printf将整数解释为地址
- 为什么指针不写入类的地址?
- 如何在C++中获取该对象的类声明中对象的地址?
- 通过按地址访问变量
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 函数名是c中该函数的第一条指令的地址吗
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- ReadProcessMemory() 不适用于像 0x2840C6C68D8 这样的长地址
- CUDA:统一内存和指针地址的更改
- Arduino上的不同I2C地址
- 修复了TinyWireS库的i2c地址问题