Probleme mit pgm_read_byte()

OP Persönliche Seite #1776216
Lesenswert?
• ▲
▼
Ich bin gerade dabei, Linux-Framebuffer-Fonts für ein farbiges glcd zu 
verwenden und habe meine eigene Ausgabe-Routine geschrieben.
Diese funktioniert, wenn ich zum Testen ein Zeichen in ein Array im RAM 
lege und von dort meine Daten hole.
Wenn ich die daten mit pgm_read_byte oder pgm_read_byte_far (jeweils 
selbes ergebnis) hole, kommt nur ein Kästchen von 4x4 pixeln (denke ich, 
lässt sich an diesem mini Display schwer zählen).
Die verwendete Schriftart ist 8x8 Pixel gross, das Headerfile mit dem 
PROGMEM-array ist im Anhang.

Hier der Code, der funktioniert
1
char fd[8] = { 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e };
2

3
void linux_putc(unsigned char x_off, unsigned char y_off, unsigned char font, unsigned short color, char c) {
4
  char w=8, h=8;
5
  char x, y;
6
  
7
  for(y = 0; y < h; y++) {
8
    for(x = 0; x < w; x++) {
9
      if(fd[y] & (1<<x)) put_px(x_off+x, y_off+y, color);
10
    }
11
  }
12
  
13
  return;
14
}

Und hier der Code, der nicht funktioniert:
1
void linux_putc(unsigned char x_off, unsigned char y_off, unsigned char font, unsigned short color, char c) {
2
  char w=8, h=8;
3
  char x, y;
4
  
5
  for(y = 0; y < h; y++) {
6
    for(x = 0; x < w; x++) {
7
      if(pgm_read_byte(&acorndata_8x8[c+y]) & (1<<x)) put_px(x_off+x, y_off+y, color);
8
 
9
    }
10
  }
11
  
12
  return;
13
}

Am ehesten vermute ich, dass ich pgm_read_byte falsch verwende, alles 
nötige dazu hier im Posting und im Anhang. Meine erste vermutung war, 
dass die Positionsangabe im Array (c+y) nicht stimmt.

Hier der Funktionsaufruf:

linux_putc(100, 100, NULL, GREEN, 'a');


Mein Controller ein AT90USB1287 @ 8Mhz. Der Display Treiber läuft 
einwandfrei, die Grafikfunktionen gehen alle und wie gesagt, wenn ich 
die Daten ins RAM lege, tut auch meine putc-Routine.

Ich kann mir dieses Verhalten nicht erklären und hoffe, dass von euch 
jemand meinen Fehler sieht.
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.