Forum: Mikrocontroller und Digitale Elektronik Programm läuft nicht ohne debug_printf??


von David S. (der_dave)


Lesenswert?

Tag auch, vor kurzem hatte ich mich mal wegen einem IR Sensor hier 
gemeldet, das hat sich mittleriwele erledigt wir haben den Fehler 
gefunden: wir hatten Masse nicht angesteckt ;)

naja auf jedenfall neuer fehler:

Unser Programm ist lauffähig, macht das was es soll und funktioniert 
formidabel. Das Problem ist jedoch das am Anfang der whileschleife die 
durchgehend unsere sensoren abfragt ein "debug_printf" steht und ohne 
dieses funktioniert das programm nicht. wir können auch nichts drucken 
lassen, dann funktioniert es trotzdem aber leider nur im debug modus. 
beim normalen laufenlasen funktioniert es nicht mehr. auskommentieren 
der zeile führt zu gar keiner reaktion des programms.

hier der code in frage:
1
while(1){
2
//  debug_printf("Ultra - Licht 1 - Licht 2\n");
3
4
  for(i=0;i<10;i++){
5
  if(AD0DR1&(1<<31)){
6
    b=((short)(AD0DR1>>6))/10;
7
    c=(1000-((short)(AD0DR2>>6)))/10;
8
    d=(1000-((short)(AD0DR4>>6)))/10;
9
    debug_printf("%i   ",b);
10
    debug_printf("     %i     ",c);
11
    debug_printf("   %i\n",d);
12
    if(b>15){
13
      IO1SET|=(1<<17); // P1.17 (Gelb) an!   
14
      }
15
    else{
16
      IO1CLR|=(1<<17); // P1.17 (Gelb) aus!
17
      }
18
    if(d<30){
19
      IO1SET|=(1<<18); // P1.18 (Grün) an!
20
      }
21
    else{
22
      IO1CLR|=(1<<18); // P1.18 (Grün) aus!
23
      }
24
    if(c<30){
25
      IO1SET|=(1<<16); // P1.16 (Rot) an!
26
      }
27
    else{
28
      IO1CLR|=(1<<16); // P1.16 (Rot) aus!
29
      }
30
  }
31
  wait(50);
32
}
33
}

wir sind kurz vorm verzweifeln weil das ganze bald abgenommen wird und 
es schade wäre wenn wir nur über debug starten können.

vielen dank für eine schnelle antwort

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Woher soll denn hier wer wissen was geht, und was nicht geht...
Was ist das für ein Controller, was für ein Compiler, was für ein 
Sensor...?

Du kommst ja auch nicht in die Werkstatt und sagst: wenn ich die 
Schraube hier rausmache geht mein Auto nicht mehr. Sondern du sagst, 
was an deiner Karre nicht mehr geht.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Noch schlimmer:
Ich gebe im Normalfall das ganze Auto in die Werkstatt und nicht nur den 
Motor. Wenn er nicht mehr startet, könnte es auch an einem leeren Tank 
oder einer defekten Treibstoffleitung liegen.

von David S. (der_dave)


Lesenswert?

oh sorry, in der hast ganz vergessen

es handelt sich um ein lpc2148p board also der olimex arm7 prototyp.
daran haben wir 2 sharp IR sensoren geklemmt und einen 
ultraschallsensor.
wir programmieren in c, mit rowley crossworks.

problem ist wie gesagt:

debug_printf ist drin:
debug modus läuft perfekt
normaler run modus läuft nicht

debug_printf ist nicht drin:
nichts läuft mehr

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ich habe den Verdacht, dass das etwas damit zu tun haben könnte, dass 
debug_printf recht lange dauert und diese Verzögerung für was auch immer 
benötigt wird.
Ich würde testweise dort Wartezeiten einbauen.

Grüße,

Peter

von jl (Gast)


Lesenswert?

cool, muss was zeitliches sein. Aber wie started ihr eure Wandlung?

Alles etwas unsauber, wenn der Wandler mit channel 1 fertig ist lest ihr 
die Ergebnisse für 1,2 und 4 aus. Ob die anderen beiden fertig sind 
scheint egal zu sein.

von David S. (der_dave)


Lesenswert?

Peter Diener schrieb:
> Ich habe den Verdacht, dass das etwas damit zu tun haben könnte, dass
> debug_printf recht lange dauert und diese Verzögerung für was auch immer
> benötigt wird.
> Ich würde testweise dort Wartezeiten einbauen.
>
> Grüße,
>
> Peter

jl schrieb:
> cool, muss was zeitliches sein. Aber wie started ihr eure Wandlung?
>
>
>
> Alles etwas unsauber, wenn der Wandler mit channel 1 fertig ist lest ihr
>
> die Ergebnisse für 1,2 und 4 aus. Ob die anderen beiden fertig sind
>
> scheint egal zu sein.


Also erstens hab ich davor mal unsere wait funktion mit verschiedenen 
werten gesetzt so 25, 50 100 millisekunden, hat aber nichts geändert.

unsere AD-Wandler konfiguration ist diese:
1
AD0CR|=(1<<1); //KANAL 1
2
AD0CR|=(1<<2); //KANAL 2
3
AD0CR|=(1<<4); //KANAL 3
4
5
AD0CR|=(1<<9); // 110 an Bit 8-15 schreiben
6
AD0CR|=(1<<10); // 110 an Bit 8-15 schreiben
7
8
AD0CR|=(1<<16); // INSTANT START
9
AD0CR|=(1<<21); // AN!
10
11
AD0CR&=~(1<<17);
12
AD0CR&=~(1<<18); // Auflösung auf 10 bits
13
AD0CR&=~(1<<19);
14
15
// Ultraschall an AD0.1
16
// Licht 1 an AD0.2 
17
// Licht 2 an AD0.3

und das mit dem auslesen wenn channel 1 fertig ist schon in ordnung so 
;)
es funktioniert ja :) aber danke für den hinweis

hat noch jemand ideen warum uns das debug dazwischen funken könnte?

von Peter D. (peda)


Lesenswert?

Wenn die AD0DR_x nicht volatile sind, liest er sie nur einmal ein.


Peter

von David S. (der_dave)


Lesenswert?

Peter Dannegger schrieb:
> Wenn die AD0DR_x nicht volatile sind, liest er sie nur einmal ein.
>
>
> Peter

Sorry verstehe ich nicht.
Auf welche frage war das jetzt eine antwort und wie behebe ich das 
angesprochene problem konkret?

von David S. (der_dave)


Lesenswert?

Hat sich erledigt Leute: Eigene Dummheit wie es immer so ist ;)

in meiner wait funktion hatte ich ein y verwendet das vorher nicht 
initialisiert wurde, und irgendwie scheint mein compiler nicht über 
debug befehle im normalen run modus hinweg zu kommen.

Auf jedenfall funktioniert es jetzt. Vielen dank für die Bemühungen :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.