xdata Array ausgeben

Gast #2082725
Lesenswert?

Hallo zusammen

Ich arbeite mit einem at89c2051 und Keil.
Nun habe ich ein Array im externen Bereich mit xdata abgespeichert, da 
es sonst zu gross ist. So weit so gut.

Nun möchte ich diese Zahlen auch wieder ausgeben, aber dies funktioniert 
nicht! :(
Könnt ihr mir einen Tipp geben wie ich die zahlen ausgeben kann?
Ich habe schon einen Kollegen gefragt und dieser hat mir ein Vorschlag 
gegeben, aber dieser funktioniert nicht.

Hier ist sein Vorschlag (P1 ist der ausgang, Port1)

unsigned char xdata arr[126]= {126. zahlen}
unsigned char i;

void warte(){
//Warteschleife
}
void main(){

 while (i<126){
 P1 = (unsigned char *) &(frisch_INF+i);
 warte();
 i++;
 }

}
Gast #2082735
Lesenswert?

Ich hab noch ein Fehler in meinem Programm entdeckt. :)

es sollte so aussehen:

unsigned char xdata arr[126]= {126. zahlen}
unsigned char i;

void warte(){
//Warteschleife
}
void main(){

 while (i<126){
 P1 = (unsigned char *) &(arr+i);
 warte();
 i++;
 }

}
Gast #2082970
Lesenswert?

> Ich arbeite mit einem at89c2051 und Keil.
> Nun habe ich ein Array im externen Bereich mit xdata abgespeichert, da
> es sonst zu gross ist.
Die fett markierten Begriffe schließen sich aus... Der AT89C2051 hat 
keinen on-Chip-XData-Speicherbereich.

Ralf
Gast #2082981
Lesenswert?

Ok
Danke für den Hinweis ;)

Wie müsste ich dann ein Array mit 126 zahlen speichern?

Wenn ich es normal init. also:
unsigned char arr [126]= {zahl}
gibt es immer ein Fehler, dass mein Array zu lang ist.
Gast #2083006
Lesenswert?

> Wie müsste ich dann ein Array mit 126 zahlen speichern?
Vergiss es. Der AT89C2051 hat nur insgesamt 128 Bytes RAM, davon gehen 
mindestens acht für die verwendete Registerbank drauf und mindestens ein 
paar Bytes für den Stack. Du brauchst also 2052 aufwärts.

Ralf
Gast #2083015
Lesenswert?

...wenn ich ganz tief in mir suche...der 2051 hatte doch nur 128Byte 
RAM.
Davon will das C-Prog noch was abhaben.
Fange doch mal mit der Arraygröße klein an und vergrößere Schrittweise.

..und google mal nach RTFM.

MfG
Pieter
Gast #2083030
Lesenswert?

wenn dein gewählter uC das RAM-mässig nicht hergibt, aber so ein kleines 
progrämmchen nur hat, könntest du das array ja in den code-speicher 
(ROM=FLASH) packen. Wird etwas langsamer sien als aus dem RAM aber tut 
es auch mit dem kleinen uC. Wie dieser Zugriff genau mit Keil51 geht 
musst Du noch herausfinden (google, etc.).


ausserdem ist das hier wohl (auch) Unfug:

>> P1 = (unsigned char *) &(arr+i);
...wenn der compiler nicht meckert dann tust du hier die adresse von 
arr[0] + wert der variable i ausgeben, ist wohl nicht ganz das was sein 
soll.

wenn du auf P1 nacheinander die werte des array ausgeben möchtest, dann 
besser so:

void main()
{
  unsigned char i = 0;

  while (i<126)
  {
    P1 = arr[i];
    warte();
    i++;
  }
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren