Wire
ライブラリ。 Wire
は非常にうまく機能しますが、I2Cマスターとして機能するために必要なのはArduinoだけであり、Wire
ライブラリは無駄になっているようです。リソース:
私の目標は、データをまとめて送信することです(たとえば、32バイトまたは64バイト)。このデータはすでにSRAMの配列に格納されています。ここで、Wire
ライブラリを使用するときに、データを2番目のバッファにコピーするTwoWire::write
関数を呼び出します。その後、Wire
はTWI
ライブラリを利用します。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に指示します。 そして出来上がり! 未使用のセクションは削除されます。