Forum: Mikrocontroller und Digitale Elektronik XC8 Quelltext Frage


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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) (Moderator) 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.