実行時間
私の知る限り、ボードの種類を検出することはできませんが、ATmegaデバイスIDは読み取ることができます。この質問の実行方法を確認してください。実行中にATmegaまたはATtinyデバイスの署名を読み取ることができますか?ただし、この方法を使用すると、ピン割り当てだけでなく、いくつかのレジスタ割り当てが変更されることに注意してください。したがって、コードは大幅に複雑になる可能性があります。利点はすべての変更されたレジスタ割り当ておよびその他のハードウェア依存関係を回避するできれば、単一の.hexファイルを使用してから直接デバイスをプログラムできることですavrdude
。
コンパイル時間
ボード/コントローラーのタイプを把握する別の方法は、コンパイル時です。基本的に、Arduino IDEで構成されたデバイスタイプに応じて、コードの一部をコンパイルするか、マクロを設定します。例については、次のコードスニペットを確認してください。
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define DEBUG_CAPTURE_SIZE 7168
#define CAPTURE_SIZE 7168
#elif defined(__AVR_ATmega328P__)
#define DEBUG_CAPTURE_SIZE 1024
#define CAPTURE_SIZE 1024
#else
#define DEBUG_CAPTURE_SIZE 532
#define CAPTURE_SIZE 532
#endif
コードスニペットは、https://github.com/gillham/logic_analyzer/wikiから恥知らずにコピーされました。デバイス固有のトリックについては、そのコードを確認してください。
ホストのオペレーティングシステムに応じて、サポートされているコントローラータイプは次のファイルにあります。
- Linux:
/usr/lib/avr/include/avr/io.h
- ウィンドウズ:
...\Arduino\hardware\tools\avr\avr\include\avr\io.h
Cプリプロセッサ(上記のコードを処理する)の使用は、おそらくこのサイトの範囲外です。http://stackoverflow.com詳細な質問には、がです。
Linuxを使用している場合は、次のように入力することで、サポートされているすべてのコントローラータイプを簡単に見つけることができます。
grep 'defined (__AVR' /usr/lib/avr/include/avr/io.h | sed 's/^[^(]*(\([^)]*\))/\1/'