Pages: [1]   Go Down
Author Topic: Arduino Bootloader anpassen?  (Read 617 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

  / \    _|  _| o
 /--\ (_| (_| |

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2743
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 )
Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Addi
« Last Edit: November 26, 2012, 12:22:13 pm by Addi » Logged

  / \    _|  _| o
 /--\ (_| (_| |

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2743
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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  smiley-wink
Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: November 26, 2012, 02:57:26 pm by Addi » Logged

  / \    _|  _| o
 /--\ (_| (_| |

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4702
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4702
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Pages: [1]   Go Up
Jump to: