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?
Ja, z. B., indem die eigentliche Ausgabefunktion (die dann den UART ansteuert oder das LCD-Display) als Funktionspointer via Parameter übergeben wird.
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.