Forum: Mikrocontroller und Digitale Elektronik C18 -> XC8 Migration


von Ingo S. (schicki)


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)


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)


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.
1
        puts1USART("Hello World! \n\r");
2
        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)


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)


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.
1
sprintf(str_Temp, "%.1c", unc_Taste);
2
puts1USART(str_Temp);
3
puts1USART("\r\n");
4
        
5
sprintf(str_Temp, "%.3u", LATD);
6
puts1USART(str_Temp);
7
puts1USART("\r\n");

Viele Grüße
Ingo

von Klaus (Gast)


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)


Lesenswert?

Ich habe in ca. 20 Jahren noch nie printf() benutzt ;-)

von Ingo S. (schicki)


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.

1
dt.Tag
2
dt.Monat
3
dt. Jahr
4
dt.Stunden
5
dt.Minuten
6
dt.Sekunden
7
8
str_DateTime = dt.Tag & "." & dt.Monat & ".20" & dt.Jahr & " " & dt.Stunden & ":" & dt.Minuten & "." & dt.Sekunden
9
10
//Hier ein Beispiel: 
11
//15.03.2017 10:02:17

Grüße
Ingo

von Thomas E. (picalic)


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)


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)


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)


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)


Lesenswert?

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

von Volker S. (vloki)


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)


Lesenswert?

Ok mach ich ist so am einfachsten.

Danke
Ingo

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.