Arduino Bootloader anpassen?

Hallo,
ich habe mir hier(https://github.com/arduino/Arduino/blob/master/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c)
den Bootloader geholt, und wollte wissen, wie ich den Code ändern muss, damit der Bootloader z.B. immer Pin 13
anschaltet. Ich möchte dafür sorgen, dass ein Teil eines Sketches immer ausgeführt wird, egal ob
nun einer neuer Sketch draufgeladen wurde oder nicht.

Addi

Schau mal in Zeile 425 oder am Ende in flash_led().

Statt digitalWrite(PIN, HIGH); wird hier mit Ports und Bitmasken gearbeitet,
aber dein Beispiel Pin13 ist schon drin ( du musst nur an/aus umdrehen, dann bleibt's am Ende an )

Kann man auch die "einfachen" Befehle nutzen, wenn man alle Liberies einfügt?
Wo müsste man dann die Befehle im Quellcode setzen?

Addi

wenn man alle Liberies einfügt

... wird der Bootloader ziemlich groß, aber wenn es dir darauf nicht ankommt ...
Kannst ja auch mal in core den Code von digitalWrite ansehen, der meiste Aufwand ist die Fall-Unterscheidung zwischen verschiedenen Boards.

Wenn der pin eine Compilezeit-Konstante ist, wird alles einfacher, da bietet digitalWrite (unnötigen ?) Schnickschnack.

Mit Ports und |= und &=~ zu arbeiten, ist Gewöhnungssache.
Ist halt nicht mehr Arduino IDE Level , am Bootloader rumzufummeln :wink:

Kann ich dann die Befehle irgendwo in der main() schreiben, oder
muss ich das an einer Bestimmten Stelle einfügen?

Edit: Hab ertmal versucht den Quellcode zu compillieren, erhalte aber diese Fehlermeldung:
booting_168.cpp: In function 'int main()':
booting_168:424: error: 'NUM_LED_FLASHES' was not declared in this scope
booting_168.cpp: In function 'char getch()':
booting_168:974: error: 'MAX_TIME_COUNT' was not declared in this scope

Verwende den Quellcode der DAtei die ich oben verlinkt habe. Als Board habe ich den UNO,Fio,Nano und Lilypad verwendet.
Addi

In Deiner IDE findest Du die Datei auch: arduino-1.0.2/hardware/arduino/bootloaders/atmega/. Dort findest Du auch ein zugehöriges Makefile, das die notwendigen Definitionen vornimmt.

Mit der IDE kriegst Du einen Bootloader nicht kompiliert. Die IDE ist als Convenience-Tool für Anfänger und mit der Materie nicht sehr vertraute Personen gedacht. Jemand, der am Bootloader rumfummelt, sollte hingegen wissen, was er macht und entsprechend mit Makefiles und Kommandozeilen-Werkzeugen umgehen können (damit ich das "Warum" auch gleich erklärt habe). Der Bootloader für den UNO heisst im Übrigen optiboot, derjenige, den Du zu kompilieren versuchst, ist für die älteren Arduinos.

Nur wo muss ich jetzt den zusätzlichen Code einfügen?
Und kann man optiboot auch für den Atmega2560 einsetzen?

Addi

Und kann man optiboot auch für den Atmega2560 einsetzen?

Nein, der wird nicht unterstützt, für dem 2560 musst Du den stk500v2 nehmen.

Nur wo muss ich jetzt den zusätzlichen Code einfügen?

Ich bin ganz ehrlich: Wenn Du das fragen musst, solltest Du die Finger davon lassen. Je nach der Funktion, die Du ausführen möchtest, meistens irgendwo gegen Ende der main()-Funktion. Und ich sag's nochmals deutlich: Wenn Du den Code dort nicht verstehst, solltest Du keine Änderungen vornehmen, die Wahrscheinlichkeit, dass es nicht so funktioniert, wie Du Dir das vorstellst, ist relativ hoch.