I2C用のワイヤーライブラリの代替案

Wireライブラリ。 Wireは非常にうまく機能しますが、I2Cマスターとして機能するために必要なのはArduinoだけであり、Wireライブラリは無駄になっているようです。リソース:

私の目標は、データをまとめて送信することです(たとえば、32バイトまたは64バイト)。このデータはすでにSRAMの配列に格納されています。ここで、Wireライブラリを使用するときに、データを2番目のバッファにコピーするTwoWire::write関数を呼び出します。その後、WireTWIライブラリを利用します。twi_writeToはデータを3番目のバッファー。 「ちょっと不格好ですね」

DSSCircuits / I2C-Master-Library を見たことがありますが、よくわかりません。 「現在3年経過している最初のコミット後、コミットが行われていないため、どれほど成熟していますか。

コメント

  • 実際にありますか? RAMの使用上の問題?問題になる前に何かを最適化することは、多くの場合、無駄な作業です。
  • すべては、すぐにおよび/またはポータブルと最適に動作させたい。もちろん、ATmegaプログラマー'のマニュアルを入手して、周辺機器に書き込むことは自由です。自分で登録します。
  • dsscircuits ' ArduinoI2CマスターライブラリのWebページにはI2Cの5つのリビジョンが表示されますgithubリンクの対象となるライブラリ。おそらく、考えているリビジョンの開始点としては問題ありません。2012年1月以降にWireに修正が加えられている場合は、それらをI2Cに追加する必要があります。
  • > I2C用のWireライブラリの代替手段を独自に作成します。 i2cは、最初から作成するのが簡単なプロトコルの1つです。

回答

異議はありません。 DSS CircuitsI2Cマスターライブラリの使用方法

数年間更新されていない可能性がありますが、機能する場合は更新されます。 “する必要があります。マイクロコントローラーのライブラリが新しいプリンタードライバーやビデオドライバーなどをサポートする必要があるわけではありません。

機能する場合は機能します。

チップは変更されていません。 、そして最近の更新の唯一の本当の理由は、IDEが変更された(またはコンパイラが変更された)ためにコンパイルエラーが発生した場合です。このようなことが最近起こったのは、たとえばPROGMEMのようなルールが厳しい場合です。

コメント

  • このライブラリは非常に有望に見えましたが、実際にそうなっていることに注意してください。 AVRターゲットのみをサポートします。 Arduinoコアはさまざまなアーキテクチャ用に開発されているため、このライブラリはArduino互換ボードでは"動作しません"。たとえば、Adafruit 'のSTM32F405ベースのフェザーとは互換性がありません

回答

ProcyonAVRライブラリも確認する価値があります。今は少し古いですが、とてもプロフェッショナルで、ちょっとミニマルです。依存関係はそれほど多くないので、I2Cモジュールのみを使用しても問題ありません。それ以来、AVRI2C部分に新しいものはほとんどありません。

回答

Cosa TWI クラスは、I2Cデバイスドライバーサポートへの非常に異なるアプローチです。バッファに余分なSRAMをまったく使用しません。デバイスドライバーが非ブロッキングの場合、必要なバッファリングを処理する必要があります。また、Cosa TWIクラスは、マスター/スレーブ、「書き込みレジスタ-読み取りデータ」パターン、マルチスレッドを使用する場合のトランザクションなど、I2Cデバイスとの一般的な相互作用をサポートします。

ソフトウェアとハードウェアの Arduino-TWI ライブラリが利用可能です。 Arduino-GPIOライブラリを使用し、AVRおよびSAMベースのボードで使用できます。

いくつかの例: TWIスキャナー DS3231リアルタイムクロック/カレンダー PCF8574を備えたI2CLCDアダプター

回答

使いやすく一貫性のある呼び出しのために自分で2つのライブラリを作成しました:

AVRターゲット用に1つ:
cI2C

他のすべてのターゲットに同じ関数を使用する別のターゲット(基本的にはワイヤーライブラリのラッパー):
WireWrapper

どちらもIDEライブラリマネージャー内で利用できます。
どちらも割り込みを使用せずにマスターとして機能し、さまざまなスレーブを持つさまざまなターゲットでテストされます。
-UNO、cI2Cの場合はNano
-ゼロ、期限& WireWrapperの場合はESP8266

回答

一番上の質問に対してまったく異なるアプローチを使用できます。これに理由を与えた代替案を求める:バイナリ内の未使用のコードを取り除く。 実際に代替ライブラリを使用しなくても、未使用のコードを削除できます。 コンパイルされたバイナリから未使用のコードを除外するようにコンパイラとリンカに指示できることに注意してください。 コンパイルフラグを使用するだけです:

CFLAGS += -Wl,-static CFLAGS += -ffunction-sections CFLAGS += -Wl,--gc-sections 

Rach関数は独自のセクションにあります。

LDFLAGS += -Wl,-gc-sections 

これは、未使用のセクションを削除するリンカーに-gc-sectionsフラグを送信するようにGCCに指示します。 そして出来上がり! 未使用のセクションは削除されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です