Kurze Beurteilung zu Unterprogramm (Pointer)

OP #768853
Lesenswert?
• ▲
▼
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?
Angehängte Dateien:
OP #768855
Lesenswert?
• ▲
▼
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?
#768892
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren