Forum: Mikrocontroller und Digitale Elektronik Algmeine Funktion


von Markus (Gast)


Lesenswert?

Hallo,
ich versuche gerade mit einer Funktion mein Programm zu verschönern.
Das Gesamte Programm liest eine I2C RTC(PCF8583P) aus, deshalb verwende 
ich die Bibliothek von Peter Fleury.

Die zwei ausgelesnen Bytes werden in diesen Variabeln gespeichert:
buff_sekunde
buff_minute

Nun hab ich mir gedach ich schreib mir eine Funktion
1
uint8_t getsm (uint8_t  ) {
2
  uint8_t zehn = 0 ;
3
  
4
  
5
  
6
  ergebnis = buff & 0b00001111; // maskieren der 1er Stelle 
7
  zehn = buff & 0b01110000; // hier die 10er Stelle
8
  zehn = zehn >> 4 ; //um 4 Stellen zurückschieben für richtige Wertichkeit 
9
  ergebnis = (ergebnis >> 4) * 10 + (ergebnis & 0x0F); // umwandeln von BDC in Binär
10
  ergebnis = ergebnis + zehn *10 ; //Gesamt Ergebnis
11
  
12
  
13
  
14
  
15
  
16
  
17
  return (); // In der Klammer sollte die Rückgabevariable stehen
18
  
19
};

Im "main" frage ich einefach das Ergbniss ab
1
sekunde= getsm(buff_sekunde) ;
2
minute= getsm(buff_minute);

Zu erwähnen ist noch, dass ich die Funktion in eine *.c Datei 
ausgelagert habe. Aber ich weiß nicht wie die Variablen Übergabe 
aussehen soll? Was soll ich in return() schreiben?

Vielen Danke wenn jemand so nett wäre und mich einwenig unterstützen 
kann.
Ich lerne grade µC programmieren in C nur durch Tutorials. I2C und LCD 
laufen schon mal die Uhr läuft auch schon =) Die komplette Uhr ist so zu 
sagen mein Lehrnprojekt.

von Georg G. (df2au)


Lesenswert?

Vorschlag: Nachlesen, wie man eine Funktion deklariert.

Markus schrieb:
> uint8_t getsm (uint8_t  ) {
Da fehlt doch was? Wie wäre es mit
uint8_t getsam(uint8_t buff) {

>   return (); // In der Klammer sollte die Rückgabevariable stehen
Warum nicht einfach
return(ergebniss);

von Easylife (Gast)


Lesenswert?

1
ergebnis = buff & 0b00001111; // maskieren der 1er Stelle 
2
ergebnis = (ergebnis >> 4) * 10 + (ergebnis & 0x0F); // umwandeln von BDC

die 2. Zeile ist vollkommen überflüssig.
(ergebnis >> 4) * 10
ist in deinem Fall immer null


im Grunde läuft es auf das hier hinaus:
1
uint8_t getsm (uint8_t value_bcd) {
2
  uint8_t value_dec;
3
  value_dec = 10 * (value_bcd >> 4) + (value_bcd & 0x0f);
4
  return (value_dec);
5
};

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.