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)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

unter dem C18 läuft folgender Quelltext problemlos.
        while (Busy1USART());
        sprintf(chr_Temp, "Adresse: ");
        puts1USART(chr_Temp);
        
       while (!DataRdy1USART());
       unc_RS232 = Read1USART();
       
       putc1USART(unc_RS232);
       sprintf(chr_Temp, "\n\r");
       puts1USART(chr_Temp);
       
       // Möglichkeit Nr. 1 -> über Cast (Typenkonvertierung) Befehl
       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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.