Go Down

Topic: Überlaufprobleme umgehen (Read 1 time) previous topic - next topic

Chris72622

Hallo,

ich programmiere momentan eine Art Mediensteuerung und habe diverse zeitkritische Komponenten im Code. Da das Ganze am Ende fest installiert und praktisch ununterbrochen laufen soll, stellt sich mir die Frage, was ich gegen sog. Überlaufprobleme machen kann.

Gerne einfach nur evtl. passende Links posten. Ich wühl mich dann durch. :)

Gruß Chris

uwefed

Überlauf von was?
Grüße Uwe

markbee

Wenn Du hardwarenah programmierst dürfte bei richtiger Strukturierung kein ungewollter Überlauf erfolgen.
Wenn Du allerdings bestimmte Arduino-Funktionen wie delay(), digitalWrite() benutzt, kannst Du sehr schnell Probleme bekommen, da diese im Gegensatz zur direkten Programmierung viele Taktzyklen verbrauchen.
Für zeitkritische Abläufe empfiehlt sich i.d.R. die Benutzung von Interrupts - generell würde ich die Register der MCU direkt beschreiben und auf den Arduino-Layer verzichten.
Ein Blick ins Atmel-Datenblatt ist da vielleicht ein erster Ansatzpunkt.

Chris72622

Hallo,

was meinst Du mit "direkter Programmierung". Bin Anfänger und arbeite bisher ausschließlich mit der Arduino IDE. Kann man mit ihr auch "direkt" programmieren. Hast Du mir evtl. eine Buchempfehlung?

Interrupts kann ich laut dem was ich darüber gelesen habe nicht nutzen, da mein Arduino nur zwei InterrupteingÄnge hat, ich jedoch mehr als zwei "Eingabekomponenten" (Taster) verbauen werde.

Gruß Chris

Jomelo

#4
Jan 11, 2013, 09:44 am Last Edit: Jan 11, 2013, 10:01 am by Jomelo Reason: 1
Direkte Programmierung => arbeiten mit Registern  ohne das Arduino Framework.

Taster sollten nicht unbedingt an Interrupts angeschlossen werden, da die Interrupts dafür viel zu schade sind. (Der Interrupt Kontroller würde sich langweilen ;-))


So programmiert man Mikrocontroller allgemein/direkt, ohne Framework:

Code: [Select]

//2 Pins als Ausgang deklarieren und einen als Eingang
DDRA = 0b00000011; // 6 Eingänge 2 Ausgänge

//den ersten Pin auf "High" setzen
PORTA |= (1 << PA0);
//den gleichen Pin auf "Low" setzen
PORTA &= ~(1 << PA0);

//überprüfen ob der Eingang gesetzt ist
if(PINA2) {
 //Ausgang setzen
 PORTA |= (1 << PA1);
} else {
 PORTA &= ~(1 << PA1);
}

Go Up