Guten Abend, ich habe folgendes Problem: In der Anwendung Arduino habe ich ein Programm erstellt, welches ich auf ATTINYs flashen möchte. An sich kein Problem, aber sehr arbeitsaufwendig, da ich 100 ATTINYs flashen möchte. Jeder ATTINY bekommt dabei eine individuelle I2C-Adresse und ID. Sobald die richtige Adresse bei Arduino eingestellt ist, erzeuge ich mit Arduino eine HEX-Datei. Diese HEX-Datei öffne ich mit einem Flash-Tool, welches die ATTINYs dann letztendlich flasht. Dieser Prozess ist somit überhaupt nicht optimiert, was ich ändern möchte. Den momentan benötige ich +- 1 Minute pro ATTINY, was definitiv zu lange ist, vor allem bei 100 Stück... Meine Frage richtet sich an dieser Stelle an die Prozessoptimierung. Der Wunschzustand ist das öffnen einer Anwendung, die in der Anwendung Arduino die beiden Parameter (ID, Adresse) verändern kann, dann automatisch das HEX-File erzeugt und danach das Flashen initialisert und durchführt, sodass ich, als Bediener, nur noch die Attinys in den Sockel legen muss. Mein Ansatz war eine Batch-Datei, in der ich mittels Shortcuts die nötigen Befehle aufrufe, doch mit meinem Wissensstand kann man keine Shortcuts mit einer Batch-Datei ausführen. Gibt es eine andere Anwendung/Programmiersprache, mit der man auch bei Arduino die entsprechenden Zeilen hochzählen lassen kann, bzw. mittels Shortcuts alles steuern kann?
Gibt es noch andere Möglichkeiten meinen "Wunsch" umzusetzen? Also eine intuitivere Anwendung?
Falscher Ansatz. Modifiziere direkt das .Hex File, dafür musst du dich natürlich ein bisschen mit linker und make befassen um die adressbereiche zu definieren und frei zu halten. Oder du nutzt das eeprom zum speichern der Adressen, dann gibt's dafür ein extra Hex mit wenig inhalt. Das modifizierte Hex wird dann geflasht. Dafür gibt's fertige Tools, Segger zb bietet das in jflash sogar ab werk..
Nic schrieb: > 1 Minute pro ATTINY Dann hättest du jetzt schon 40 Stück fertig. Nur keine Angst, die fehlenden 60 schaffst du auch noch. Es geht manchmal schneller, mit ungünstigen Werkzeugen etwas zu erledigen, als sich erst in ein neues Werkzeug einzuarbeiten. Ich drücke dir die Daumen. MfG von der Spree Frank
Frank S. schrieb: > Es geht manchmal schneller, mit ungünstigen Werkzeugen etwas zu > erledigen, als sich erst in ein neues Werkzeug einzuarbeiten. https://me.me/i/geeks-and-repetitive-tasks-time-a-spent-loses-runs-script-c452944bc2a54d39abc546adff780616
Mir ist natürlich bewusst, das ich hierdurch zeit verlieren werde, aber es geht auch darum zu sehen, wie sowas gehandhabt wird
Bin nicht 100%ig sicher, ob ich die Problemstellung richtig verstanden habe, daher erzähle ich evtl. gerade Unsinn. Aber eventuell wäre folgender Ansatz möglich/sinnvoll: - Statt der Arduino-IDE nimmst Du PlatformIO zum kompilieren und flashen - die sich mit bei jedem Attiny verändernden Parameter I2C-Adresse und ID übergibst Du als #define per "-D" Kommandozeilenparameter, z.B. "-DI2C_ADDRESS=23 -DID=32" - Das ganze packst Du in ein Shell-Script/Batch-Datei, die dann in einer Schleife nach und nach für jeden der Attinys zuerst die passende Firmware kompiliert und dann flasht
Man kann Arduino Sketche ohne IDE mit einer Batch-Datei compilieren und flashen: https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc
Gibt es dafür nicht sed? Also in die Originaldatei einen markanten Platzhalter an die Stelle der Adresse und dann in einer Schleife den Platzhalter gegen einen Counter ersetzen, dabei die Datei ans Ziel schreiben (das macht der sed), dann neu compilieren und flashen. Wie die entsprechenden Konsolenbefehle dafür aussehen, das sollte sich doch herausfinden lassen.
ThomasW schrieb: > Gibt es dafür nicht sed? Und 100000 andere Tools, die das Gleiche (und mehr) leisten könnten. Das Problem ist: in alle muss man sich einarbeiten und dafür ist der TO offensichtlich zu faul. Er ist ja sogar schon zu faul dazu gewesen, selbst so ein Tool zu suchen...
c-hater schrieb: > Das Problem ist: in alle muss man sich einarbeiten und dafür ist der TO > offensichtlich zu faul. Kann man sich nicht erst dann einarbeiten, wenn man weiß worin? c-hater schrieb: > Er ist ja sogar schon zu faul dazu gewesen, selbst so ein Tool zu > suchen... weil er nicht genau weiß wonach er suchen soll und nun Rat von erfahrenen Leuten sucht, da stellt er ne Frage in einem Forum. Was für ne verrückte Welt ...
Hier geht es bereits um kleine Industriemengen. Also könnte sich -nach dem Dauereinsatz unter Umwelteinflüssen- ja die Frage stellen, ob ein gewisses Exemplar nach einer Zeit immernoch das korrekte Programm in seinem FlashROM hat. Wenn nun per "-DI2C_ADDRESS=23 -DID=32" (oder per "sed" oder per Desktopautomation oder...) Der Flashinhalt individualisiert wird, also jedes Exemplar andere Prüfsumme aufweist, müsste dies aufwändig administrativ gebuchhaltet werden um nach Zeit im Zweifelsfall vergleichen zu können. Bitte für jede Version des Programms... Die "Richtige Lösung[TM]" muss also darauf hinaus dass pro Programmversion die Prüfsumme für alle Exemplare gleich ist und solche Exemplarindividualdaten im gesonderten EEPROM-Datenbereich abgelegt ist. Auch Ersatzduplikate anfertigen wird so machbar. (ich weis jetzt nicht f. kleine Tinys, aber den selben Quellcode heute und in 1 Wo/nach reboot des Entwicklungsrechners/nach Compilerupdate ergibt durchaus unterschiedliche Prüfsummen d. Flashinhaltes) Wenn solche Exemplarindividualdaten mehr werden als ins EEPROM passen, muss das FlashROM partitioniert werden und die Geschichte führt durchaus bald zu (Flash(ROM))tauglichen Dateisysteme. Dieses Fass passt von der Größe eher nicht mehr zu ATtiny, erwähne ich also nur so als Ausblick, für die Welt in 32bit & co...
Hallo ThomasW da brauchst du gar nicht zu analysieren: So ist er einfach "unser" c-hater (und so ca. 5 andere forenbekannte "Spezialisten") - fachlich durchaus Ahnung, aber voll Vorurteile, Vorverurteilungen und im Besitz der Absoluten Wahrheit...
c-hater schrieb: > Das Problem ist: offensichtlich zu faul. Ich sehe das Problem eher da, dass man eine bestimmte Version bauen will, die bereits im Source Repository so gekennzeichnet ist. Nicht erst bauen (dabei als Seiteneffekt den Quelltext ändern) und dann die neue Versionsnummer einchecken.
Wir haben immer ein paar Studendenten. Die sitzen dann eben den ganzen Tag. Aber irgendwie muß man sein Studium ja finanzieren.
Stefanus >Man kann Arduino Sketche ohne IDE mit einer Batch-Datei compilieren und >flashen: >https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc Der Link von Stefanus sollte eigentlich schon ausreichen. Man muss nur noch herausbekommen, wie man die "-D" Optionien die man überlicherweise beim GCC findet, in die Parameterliste mit aufnimmt. ( mit -D kann man in der Kommandozeile des GCC Definitionen anhängen, die im Programm dann wie #defines wirken ).
Nic schrieb: > In der Anwendung Arduino habe ich ein Programm erstellt, welches ich auf > ATTINYs flashen möchte. An sich kein Problem, aber sehr > arbeitsaufwendig, da ich 100 ATTINYs flashen möchte. Jeder ATTINY > bekommt dabei eine individuelle I2C-Adresse und ID. Im richtigen Leben definiert man sich eine struct{}, die alle exemplarspezifischen Konstanten sowie eine Prüfsumme (wichtig!) enthält. Dann erstellt man im Linkerskript ein eigenes Segment, in das per #pragma oder __attribute__(section=...) nur diese struct plaziert wird. Oder: Flash-Adresse definieren, per memcpy_P() direkt den Flash-Inhalt in die struct im RAM laden, und los gehts. Ist vielleicht einfacher, braucht aber extra RAM, was doof ist, wenn man nur 512 Bytes hat. Jetzt kann man das Programm compilieren und ein Hexfile daraus machen. Die Details dazu findest Du in der Gnu-Dokumentation. Ich würde jetzt aus den hex mit objcopy oder hex2bin ein Binärfile machen, weil das einfacher zu bearbeiten ist. Wo Deine exemplarspezifischen Konstanten sind, weißt Du - das hast Du nämlich im Linkerskript festgelegt. Also ist es auch kein Problem, die Position im .bin zu finden, zu modifizieren und wieder ein flashbares .hex zu erzeugen. Ich würde eine Prüfsumme in die struct aufnehmen, damit Du feststellen kannst, ob das geflashte Binery bereits passend konfiguriert ist. Du könntest sogar erst das Programm und erst in einem zweiten Schritt die exemplarspezifischen Daten flashen. Dann sollten die Defaultwerte im Programm-Binary 0xff sein, damit Du diesen Bereich überprogrammieren kannst. Und: Deine struct sollte im Flash an einer Page-Grenze beginnen. Du kannst das Flash nicht byteweise löschen und beschreiben, sondern immer nur ganze Pages. Steht alles im Datenblatt. fchk
Nic schrieb: > An sich kein Problem, aber sehr > arbeitsaufwendig, da ich 100 ATTINYs flashen möchte. Jeder ATTINY > bekommt dabei eine individuelle I2C-Adresse und ID. > Sobald die richtige Adresse bei Arduino eingestellt ist, erzeuge ich mit > Arduino eine HEX-Datei. Diese HEX-Datei öffne ich mit einem Flash-Tool, > welches die ATTINYs dann letztendlich flasht. Sehr aufwändig und man mag gar nicht an das nächste Firmware-Update denken. Warum flasht du sie nicht alle auf eine Default-Adresse, die du irgendwo ins EEPROM schreibst? Dann nimmst du einen zweiten Controller, dessen einzige Aufgabe es ist, auf dem Bus nach einem TINY mit Default-Adresse zu suchen. Sobald er einen findet, schiebt er ihm eine I2C-Adresse und eine ID zu und der ATTiny merkt sich beides für nächste Mal. Die TINYs steckst du dann der Reihe nach kurz mal auf den ID-Vergabe-Controller und schickst ihnen ihre zugeordneten persönlichen Daten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.