www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Arrays bei 8051. Was muss ich beachten?

Autor: Sascha K. (quad2000)
Datum: 15.05.2008 23:49

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
Autor: Timmo H. (masterfx)
Datum: 16.05.2008 00:00

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.
Autor: Sascha K. (quad2000)
Datum: 16.05.2008 08:06

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
Autor: Braten (Gast)
Datum: 16.05.2008 08:13

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.
Autor: Marian (Gast)
Datum: 16.05.2008 08:22

@Braten:
Das war eben auch meine Vermutung :)...
Autor: Sascha K. (quad2000)
Datum: 16.05.2008 08:26

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.
Autor: Helmut -dc3yc (dc3yc)
Datum: 16.05.2008 09:03

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.
Autor: Steffen Hildebrandt (jimjack)
Datum: 16.05.2008 09:13

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
Autor: Sascha K. (quad2000)
Datum: 16.05.2008 20:35

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.
Autor: Fox Mulder (quakeman)
Datum: 17.05.2008 12:13

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. :)

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net