Forum: Mikrocontroller und Digitale Elektronik Kurze Beurteilung zu Unterprogramm (Pointer)


von Dida N. (quader)


Angehängte Dateien:

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?

von Dida N. (quader)


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?

von Karl H. (kbuchegg)


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.

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.