Datensatz anlegen
-
Hallo Leute,
ich sitze gerade an meinem µC und programmiere diesen in C. Nun habe ich einen Datensatz von 1000 Werten, die ich gerne im µC abspeichern will.
Nun hatte ich die Idee die 1000 Werte wie eine Funktion in einem *.c File abzulegen und diese dann zu verwenden. Meine Problem ist, wie muss ich denn die 1000 Werte anlegen, damit ich sie verwenden kann?(Vielleicht kann man ja einen Vektor mit 1000 Werten anlegen. Wie kann ich diesen aber im Hauptprogramm aufrufen?)
Gruß Joe
-
Wie wäre es mit einem einfachen Array oder einer einfach verketteten Liste? Ohne zu wissen wie die Werte aussehen und verwendet werden sollen ist die Antwort mehr abstrakter Natur. Die Frage, ob du es verwenden kannst, möchte ich mir nicht anmaßen zu beantworten.
-
Da hast du recht. Sorry für die schlechte Fragestellung!
Also ich habe es mir so vorgestellt:
tabelle.c anlegen mit Inhalt:
int vektor[5]={0,1,2,3,4,5};
in main.c verwenden:
#include tabelle.c int main (void){ vektor[1]=0; }
Meine Frage ist nun, kann ich den Vektor aus einer anderen Datei so ansprechen?
(Wenn es immer noch undeutlich ist, bitte bescheid geben.)Gruß Joe
-
Das wird so nicht funktionieren, du machst dir mit deinem Array mit hoher Wahrscheinlichkeit nur den Stack kaputt. Schau mal in deinen Startup-Code, da müsste diverse Anweisungen sein, wo welcher Speicher liegt. Im Idealfall fügst du dort deine Werte mit ein.
-
Oder willst du das Array global halten? Das wäre im Prinzip das selbe was dir vorgeschlagen habe. Nur einfacher.
1000 Werte passen mit hoher Sicherheit nicht auf den Stack eines µC. Nur als Info, weil der Compiler sagt dir das nicht. Du wunderst dich nur, warum nachher nichts funktioniert, weil sich der Speicher überlappt.
-
Was heisst global? volatile?
Geht auch global aber in der anderen Datei?
-
[quote="joe1234"]Was heisst global?[quote]
Außerhalb einer Funktion.volatile?
Das heißt, dass der Inhalt flüchtig ist.
Geht auch global aber in der anderen Datei?
Ja!
-
Wenn du es global in einer anderen Datei machen willst, dann musst du das Schlüsselwort extern verwenden. Wie auch immer, eventuell killst du den Stack mit dieser Menge an Daten.
#include <stdio.h> extern int vektor[5]; int main (void) { vektor[4]=5; printf("%i", vektor[4]); }
int vektor[5]={0,1,2,3,4};
-
HighLigerBiMBam schrieb:
eventuell killst du den Stack mit dieser Menge an Daten.
Mmh, da könntet ihr recht haben. Aber gibt es eine andere Möglichkeit so eine große Datenmenge anzulegen?
-
Auf dem Heap mit malloc/calloc!? Du musst es halt ausprobieren/testen.
-
Der µC hat doch sicher einen Flash-Speicher in dem du die Daten ablegen kannst.
-
Das kenne ich noch nicht. Kannst du vielleicht ein kleines Bsp liefern?
-
malloc/calloc
Das kenne ich noch nicht. Kannst du da ein Bsp dazu liefern?
-
joe1234 schrieb:
malloc/calloc
Das kenne ich noch nicht. Kannst du da ein Bsp dazu liefern?
-
Globale Variablen liegen nicht auf dem Stack. Ganz davon abgesehen, dass du nicht unbedingt eine Laufzeitbibliothek zur Verfügung haben musst (für malloc/free erforderlich), kannst du damit die Werte erst zur Laufzeit zuweisen.
-
Hi,
ich habe dazu im anderen Forum eine Frage gestellt und dort hat mich einer auf einen Link verwiesen, wo diese Aufgabe schon behandelt wurde.
Link: http://www.mikrocontroller.net/topic/204131#newTrotzdem Danke für eure Hilfe!
Gruß Joe