Optiboot Pinkonfiguration für ATmega328P

Gast #6648538
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?
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.