Umgang mit Tabellen

Gast #1617179
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.