Spacy Bar
05.06.2014, 17:39
Hallo Leute,
immer wenn ich neue Programme auf den ASURO flashe und ihn dann anschließend starte leuchtet die Status-LED grün und der ASURO steht, obwohl das Programm etwas völlig anderes vorsieht. Ich hab schon versucht andere Programme darauf zu flashen aber überall das gleiche, auch wenn´s vorher funktioniert hatte.
Kann sich das jemand erklären? Am Prozessor kann es eigentlich auch nicht liegen, mein ASURO ist nämlich noch neu.
Bei Ideen bitte melden!
LG
Spacy Bar
robots4-ever
05.06.2014, 19:21
Schon mal versucht den "Self Test" nochmal drauf zu Flashen?
Spacy Bar
05.06.2014, 20:38
Schon mal versucht den "Self Test" nochmal drauf zu Flashen?
Hab´s grade versucht. Der Selbsttest klappt soweit. Habe danach eins der unkomplizierten Programme darauf geflasht, auch kein Problem. Dann habe ich aber eins der komplexeren Programme geflasht und da hatte ich den Salat: Wieder nur die Status-LED, wieder keinen Mucks vom Motor, den Back-LED´s und auch nicht von der Front-LED.
Bin den Programmcode nochmal durchgegangen, auch keine Probleme. Daran liegt´s also nicht.
LG
Spacy Bar
robots4-ever
05.06.2014, 20:47
Okey
was definierst als "Komplex" kannst du mal eine Beispiel nennen/Posten?
Spacy Bar
05.06.2014, 21:36
Mit komplex meine ich Programme mit mehreren Funktionen, mehr Fallunterscheidungen/Verzweigungen und generell längere Programme.
LG
Spacy Bar
Ist dein geänderte Program auch gespeichert für das Kompilieren? Ist die Hex datei auch von ein wesentliche andere Datum oder Zeitpunkt. Oder kann es sein das du jedes mal die Originalen FirstTry Beispiel zu den Asuro Flasht? Leider werden sie allen Test.hex genannt durch die Aufbau von das Makefile.
Wenn das kompilieren geklappt hat, kannst du die Nahm der Hex-datei ohne Problemen nach Wunsch andern. Zbs. mit Version-nummer.
Du wurdest nicht die erste sein die das vergessen ist.
Spacy Bar
06.06.2014, 15:25
Das Programm war gespeichert, der FirstTry ist es nicht, da ich die neu generierte Datei immer direkt umbenenne.
LG
Spacy Bar
Ok, dann bitte las den Code sehen. Vielleicht geht es am Anfang in einer Endlos-schleife und komt nicht wieder aus den Koma.
[edit]Auch schon mal fertige Hex-dateien von zbs. Arexx-Henk ausprobiert? http://home.kpn.nl/h.van.winkoop/Asuro/Software/AsuSfwPagFrm.htm
Spacy Bar
06.06.2014, 15:40
Hier der Quellcode (Vorsicht, Lang!):
#include "asuro.h"
unsigned char right;
unsigned char left;
unsigned char time;
unsigned char dir;
void motorcontrol(unsigned char dir, unsigned char left, unsigned char right, unsigned char time){
int counter = 0;
if(dir == 2){
MotorDir(FWD,FWD);
}
else if(dir == 1) {
MotorDir(RWD,RWD);
}
else if(dir == 0){
MotorDir(BREAK,BREAK);
}
MotorSpeed(left,right);
if(left+10 > right){
BackLED(ON,OFF);
}
else if(left+10 < right){
BackLED(OFF,ON);
}
else{
BackLED(OFF,OFF);
}
do{
Sleep(255);
counter++;
}
while(time >= counter);
}
int switchcontrol(){
if(PollSwitch()==0){
dir = 2;
right = 255;
left = 245;
time = 0;
motorcontrol(dir, left, right, time);
return 0;
}
else if(PollSwitch()==32){
dir = 1;
right = 255;
left = 245;
time = 255;
motorcontrol(dir, left, right, time);
dir = 2;
right = 200;
left = 255;
time = 255;
motorcontrol(dir, left, right, time);
return 0;
}
else if(PollSwitch()==16){
dir = 1;
right = 255;
left = 245;
time = 255;
motorcontrol(dir, left, right, time);
dir = 2;
right = 175;
left = 255;
time = 255;
motorcontrol(dir, left, right, time);
return 0;
}
else if(PollSwitch()==8){
dir = 1;
right = 0;
left = 245;
time = 223;
motorcontrol(dir, left, right, time);
dir = 2;
right = 255;
left = 0;
time = 223;
motorcontrol(dir, left,right,time);
return 0;
}
else if(PollSwitch()==4){
dir = 1;
right = 255;
left = 0;
time = 223;
motorcontrol(dir, left, right, time);
dir = 2;
right = 0;
left = 245;
time = 223;
motorcontrol(dir, left, right, time);
return 0;
}
else if(PollSwitch()==2){
dir = 1;
right = 255;
left = 245;
time = 255;
motorcontrol(dir, left, right, time);
dir = 2;
right = 255;
left = 175;
time = 255;
motorcontrol(dir, left, right, time);
return 0;
}
else if(PollSwitch()==1){
dir = 1;
right = 255;
left = 245;
time = 255;
motorcontrol(dir, left, right, time);
dir = 2;
right = 255;
left = 200;
time = 255;
motorcontrol(dir, left, right, time);
return 0;
}
else if(PollSwitch()>32){
dir = 1;
right = 255;
left = 245;
time = 255;
motorcontrol(dir, left, right, time);
motorcontrol(dir, left,right, time);
motorcontrol(dir, left, right, time);
dir = 2;
right = 255;
left = 0;
time = 200;
motorcontrol(dir, left, right, time);
return 0;
}
}
int statuscontrol(){
StatusLED(GREEN);
int retval;
SerWrite("Programm startet!\n\r",21);
while(1){
retval = switchcontrol();
if(retval == 0){
SerWrite("Alles in Ordnung!\n\r",21);
BackLED(OFF,OFF);
}
else if(retval==1){
SerWrite("Steuerungsfehler!\n\r",21);
break;
}
else {
SerWrite("Unbekannter Fehler!\n\r",22);
dir = 0;
right = 0;
left = 0;
time = 0;
motorcontrol(dir, right, left, time);
BackLED(OFF,OFF);
break;
}
}
while(1){
StatusLED(RED);
dir = 0;
right = 0;
left = 0;
time = 0;
motorcontrol(dir, right, left, time);
BackLED(OFF,OFF);
SerWrite("Ende!\n\r",8);
while(1){
Sleep(255);
}
}
return 0;
}
int main(void){
Init();
while(1){
int statuscontrol();
}
return 0;
}
Das ist ein Beispiel, aber bei mehreren anderen Programmen gibt´s das Problem auch.
LG
Spacy Bar
Wenn ich das Programm Kompiliere bekomme ich verschiedene Warnungen:
test.c:36: warning: function declaration isn't a prototype
test.c:141: warning: function declaration isn't a prototype
test.c: In function 'statuscontrol':
test.c:144: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c:148: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c:152: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c:156: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c:174: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c: In function 'main':
test.c:185: warning: function declaration isn't a prototype
test.c: In function 'switchcontrol':
test.c:139: warning: control reaches end of non-void function Dein Anruf von statuscontrol in dem main While-schleife ist merkwurdig. (Das findet den Kompiler auch: test.c:185) Ich vermute den Kompiler seht das als ein Funktion Deklaration, und nicht den Anruf davon. Und das wurde dann als ein nichts machende Endlos-schleife Funktionieren. Las das "int" dort mal weg. Ich kann das nun nicht auf meine Asuro testen weil die Serielle Verbindung nicht funktioniert.
Wenn das nicht die Mangel ist, dan gibt es vielleicht doch ein Logik-fehler in dein statuscontrol und switchcontrol Funktionen. Jedenfalls solltest du wenigstens Serielle Daten bekommen von dein Asuro.
In statuscontrol wird erst den Statusled auf Grün gesetzt.
Dann "Programm startet!" gesendet zu den Serielle Verbindung.
Dann fangt ein Endlos-schleife an
den return-wert von den switchcontrol Funktion wird gespeichert im Variabele retval.
Aber diesen Funktion wird immer 0 zurück geben.
Und deshalb auch immer "Alles in Ordnung!" nach einander senden.
Aus diesen Endlos-schleife wird es nie rauskommen.
Also, kein Motor oder LED Leben-symptomen. Aber Serielle Daten sollen doch raus kommen.
- - - Aktualisiert - - -
Notiz über PollSwitch: Diese Funktion liefert bei viele Asuro ungenaue werten zurück. Dazu gibt es ein Korrektion wert in den Förmel von PollSwitch in dem Datei Asuro.c. Auch wenn den Motoren drehen und plötzlich abgeschaltet werden kann es Falscher Werten ausgeben. Ich hoffe du hast das erst richtig getestet.
Spacy Bar
06.06.2014, 17:52
An dem "int" wird´s gelegen haben! Jetzt funktioniert es! Vielen vielen Dank!!!
LG
Spacy Bar
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.