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:
Ich habe mir schon verschiedene Anfänger Tutorials durchgelesen,
allerdings ist keines näher auf Tabellen eingegangen.
Muss ich da jetzt mit Vektoren arbeiten?
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
Ps: Vektoren sind C++. C kennt nur Arrays, und Du hast erfolreich eines
angelegt. Also alles ok, bis aufs rom Keyword. Wenn Du Hitech oder
MicroE nimmst, heißt das anders -> Manual.
fchk
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
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.
EGS_TI schrieb:> Schön für dich, was hat das mit dem Thema zu tun?
Ich habe keine Probleme meine Tabelle einzulesen.
Es ist möglich dass die Länge einer Tabelle in einem Compiler begrenzt
ist..
EGS_TI schrieb:> Wasn fürn "rom Keyword"?>> Also bei den neuen Microchip Compilern landen const-Variablen> automatisch im Flash.
Du meinst den XC8? Mag sein. Dem C18 muss man das manchmal auf die Nase
binden. Und HiTech ist wieder eine andere Sache.
fchk
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 [] = { ... };