www.mikrocontroller.net

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


Autor: Dida N. (quader)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Dida N. (quader)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.
/////////////////////////////////////////////////////////////
// Ausgabe einer Zeit in einen String
// Format: "HH:MM\0"
//////////////////////////////////////////////////////////////
void TimeToString( _U8 Hour, _U8 Minute, char* Text )
{
  char StrHH[3];  // Stunden
  char StrMM[3];  // Minuten
  
  btoa( Hour, StrHH );
  btoa( Minute, StrMM );

  strcpy( Text, StrHH );
  strcat( Text, ":" );
  strcat( Text, StrMM );
}

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

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.