Laufzeit
Meines Wissens können Sie den Kartentyp nicht erkennen, aber Sie können die ATmega-Geräte-ID lesen. Überprüfen Sie diese Frage, wie es getan werden kann: Kann eine ATmega- oder ATtiny-Gerätesignatur während des Betriebs gelesen werden? Beachten Sie jedoch, dass sich bei Verwendung dieser Methode mehrere Registerzuweisungen ändern, nicht nur die Pinbelegung. Daher kann Ihr Code erheblich komplexer werden. Der Vorteil ist, dass Sie , wenn Sie es schaffen, alle sich ändernden Registerzuordnungen und andere Hardware-Abhängigkeiten zu umgehen, eine einzige .hex-Datei verwenden können, um Ihre Geräte direkt zu programmieren avrdude
.
Kompilierzeit
Eine andere Möglichkeit, den Typ der Karte / Steuerung herauszufinden, ist die Kompilierungszeit. Grundsätzlich kompilieren Sie Teile des Codes oder stellen Makros ein, abhängig vom in der Arduino IDE konfigurierten Gerätetyp. Überprüfen Sie dieses Code-Sniplet für ein Beispiel:
#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
Das Code-Sniplet wurde schamlos kopiert https://github.com/gillham/logic_analyzer/wiki Überprüfen Sie den Code auf weitere gerätespezifische Tricks.
Abhängig vom Betriebssystem Ihres Hosts finden Sie die unterstützten Controllertypen in der folgenden Datei:
- Linux:
/usr/lib/avr/include/avr/io.h
- Windows:
...\Arduino\hardware\tools\avr\avr\include\avr\io.h
Die Verwendung des C-Präprozessors (mit dem der obige Code verarbeitet wird) ist für diese Site möglicherweise nicht zulässig. http://stackoverflow.com wäre der bessere Ort für detaillierte Fragen.
Wenn Sie unter Linux arbeiten, können Sie leicht alle unterstützten Controllertypen finden, indem Sie Folgendes eingeben:
grep 'defined (__AVR' /usr/lib/avr/include/avr/io.h | sed 's/^[^(]*(\([^)]*\))/\1/'