Forum: Mikrocontroller und Digitale Elektronik Optiboot Pinkonfiguration für ATmega328P


von Vancouver (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.

von Vancouver (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.

von Vancouver (Gast)


Lesenswert?

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...

von Vancouver (Gast)


Lesenswert?

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().

von Oliver S. (oliverso)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

Vancouver schrieb:
> und du hast die Frage doch
> schon beantwortet.

Nein!
Aber jetzt weiß ich die Antwort.

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
Noch kein Account? Hier anmelden.