Umgang mit Tabellen

Gast #1617179
Lesenswert?

Hallo,

ich habe ein Verständnisproblem bei der Handhabung von Arrays im AVR 
Studio. Mit der AVR Lib greift man auf Arrays scheinbar wie folgt zu:
1
    for(tmp=0; tmp<=7; tmp++){
2
      OCR1A = pgm_read_word(pwmtable_8B+tmp);
3
      ... 
4
    }

Normalerweise kenn ich das in C so:
1
    for(tmp=0; tmp<=7; tmp++){
2
      OCR1A = pwmtable_8B[tmp];
3
      ...
4
    }

Wenn ich jetzt mit zwei unterschiedlichen Variablen auf dieselbe Tabelle 
zugreifen will kommt es zu folgendem Problem:
1
    for(tmp=0; tmp<=7; tmp++){
2
      OCR1A = pgm_read_word(pwmtable_8B+2);
3
      OCR1B = pgm_read_word(pwmtable_8B+6);
4
      ...
5
    }

In normal C würde sowas mit der o.g. Methode funktionieren, aber mit der 
AVR Lib geht das irgendwie schief und er zählt jedes mal "weiter" sprich 
OCR1B wäre nicht "+6" sondern "+8". Woran liegt das? kann man das 
Problem "umgehen"?

Grüße,

Philipp
Gast #1617238
Lesenswert?

Das heißt wenn ich im Flash lesen will nehm ich die eine Funktion; im 
RAM die andere. OK!

Dann hab ich noch zwei fragen.

Woher weiß ich wieviel vom RAM benutzt wird?

Frage Zwei:

Christian H. schrieb:
> Was Du mit dem dritten Code möchtest und was Deine Beschreibung bedeuten
> soll, verstehe ich nicht.

Nochmal:

Ich habe folgenden Code:

uint16_t pwmtable_8B[10] PROGMEM = [0,1,2,3,4,5,6,7,8,9];

>       OCR1A = pgm_read_word(pwmtable_8B+2);
>       OCR1B = pgm_read_word(pwmtable_8B+6);

Also müßte OCR1A = 2 sein und OCR1B = 6. Dem ist aber nicht so! OCR1B = 
8!
Gast #1617298
Lesenswert?

Christian H. schrieb:
> ORC1A = pgm_read_word(&(pwmtable_8B[2]));
> OCR1B = pgm_read_word(&(pwmtable_8B[6]));

Philipp schrieb:
>>       OCR1A = pgm_read_word(pwmtable_8B+2);
>>       OCR1B = pgm_read_word(pwmtable_8B+6);

das ist beides das gleiche,
der Fehler liegt woanders.
Ich vermute mal dass uns wieder Mal nicht der Originalcode gezeigt wird 
...

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