Forum: Compiler & IDEs Dateien (Bibliotheken) mehrfach nutzen


von Michi (Gast)


Lesenswert?

Als Beispiel:

at45db.c :
Datei für den Zugriff auf den AT45 Flash Speicher.
hier befindet sich eine funktion die Daten aus dem Flash liest und
ausgeben soll.

send_flash_to_uart();




main.c:
Das Programm selbst. hier greife ich auf die Funktion in der at45db.c
zu.


Was mache ich das wenn ich nun ein neues Project beginne und möchte 
meine
alte at45db.c wieder nutzen, diesmal jedoch nicht per uart ausgeben 
sondern
per LCD.

Dann benötige ich quasi in der at45db.c wieder eine weitere funktion die 
diesmal aber per LCD ausgibt.


gibt es nicht einen weg, bei der ich die at45db.c ganz allgemein halten 
kann? so das diese ansich immer und immer wieder verwenbar ist?

von Nico S. (nico22)


Lesenswert?

Ja, z. B., indem die eigentliche Ausgabefunktion (die dann den UART 
ansteuert oder das LCD-Display) als Funktionspointer via Parameter 
übergeben wird.

von Daniel V. (danvet)


Lesenswert?

Ich kenne deine at45db.c nicht. Aber wenn diese auf die UART zugreift, 
dann ist das "falsch" programmiert.
In der Main kannst du Daten vom Flash holen und diese dann über UART 
abschicken oder am LCD anzeigen. Die at45db.c hat sich nur um das Flash 
zu kümmern, sonst nix.

Ach ja: zeig mal den kompletten Code...

von Michi (Gast)


Lesenswert?

Genau da liegt mein Problem.

ja sicher könnte ich nun eine Globale variable (z.B. buffer)
dafuer nutzen das die funktion die daten in diesen buffer ablegt
der dann auch von anderen funktionen genutzt werden kann.

Nur der At45DB Flash Speicher hat je Page alleine 256 (264) Bytes und 
wenn die dafuer bei einem ATmega8 einen Buffer im SRAM anlegen soll ist 
der mit einem schlag voll.

Das mit den Funktionspointern klingt schonmal gut.

von Daniel V. (danvet)


Lesenswert?

Michi schrieb:
> Genau da liegt mein Problem.
>
> ja sicher könnte ich nun eine Globale variable (z.B. buffer)
> dafuer nutzen das die funktion die daten in diesen buffer ablegt
> der dann auch von anderen funktionen genutzt werden kann.
>
> Nur der At45DB Flash Speicher hat je Page alleine 256 (264) Bytes und
> wenn die dafuer bei einem ATmega8 einen Buffer im SRAM anlegen soll ist
> der mit einem schlag voll.
>
> Das mit den Funktionspointern klingt schonmal gut.

Ich verstehe dein Problem dennoch nicht. Ob der Buffer global ist oder 
nicht belegt ja nicht weniger Speicher. Also wirst du deine Funktion 
"send_flash_to_uart();" anders gemacht haben. Vielleicht liest du ja 
byteweise. Dann gibst du halt den Flashinhalt byteweise zurück.

Wo der Vorteil von Funktionspointern liegen soll erschließt sich mir 
nicht.

Um dir wirklich helfen zu können müsste man den kompletten Code sehen.

Ich nutze auch den AT45DB und es geht wirklich, dass die at45db.c sich 
nur um das Flash kümmert.

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.