Hallo an alle, ich verwende in meinem µC Programm für einen AT89C51CC03, das ich in Keil µVision 3 erstelle, einige Arrays. Was muss ich dabei beachten? Datentyp? Speicherbereich? Ich habe es bis jetzt so erstellt: header: extern xdata unsigned int test1 [50]; main: xdata unsigned int test1 [50]; Ist das so richtig? Ich habe folgendes Problem: Ich habe ein Schleife, die mir Werte in den Feldern ablegt. Sie beginnt bei Feld 0. Wenn die max. Anzahl von 50 erreicht ist, wird die schleife wieder auf 0 zurückgesetzt und beginnt von neuem Werte in dem Array abzulegen. Wenn ich das mehrmals durchlaufe, habe ich Fehler im Programm (ich gebe die Werte über ein LCD Display aus). An was kann das liegen? Danke für die Hilfe. Gruss Sascha
Eigentlich sollte das kein Problem sein. Ich denke eher, dass irgendwas am Code falsch ist (den du ja nicht gepostet hast). Vielleicht verursachst du auch irgendwo nen Stackoverflow weswegen dann deine globale Variable versehendlich überschrieben wird.
Hallo Timo H. normalerweise Poste ich immer mein Code aber da es sich nur um eine Schleife handelt dachte ich,das ich ihn weglassen kann. Die Schleife funktioniert auch. Das habe ich ausgiebig getestet. Die Idee mit dem Stack hatte ich auch schon. Zu dem Thema Stack hab ich schoneinmal ein Beitrag im Forum gepostet aber leider keine Antwort erhalten. Leider hab ich auch keine genauen Informationen über den Stack und ich habe noch keine Seite gefunden, die mir den Stack verständlich erklärt. In meinem Programm sieht es so aus: xdata unsigned int test 1 [50]; xdata unsigned int test 2 [50]; xdata unsigned int test n [50]; Ich habe 24 solcher Arrays in meinem Programm da ich sehr viele Werte abspeichern muss. Im Worst Case werden in alle Felder der Reihe nach Werte abgespeichert und auf meinem Display ausgegeben. Sobald die max. Feldanzahl erreicht wird, werden die neuen Werte wieder ab Feld 0 abgespeichert. Die alten Werte werden überschrieben. Sollte ich die Felder befor ich sie überschreibe auf 0 setzen? Gruss und vielen Dank für die Hilfe Sascha
Könnte es daran liegen, dass du nicht bedacht hast das ein Array [50] von 0 bis 49 geht und nicht von 0 bis 50? nur so eine Vermutung > Anzahl von 50 erreicht ist, wird die schleife > wieder auf 0 zurückgesetzt und beginnt von neuem Werte in dem Array > abzulegen.
Danke für den Tipp. Ich habe aber an das gedach. Ich habe eine if-Abfrage in meinem Programm, die das Array-Feld abfrägt und mit 49 Vergleicht.
Sascha, besitzt dein µC soviel RAM? Bei 24 Arrays á 50 Int sind das 2400Byte RAM. Ich glaube nicht, dass dein Proz soviel hat? Poste doch mal das .MAP-File, da steht das alles drin! Servus, Helmut.
Da ist es, dieser Controller hat nur 2048 Byte XRAM. Aber da müsste der Compiler meckern und gar kein HEX-File erstellen. Und das tut er auch, hab ich gerade mal getestet. Komisch... Steffen
Danke an alle für die Hilfe. Jetzt ist einiges klarer. Aber Keil meckert bei mir nicht. Er erstellt ein Hexfile. Komisch aber egal. Jetzt kann ich ja den Feler vermeiden. Ich hab jetzt mien Programm so abgeändert, das ich nur noch 17 Arrayfelder habe.
Wenn du die Daten sowieso immer nur sequenziell in die Arrays schreibst würde ich eher Ringbuffer dafür verwenden als Arrays. Aber das ist vielleicht eine Geschmacksfrage. :)
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.