PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sleep-Funktion bei ASURO



stephan187
21.12.2009, 18:29
Hallo,

ich habe heute meinen ASURO zusammengebaut und mir ein Programm zum Testen der Linienverfolgung runtergeladen. Dieses Programm funktioniert nicht so, wie es sollte. Sobald die Funktion Sleep aufgerufen wird, hält das Programm an. Ohne Sleep arbeitet das Programm einwandfrei.

Wo liegt der Fehler?

#include "asuro.h"
#include "stdlib.h"

int main (void)
{
int t;

unsigned int data[2];
unsigned char links[7];
unsigned char rechts[7];
SerWrite ("Hello World\n\r", 13);

for (t=0;t<25;t++)
{
StatusLED (RED);
LineData (data);

itoa (data[0], links, 10);
itoa (data[1], rechts, 10);

SerWrite (links, 6);
SerWrite ("\n\r", 2);
SerWrite (rechts, 6);
SerWrite ("\n\n\r", 3);
Sleep(216);
StatusLED (GREEN);
}
StatusLED (GREEN);

return 0;
}

radbruch
21.12.2009, 19:33
Hallo,

Glückwunsch zum asuro und willkommen im RN-Forum.

Dass bei deinem Programm überhaupt etwas funktioniert ist echt erstaunlich. Es fehlt das Init(). Deshalb wird wohl der Timer für Sleep() nicht initialisiert. (Die serielle Schnittstelle wird schon im Bootloader initialisiert und funktioniert deshalb trotzdem)

Außerdem sollte ein Programm für einen AVR (wie der Mega8 des asuro) nie beendet werden, d.h. main() sollte mit einer Endlosschleife enden, das letzte "return 0" sollte nie erreicht werden:

while(1);
return 0;

Da es über main() keine übergeordnete Funktion gib, springt der AVR beim letzten return irgendwo ins Nirwana. Laut Datenblatt könnte dabei (wohl eher theoretisch) im AVR ein Wert verändert werden der einen Weiterbetrieb des AVRs unmöglich macht.

btw: Es gibt hier im RN-Forum einen extra Bereich für den asuro:

https://www.roboternetz.de/phpBB2/viewforum.php?f=44

Gruß

mic

stephan187
21.12.2009, 22:30
Danke, Danke, Danke!

Es läuft jetzt. Dann kann es ja jetzt mit dem lustigen Teil losgehen;-)

Ein gutes Forum, in dem man schnelle und gute Hiilfe bekommt!

Gruß

Stephan