Hallo,
ich möchte eine Bitkette die ich vorher mit PROGMEM geschrieben habe
wieder auslesen...
nur wie mache ich das? mit pgm_read_word geht es ja nicht...
const uint64_t charbytetable[] PROGMEM =
{
0b11111100001001000100100010011111110, //A
0b11111111001001100100110010010110110, //B
0b01111101000001100000110000010100010, //C
0b11111111000001100000110000010111110, //D
};
Wie verspeist man einen Elefanten? - Genau, in kleinen Stücken.
also: Warum nicht in Stücken einlesen und zusammenbasteln.
Notfalls baust du dir die Funktion pgm_read_qword halt selbst ...
Der "Ingenieurweg" ist der, das Du Dir Gedanken machst was das Programm
machen soll und auf welche Weise es das tun soll. Das ergibt zwei
Beschreibungen, meinem persönlichen Geschmack nach, vorzugsweise mit
Bildern.
Falls etwas nicht klappt, und das ist garnicht so selten und auch nicht
irgendwie negativ, dann vergleichst Du das was tatsächlich geschieht mit
deiner Vorstellung von dem was geschehen soll.
Das ergibt wieder eine Beschreibung.
Diese drei Beschreibungen postest Du bitte hier.
Danke für die Beachtung aller Sicherheitsmaßnahmen :-)
Matze schrieb:> warum bitte?
Weil uint8_t eben nur mal 8 Bits groß ist.
In Case 1 - 3 sind die untersten 8 Bits eben 0.
In Case 4 wird nur Bit 7 geliefert.
Nur Case 5 liefert Bit 0 .. 6.
Es ist nicht gerade schlau für 35 Bits immer 64 Bits zu verschwenden.
Auch werden Displays oft Byte-Weise angesteuert. Daher werden die
ASCI-Bitmasken üblicher Weise als 5 Byte Array (5*8) abgelegt und man
spart sich aufwendige Schiebereien.
Peter
Ziemlich sicher willst du nicht wirklich 64-Bit Werte verwenden.
Falls doch, geht das Auslesen als 64-Bit Wert aus dem Flash erst ab
avr-gcc 4.7:
1
#include<stdint.h>
2
3
const__flashuint64_tval64[]=
4
{
5
0,1,2
6
};
7
8
uint64_tread_val(uint8_ti)
9
{
10
returnval64[i];
11
}
In älteren Versionen muss der Wert aus mehreren pgm_read_xxx
zusammengebastelt werden.
Weiters gibt es ab 4.8 die Möglichkeit, 64-Bit Register in
Inline-Assembler zu verwenden:
Falk Brunner schrieb:> @Simon K. (simon) Benutzerseite>>>Hmm, es gibt ja gar kein pgm_read_block? Aber eeprom_read_block gibts.>> Nein, nur byte, word, dword. Reicht aber.
In wie fern? ;-) pgm_read_block fände ich schon praktisch. Zumindest
fande ich eeprom_read_block bisher sehr praktisch.
Reichen tuts, klar. Aber man muss sich ja nicht mit allem zufrieden
geben ;-)
Simon K. schrieb:
Aber man muss sich ja nicht mit allem zufrieden geben.
Naja, du gibt dich ja auch mit einer alten Compiler-Version zufrieden
;-)
Nimm ne aktuelle Version und du brauchst überhaupt kein pgm-Zeugs mehr.
Johann L. schrieb:> Simon K. schrieb:>> Aber man muss sich ja nicht mit allem zufrieden geben.>> Naja, du gibt dich ja auch mit einer alten Compiler-Version zufrieden> ;-)
;-) Ja, ich finde die Einführung von dem flash-Keyword auch sehr
praktisch. Mache zur Zeit aber nichts mehr mit AVRs und deswegen konnte
ich es noch nicht ausprobieren. Mein Verständnis war bisher, dass das
noch eher im "Beta-Stadium" ist. Ausprobiert habe ich es noch nicht.
Ich bin zur Zeit eher im Anfangsstadium im STM32 Segment unterwegs.
Simon K. schrieb:> ich finde die Einführung von dem flash-Keyword auch sehr praktisch.> Mein Verständnis war bisher, dass das noch eher im "Beta-Stadium" ist.
Was meinst du mit "beta"?
Im avr-gcc 4.7 gibt es keine offenen Bugs.