Forum: Mikrocontroller und Digitale Elektronik XC8 Quelltext Frage


von Ingo S. (schicki)


Lesenswert?

Hallo Zusammen,

unter dem C18 läuft folgender Quelltext problemlos.
1
        while (Busy1USART());
2
        sprintf(chr_Temp, "Adresse: ");
3
        puts1USART(chr_Temp);
4
        
5
       while (!DataRdy1USART());
6
       unc_RS232 = Read1USART();
7
       
8
       putc1USART(unc_RS232);
9
       sprintf(chr_Temp, "\n\r");
10
       puts1USART(chr_Temp);
11
       
12
       // Möglichkeit Nr. 1 -> über Cast (Typenkonvertierung) Befehl
13
       int_Adresse = (int)unc_RS232 - 0x30;

Der XC8 Comiler hat mit dieser Zeile ein Problem.

//Wandlung char to int
int_Adresse = (int)unc_RS232 - 0x30;

Wo ist mein Denkfehler? Der Comiler bringt keinen Fehler. Im Debugger 
kommen immer wieder ganz andere Werte. Weiß jemand warum?

Viele Grüße
Ingo

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie sind die Variablen unc_RS232 und chr_Temp deklariert?

Die Namenskonvention scheint ... ungewöhnlich zu sein.

> Der XC8 Comiler hat mit dieser Zeile ein Problem.

Ein Problem, aber es wird kein Fehler ausgegeben?

Was bedeutet das hier?

> Im Debugger kommen immer wieder ganz andere Werte.

Wie "kommen im Debugger Werte"?

von Ingo S. (schicki)


Lesenswert?

char chr_Temp[ ];
    char unc_RS232;
    int int_Adresse;

das Adresse: kommt der kontroller gibt auch das richtige zeichen zurück

: Bearbeitet durch User
von guest (Gast)


Lesenswert?

Ingo S. schrieb:
> char chr_Temp[ ];

Wenn das tatsächlich so dasteht dürfte es in Verbindung mit den 
"sprintf(chr_Temp, ..." mit so ziemlich jedem C-Compiler Probleme geben. 
Und es ist dann auch kein Wunder, wenn dann in unc_RS232 bzw. 
int_Adresse nur noch Schrott drinsteht.

von Wolfgang R. (portside)


Lesenswert?

Das sind die Probleme mit 16 und 8 Bit Prozessoren
<stdint.h> nutzen und dann
uint8_t, int8_t, int16_t etc verwenden damit über alle XC Compiler die 
Längen gleich sind

von Noch einer (Gast)


Lesenswert?

Liegt das Problem in den fehlenden Teilen? Überlappen die 
Speicherbereiche? Speicher für die \0 am Stringende? Liegt der Fehler 
ganz woanders - nicht initialisierte Pointer in einer ISR? Wie sollen 
wir das erraten?

Bau uns doch ein minimales main(). 20 Zeilen, kompilierbar.

von guest (Gast)


Lesenswert?

Noch einer schrieb:
> Speicher für die \0 am Stringende?

Nach den gezeigten Codeschnipseln eher nicht nur kein Speicher für \0 
sondern auch nicht für den Rest des Strings.

von Ingo S. (schicki)


Lesenswert?

danke an alle. Die Umstellung auf <stdint.h> hat abhilfe gebracht.

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.