Forum: Mikrocontroller und Digitale Elektronik C18 -> XC8 Migration


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,

langsam aber sicher würde ich meine C18 Programme auf den XC8 Comiler 
migrieren. Bevor ich nun recht viel Zeit investiere habe ich ein paar 
kleine Fragen.

1. Gibt es im XC8 keine Funktionen wie im C18?
Im Netz habe ich hier viele unterschiedliche Meinungen gefunden. Das 
beschriebene Dokument Libary ist im doc-Verzeichnis meiner Installation 
nicht vorhanden.

2. Funktionen aus C18 in XC8 nutzen
Kann ich funktionen die ich unter C18 erstellt habe om xc8 weiter 
nutzen? Hierüber gibt das Netz ebenfalls sehr unterschiedliche Infos 
heraus. Es wäre sehr schade wenn ich diese Funktionen neu erstellen 
müsste.

Welche Optionen muss ich bei der Installtion beachten? Ich möchte mir 
nur ungern meine C18 Einrichtung zerstören?

Viele Grüße
Ingo

von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
1. Die peripheral lib wurde nur bis xc8 1.34 automatisch mit 
installiert. Danach ist ein separater Download und Installation 
erforderlich.
Bei vielen PICs funktioniert das dann aber trotzdem nicht mehr, weil die 
Header "aufgeräumt" würden.
Der dann vorhandene Source code kann aber auf jeden Fall verwendet 
werden.

2. Natürlich kann man eigene Funktionen weiterhin verwenden. Geringe 
Anpassungen könnten natürlich erforderlich sein, wenn diese zu C18 
spezifisch wären.

3. Bei der Installation kann nichts schief gehen, wenn du die 
angebotenen Optionen durchliest und nicht alles einfach bestätigt.

von Ingo S. (schicki)


Bewertung
0 lesenswert
nicht lesenswert
Danke. Das hat funktioniert.

Bin schon am Testen. Weißt Du auch warum der printf Befehl im C18 
Compiler wunderbar funktioniert hat und im XC8 nicht.
        puts1USART("Hello World! \n\r");
        printf("Hello World! \n\r");


Mit puts1USART funktioniert es. mit printf leider nicht. Init kann ich 
mal ausschließen.

Ich habe mal im Netz gesucht da gehen die Meldungen bis ins Jahr 2012 
zurück. Ziemlich frustrierend am Anfang.

Ingo

von Klaus (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ingo S. schrieb:
> printf("Hello World! \n\r");

printf() schreibt auf stdout, so ist es in C geregelt. Wo ist 
festgelegt, daß 1USART stdout ist?

MfG Klaus

von Ingo S. (schicki)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Klaus,

vielen Dank für die Antwort. Das ist wohl richtig das ist sicherlich in 
keinem Dokument festgelegt. Der Vorgänger C18 sowie eine Vielzahl 
anderer C-Compiler wie Keil usw. hat dies ohne Beanstandung so gemacht.

Ich habe es jetzt so umgesetzt.
sprintf(str_Temp, "%.1c", unc_Taste);
puts1USART(str_Temp);
puts1USART("\r\n");
        
sprintf(str_Temp, "%.3u", LATD);
puts1USART(str_Temp);
puts1USART("\r\n");

Viele Grüße
Ingo

von Klaus (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Ingo S. schrieb:
> Der Vorgänger C18 sowie eine Vielzahl
> anderer C-Compiler wie Keil usw. hat dies ohne Beanstandung so gemacht.

Das kann natürlich nicht wirklich funktionieren. Woher soll der Compiler 
wissen, an welchem UART dein Terminal hängt und wie das zu konfigurieren 
ist.

Hier steht, wie man eine eigene Ausgabefunktion für stdout definieren 
kann. Dann kann man printf direkt benutzen

http://microchipdeveloper.com/faq:29

MfG Klaus

von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe in ca. 20 Jahren noch nie printf() benutzt ;-)

von Ingo S. (schicki)


Bewertung
0 lesenswert
nicht lesenswert
Hi Volker,

da gebe ich Dir recht. Ich brauche ihn auc nur sehr selten Hin und 
wieder war der eben sehr praktisch.

Mein Fähigkeiten bei Strings sind etwas eingetrübt. Ich würde ganz gerne 
einen Sring aus verschiednen Variabelen zusammen bauen.

dt.Tag
dt.Monat
dt. Jahr
dt.Stunden
dt.Minuten
dt.Sekunden

str_DateTime = dt.Tag & "." & dt.Monat & ".20" & dt.Jahr & " " & dt.Stunden & ":" & dt.Minuten & "." & dt.Sekunden

//Hier ein Beispiel: 
//15.03.2017 10:02:17

Grüße
Ingo

von Thomas E. (picalic)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Ingo,

Ingo S. schrieb:
> Ich würde ganz gerne
> einen Sring aus verschiednen Variabelen zusammen bauen.

das geht wohl eher nicht mit "&" oder "+", sondern mit "strcat()".

von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
Ingo S. schrieb:
> Ich würde ganz gerne
> einen Sring aus verschiednen Variabelen zusammen bauen.

Wozu überhaupt zusammen basteln? Zu nach irgendwohin schicken?

von Ingo S. (schicki)


Bewertung
0 lesenswert
nicht lesenswert
Weil ich einen fremdprogramn genau diesen String benötige.

Der print geht nur noch bedingt und mit sprintf kommen komische Zeichen. 
Parameter stimmmen einzeln kommen sie korrekt an.

Was ist für einen solchen String der beste Weg.

Ingo

von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
Ingo S. schrieb:
> Weil ich einen fremdprogramn genau diesen String benötige.
>
> Der print geht nur noch bedingt und mit sprintf kommen komische Zeichen.
> Parameter stimmmen einzeln kommen sie korrekt an.
>
> Was ist für einen solchen String der beste Weg.
>
> Ingo

Das Fremdprogramm läuft doch nicht auf deinem Kontroller.
Warum erst umständlich zusammenbauen. Kann man doch einfach nacheinander 
abschicken, oder?

von Ingo S. (schicki)


Bewertung
0 lesenswert
nicht lesenswert
Das geht. Allerdings gegenüber früher viel Quelltext. Wollte es 
eigentlich nur effektiver gestalten.

von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
Kann mir nicht vorstellen das irgendwas mit Stringverabeitung (printf, 
strcat ...) effektiv genannt werden darf ;-)

Schreib lieber eine eigene Funktion, die die Teilstrings wegschickt.

von Ingo S. (schicki)


Bewertung
0 lesenswert
nicht lesenswert
Ok mach ich ist so am einfachsten.

Danke
Ingo

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.