Hallo,
ich habe den Optiboot-Bootloader (Version 8) für meine Anwendung so
modifiziert, dass gleich nach dem Start einige Pins als Ausgänge
konfiguriert werden und eine kurze Signalfolge ausgegeben wird.
Das funktioniert auch problemlos auf einem ATmega328P. Allerdings wird
die Pinkonfiguration im Laufe des weiteren Bootprozesses irgendwo wieder
rückgängig gemacht. Um die Pins im User-Programm (erzeugt mit
Arduino-IDE) nutzen zu können, müssen sie erneut als Ausgänge
konfiguriert werden. Das ist zwar nicht wirklich ein Problem, aber ich
hatte gedacht, wenn sie schon mal passend konfiguriert sind, bleibt das
auch so.
Vielleicht bin ich betriebsblind, aber ich finde im Bootloader keine
Stelle, wo die DDR-Register erneut geschrieben werden. Geschieht das
vielleicht standardmäßig in der Arduino-Anwendung? Kann man das
irgendwie verhindern?
Ich würde es dabei belassen. Niemand erwartet, dass der Bootloader
irgendwelche Register in einem nicht-standard Zustand hinterlässt. Das
würde bloß Verwirrung stiften.
Jetzt magst du noch denken "ich weiß was ich gemacht habe, das kann mich
nicht verwirren". Doch schon in wenigen Jahren wirst du es vergessen,
wenn du dich nicht täglich damit befasst.
Bei der Entwicklung ist es wie im Straßenverkehr: Jede überraschende
Handlung ist zu vermeiden.
Vancouver schrieb:> Geschieht das> vielleicht standardmäßig in der Arduino-Anwendung? Kann man das> irgendwie verhindern?
Testweise:
In dem du loop() und setup() weglässt, und stattdessen eine eigene
main() verwendest.
Dann fasst das Arduino Framework keine Hardware mehr an.
Wobei ich dazu sagen möchte:
Der Bootloader hat nur einen Job.
Und sollte die Hardware so hinterlassen, wie er sie vorgefunden hat.
Stefan ⛄ F. schrieb:> Niemand erwartet, dass der Bootloader> irgendwelche Register in einem nicht-standard Zustand hinterlässt.
Ich gebe dir recht, wenn es sich um einen normalen Arduino handelt, der
für verschiedene Anwendungen verwendet werden kann. In meinem Fall ist
der Prozessor aber fest verbaut, und die Pins sind immer Ausgänge,
anders funktioniert das Design nicht. Und da der Bootloader eh schon
anwendungsspezifisch ist und für nichts anderes verwendet werden kann,
würde mich eher die Neukonfiguration der Pins verwirren.
Also bleibts dabei:
Deine Anwendung geheim.
Deine Bootloader Modifikation geheim.
Schaltung natürlich auch geheim.
Also alles vollkommen unüberprüfbar für uns.
Und dennoch sollen wir dir sagen, was falsch läuft.
1. Mir scheint deine Erwartungshaltung "leicht" überzogen.
2. Ich gebe auf, dann dagegen ist nichts auszurichten.
Arduino Fanboy D. schrieb:> In dem du loop() und setup() weglässt, und stattdessen eine eigene> main() verwendest.> Dann fasst das Arduino Framework keine Hardware mehr an.
Cool... das wusste ich auch noch nicht. Ok, das probiere ich mal aus.
Gracias...
Arduino Fanboy D. schrieb:> Deine Anwendung geheim.
Oh Mann, jetzt geht das Herumgehacke schon wieder los.
Kann ich nicht mal eine einfache Frage zur Funktion eines Bootloaders
stellen, ohne gleich Sourcecodes und Schaltpläne zu veröffentlichen?
Nein, nichts davon ist "geheim", aber es tut hier einfach nichts zur
Sache. Ich habe das Problem klar umrissen, und du hast die Frage doch
schon beantwortet.
Nebenbei bemerkt tritt der Effekt auch beim originalen unveränderten
Optiboot auf, nämlich am LED-Pin. Das ist also keine Besonderheit meines
Designs. Du kannst dir den Optiboot-Sourcecode und das
Arduino-Schaltungsdesign anschauen, wenn du meinst dass dir das hilft.
Trotzdem Danke für den Tip mit main().
Arduino Fanboy D. schrieb:> Testweise:> In dem du loop() und setup() weglässt, und stattdessen eine eigene> main() verwendest.
Dauerhaft: in dem du nicht nur setup() und loop() weglässt, sondern
gleich die ganze Arduino-Programmierumgebung. Dann musst du zwar das
ein-oder andere selber programmieren, dafür weißt du dann auch, was
wann, wo, und warum passiert.
Oliver
Vancouver schrieb:> ... viel bla bla bla ....> wenn du meinst dass dir das hilft.
Ich habe doch kein Problem.
Angeblich hast du eins.
Es bleibt dabei:
Arduino Fanboy D. schrieb:> dagegen ist nichts auszurichten.