hei, MPLAP 8.4 & PIC18F46K22 Bei meinem Projekt habe ich mehrere Array's im Flash liegen. Um im Programm flexiebel zu sein, spreche ich diese über Pointer an. Leider bekomme ich beim lesen einen fehlerhaften Wert zurück geliefert. Wenn ich die Array's ins RAM lege, also ohne "const rom far" funktioniert es. unsigned char *p_FunkBit; unsigned char bit_mask; const rom far unsigned char PortBit[8] = { 0b00000011, // ..... 0b00000000, // }; p_FunkBit = PortBit; bit_mask = p_FunkBit[0]; vielen Dank im voraus. schönen Abend
L. R. schrieb: > bit_mask = p_FunkBit[0]; in bit_mask bekommst du die Adresse von PortBit[0] zurück. Du wolltest wohl eher so etwas machen: p_FunkBit = PortBit; // entspricht "p_FunkBit = &PortBit[0];" bit_mask = *p_FunkBit;
hei,
@ Easylife (Gast)
immer noch der Fehler
PortBit liegt auf Adresse 48C4 Wert 1
48C5 2
....
p_FunkBit liegt auf Adress 348 Wert 0x48C
bit_mask = *p_FunkBit; ergibt 0xBF
schönen Abend
L. R. schrieb: > p_FunkBit liegt auf Adress 348 Wert 0x48C Hm. p_FunkBit müsste eigentlich 0x48C4 enthalten. Wirft dein Compiler ein map-file aus, in dem du nachgucken kannst, wo PortBit[] tatsächlich liegt? Versuche doch auch mal die Reihenfolge der keywords zu ändern: far rom const unsigned char ... und near rom const unsigned char ... und #pragma romdata PortBit = 0x200 //place at ROM addr 0x200 rom const unsigned char PortBit[8] = { (...) }; http://site.iugaza.edu.ps/ehabib/files/ES-chapter7.pdf
hei, @ Easylife (Gast) ups.. Schreibfehler richtig 0x48C4 map file schau ich mir an schönen Abend PortBit romdata 0x000200 program 0x000008 und far rom const unsigned char und #pragma romdata PortBit = 0x200 jetzt ist der Wert beim lesen 0 leider kein Erfolg
Leider kenne ich mich mit C18 auch nicht aus, aber möglicherweise liegt es daran, dass rom far char 24bit groß ist: http://ww1.microchip.com/downloads/en/devicedoc/51288f.pdf Kapitel 2.4.3 Dein Pointer ist auch auf ein normales char, also probier mal einen passenden Pointer zu benutzen: const rom far unsigned char * p_FunkBit
hei, @ Frank M. (frank_m35) Vielen Dank für deine wertvolle Info. Man sollte nicht nur das Array richtig deklarieren sondern auch den Pointer. jetzt kann ich auch den Rest aus dem RAM ins Flash verbannen. schönen Tag
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.