Ich habe mir ein kleines, einfaches Unterprogramm geschrieben, um eine Uhrzeit in einen String zu schreiben. Die aktuelle Zeit ist in den globalen Variablen RTChour und RTCmin gegeben. In dieser Funktion verwende ich Pointerübergaben der Arrays wegen. Nun ist es aber so, dass ich die Pointerfunktionen grundsätzlich zwar verstehe, aber nicht genau weiss, worauf ich jeweils achten muss. Mein verwendeter Compiler (C18 von Microchip) gibt jeweils bei der btoa- und strcat-Funktion sowie bei den beiden einzelnen Zuweisung eines Zeichens eine Warnmeldung aus (suspicious pointer conversion). Kann ich die vernachlässigen oder hab ich was grundsätzliches missachtet? Ich bin mir bewusst, dass meine Lösung nicht wirklich ideal ist. Wie würdet ihr das am besten machen?
Sollte ich die Übergabe besser gleich mit dem Derefenzier-Operator lösen? > btoa(RTChour, &StrHH); anstatt > btoa(RTChour, StrHH); Ich dachte, das sollte keine Rolle spielen... Ausserdem, bringt der Compiler weniger Warnungen, wenn ich die Arrays nicht als unsigned char (_U8) sondern als char (_S8) deklariere. Das kann ich definitiv ignorieren, oder?
Wenn du mit Strings, also Character Arrays, arbeitest, dann solltest du auch den dafür vorgesehenen Datentyp nehmen. Und der ist nun mal 'char'. Zur Kritik an deiner Funktion: Du solltest dir globale Variablen nicht einreissen lassen. In der µC Programmierung ist es manchmal OK globale Variablen zu haben, aber für solche Hilfsfunktionen ist es besser, die Funktion nicht von globalen Variablen abhängig zu machen. Die Funktionen sind dann einfach universeller einsetzbar.
1 | /////////////////////////////////////////////////////////////
|
2 | // Ausgabe einer Zeit in einen String
|
3 | // Format: "HH:MM\0"
|
4 | //////////////////////////////////////////////////////////////
|
5 | void TimeToString( _U8 Hour, _U8 Minute, char* Text ) |
6 | {
|
7 | char StrHH[3]; // Stunden |
8 | char StrMM[3]; // Minuten |
9 | |
10 | btoa( Hour, StrHH ); |
11 | btoa( Minute, StrMM ); |
12 | |
13 | strcpy( Text, StrHH ); |
14 | strcat( Text, ":" ); |
15 | strcat( Text, StrMM ); |
16 | }
|
Auf die Art kannst du die Funktion für alle möglichen Zeiten nehmen, nicht nur für die die in deinen globalen Variablen drinnen steht. Zb. für die aktuelle Uhrzeit, für eine Weckzeit, für alle anderen Fälle, in denen du Stunden und Minuten hast.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.