Forum: Mikrocontroller und Digitale Elektronik Problem mit dem Auslagern von Funktionen


von Marcel F. (marcellobs)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin grade dabei mich mit dem Umgang von Funktionen vertraut zu 
machen. Um den Code kürzer halten zu können und ggf. Funktionen in 
anderen Programmen wieder verwenden zu können, wollte ich diese in einer 
externen c-datei auslagern.
Dafür sollte eine einfache Funktion "berechne", die zwei Werte 
multipliziert, ausgelagert werden.
Mein Vorgehen:

Main:
1
#include <avr/io.h>
2
#include "berechne.h"
3
4
int main(void)
5
{
6
    uint8_t Ergebnis = 0, a = 12, b = 2;
7
    while (1) 
8
    {
9
    berechne(&Ergebnis, a, b);
10
    }
11
}
.c-Datei:
1
void berechne(uint8_t *p_Ergebnis, uint8_t x, uint8_t y){
2
  *p_Ergebnis = x*y;
3
}
.h-Datei:
1
#ifndef BERECHNE_H_
2
#define BERECHNE_H_
3
4
void berechne(uint8_t *p_Ergebnis, uint8_t x, uint8_t y);
5
6
#endif /* BERECHNE_H_ */


Im Anhang habe ich Screenshots von der Fehlermeldung und dem Code 
hinterlegt. Hat irgendwer eine Idee woran es liegen könnte?

von quotendepp (Gast)


Lesenswert?

lies mal die fehlermeldung(en). die sind meistens sehr gesprächig und 
sagen (hier) sehr genau wo das problem liegt.

tipp: es fehlen includes

von Marcel F. (marcellobs)


Lesenswert?

Super danke, jetzt läuft es.

von Stefan F. (Gast)


Lesenswert?

Nächstes mal Quelltext bitte als Text posten, nicht als Screenshot. 
Screenshots sind meistens unvollständig und man kann den Text nicht 
heraus kopieren um das Problem nachzuvollziehen.

Es wurden auch schon Anhänge und ZIP Dateien erfunden.

von Hannes (Gast)


Lesenswert?

@Stefanus

Lies den ersten Post erst komplett, bevor Du Dich echauffierst - der TO 
hat den Quelltext mit gepostet, Kollege!

von Stefan F. (Gast)


Lesenswert?

Hannes schrieb:
> Lies den ersten Post erst komplett, bevor Du Dich echauffierst - der TO
> hat den Quelltext mit gepostet, Kollege!

Du hast wohl Recht. Das ist so wenig, dass ich dachte, es seien nur 
Fragmente vom Ganzen.

von nicht Gast (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Du hast wohl Recht. Das ist so wenig, dass ich dachte, es seien nur
> Fragmente vom Ganzen.

Aber Hauptsache erst mal wieder den Zeigefinger gehoben haben.

von nicht Gast (Gast)


Lesenswert?

Ansonsten noch für den TO, in den Headern reichen die Datentypen der 
Funktion, die Namen brauchen da nicht rein.
1
void berechne(uint8_t*, uint8_t, uint8_t);
Hätte also auch gereicht, nur muss eben der Datentyp uint8_t bekannt 
sein, also inttypes.h oder stdint.h je nach sonstigem Bedarf in den 
Header mit rein.

von Stefan F. (Gast)


Lesenswert?

nicht Gast schrieb:
> Ansonsten noch für den TO, in den Headern reichen die Datentypen der
> Funktion, die Namen brauchen da nicht rein.

Allerdings bringe ich die Dokumentation immer in den Header Dateien 
unter und da gehören dann sprechende Namen für die Parameter dazu.

von Falk B. (falk)


Lesenswert?

nicht Gast schrieb:
> Ansonsten noch für den TO, in den Headern reichen die Datentypen der
> Funktion, die Namen brauchen da nicht rein.void berechne(uint8_t*,
> uint8_t, uint8_t);

Für den Compiler mag das reichen, für den Menschen, welcher die 
Funktionen benutzen will eher nicht! Schon gar nicht, wenn andere Leute 
sie irgendwann mal benutzen sollen.

Wer exzessiven Minimalismus praktizieren will darf gern Maschinencode 
schreiben, wahlweise auch BO8 Assembler ;-)

https://www.mikrocontroller.net/articles/8bit-CPU:_bo8

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.