[PIC]Tabellen in C

Gast #2781348
Lesenswert?
• ▲
▼
Hi,
da ich nun ein größeres Projekt beginne, möchte ich mich bei C 
reinfitzen.
Allerdings scheitere ich da schon an so einer einfachen Sache wie dem 
auslesen einer Tabelle...
Ich möchte eine Grafik auf einem Display ausgeben und habe dafür ein 
Programm dass mir aus der Bitmap eine C Tabelle macht, das sieht dann so 
aus:
1
const unsigned char LCD_write_thor_logo [] = {
2
0xFF, 0xFF, 0xFF, 0xDF, 0x8F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
3
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
4
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x8F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
5
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
6
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
7
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F,
8
0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC,
9
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
10
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
11
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
12
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB,
13
0xF9, 0xF8, 0xF8, 0x78, 0x38, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0,
14
0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
15
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
16
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
17
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
18
0xFF, 0xDF, 0xCF, 0xC7, 0xC3, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xC3,
19
0x63, 0x73, 0x7B, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
20
0xFF, 0x7F, 0x3F, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0xFF,
21
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x0F, 0x0F, 0xCF, 0xFF, 0xFF,
22
0xFF, 0xDF, 0x8F, 0x8F, 0x8F, 0x9F, 0x9F, 0x9F, 0x9F, 0x1F, 0x1F, 0x1F, 0x1F, 0x9F, 0xDF, 0xFF,
23
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x07, 0x01, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC,
24
0xFE, 0xFF, 0x7F, 0x0F, 0x01, 0xC0, 0xCC, 0xCF, 0xCF, 0xCF, 0x0F, 0x0F, 0x81, 0xC0, 0xEC, 0x9F,
25
0x07, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, 0xFE, 0xFE, 0x7C, 0x38, 0x01, 0x83, 0xC7, 0xFF, 0x03, 0x01,
26
0x80, 0x0C, 0x0C, 0xC0, 0xE0, 0xF1, 0xFB, 0xFF, 0xFF, 0xF9, 0xF8, 0x7C, 0x1E, 0x03, 0xC0, 0xF0,
27
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x07, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0xFC, 0xFE,
28
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xCF, 0xC3, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF,
29
0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xE3, 0xE0, 0xE8, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xE3, 0xE0, 0xE8,
30
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xF0, 0xF1, 0xF1, 0xF1, 0xF9, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF,
31
0xFF, 0xF7, 0xF0, 0xF0, 0xF7, 0xFF, 0xFC, 0xF8, 0xF1, 0xF3, 0xFF, 0xFF, 0xEF, 0xE7, 0xE1, 0xE0,
32
0xE0, 0xE6, 0xEF, 0xFF, 0xEF, 0xE7, 0xE3, 0xE1, 0xE0, 0xE8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
33
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
34
};


Ich habe mir schon verschiedene Anfänger Tutorials durchgelesen, 
allerdings ist keines näher auf Tabellen eingegangen.
Muss ich da jetzt mit Vektoren arbeiten?
#2781433
Lesenswert?
• ▲
▼
Wenn der PIC ein 8 Bitter ist, dann musst Du dem Compiler noch sagen, 
dass er Dein Array in den Programmadressraum, dh ins Flash lesen soll. 
Ansonsten ist Dein Ram im Nu voll. Der Microchip C18-Compiler hat dafür 
das Schlüsselwort rom. Schau in die Dokumentation zum Compiler rein.

fchk
#2781445
Lesenswert?
• ▲
▼
Also erstmal gibt es in C keine "Tabellen". Eine Tabelle ist 
mehrdimensional. In C gibt es nur (eindimensionale) Arrays. Ganz einfach 
weil der Speicher eindimensional ist. Es gibt zwar mehrdimensionale 
Gebilde, aber diese bestehen im Grunde nur wieder aus eindimensionalen 
Arrays welche Zeiger auf andere eindimensionale Arrays besitzen. 
Allerdings sind diese Daten da oben eindeutig eindimensional und somit 
nur eine Liste von Bytes.

Erstmal muss doch die Terminologie stimmen.

Dann kann man natürlich diese Liste als 2D-Daten für ein Display 
auffassen. Wenn man die Zeilenbreite festlegt. Mit einer einfachen 
Formel kann man so auf ein Element über 2D Koordinate x und y zugreifen.

Dann wird es doch erst spannend wenn der TE mal damit rausrückt was er 
nun mit den Daten machen will.

gruß cyblord
Gast #2781940
Lesenswert?
• ▲
▼
Er hat doch geschrieben was er machen will
> Ich möchte eine Grafik auf einem Display ausgeben ...

Du brauchst keine Vektoren (wie bereits erwähnt gibs sowas in C nicht) 
und auch keine Zeiger.
Ein einfaches

char data;

for (i = 0; i < groesse_des_arrays; i ++) {
    data = LCD_write_thor_logo[i];
    sende_byte_ans_lcd(data);
}

sollte einigermaßen deutlich machen, wie die Tabelle ausgelesen wird. Um 
das letztendlich zu implementieren braucht man Informationen wie das LCD 
angesprochen werden will.
Gast #2782214
Lesenswert?
• ▲
▼
Ich arbeite mit zwei Compiler...

#define MICROCHIP_C18 (0)  //Für SDCC
//#define MICROCHIP_C18 (1)  //Für MPLAB

#if    MICROCHIP_C18
   #define __code  rom
#else
#endif

const __code  unsigned short Log2Tab[] = 
{0,2909,5732,8473,11136,13727,16248,18704,21098,23432,25711,27936,30109, 
32234,34312,36346,38336,40286,42196,44068,
45904,47705,49472,51207,52911,54584,56229,57845,59434,60997,62534,64047, 
65535
                       };
#2795995
Lesenswert?
• ▲
▼
skorpionx schrieb:
> Es ist möglich dass die Länge einer Tabelle in einem Compiler begrenzt
> ist..

Die Länge eines Arrays, das im RAM abgelegt ist, wird durch das 
Linker-File begrenzt. Dort ist das RAM in einzelne Speicherbereiche 
aufgeteilt. Ist das Array grösser als ein Speicherbereich, so gibt der 
Compiler eine Fehlermeldung raus. Das Linker-File kann natürlich 
verändert werden. Google verrät dir, wie du grosse Arrays im PIC anlegen 
kannst.

Wenn das Array im Flash angelegt werden soll, muss du dies dem 
C18-Compiler folgendermassen mitteilen:
const rom unsigned char LCD_write_thor_logo [] = { ... };

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.