Forum: Mikrocontroller und Digitale Elektronik Probleme beim PIC18F27Q84


von Maxi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe mit dem PIC18F27Q84 angefangen und wollte ein Bootloader 
Programmieren. Um den Bootloader zu begrenzen und noch Platz für die 
Applikation zu haben muss natürlich der ROM bereich festgelegt werden. 
Dabei sind aber Probleme aufgetreten die ich mit nicht erklären kann 
oder beheben kann:

ROM ranges: ""       - keine Probleme
ROM ranges: "0-FFFF" - keine Probleme aufgefallen
ROM ranges: "0-EFFF" - Speicherzugriff Probleme, zellen werden nicht 
mehr richtig ausgelsen
ROM ranges: "0-5FFF" - das selbe wie "0-EFFF"
ROM ranges: "0-2FFF" - Kompilierungsfehler weil der compiler das 
Programm auf 0x3800 legen möchte

ich lade mal mein testprojekt mit dazu, ich hoffe mir kann jemand helfen

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Maxi schrieb:
> ich hoffe mir kann jemand
dann fang mal hier an ... und helf dir selbst!

main.c:12:10: warning: incompatible pointer types initializing 'uint8_t 
*' (aka 'unsigned char *') with an expression of type 'uint16_t *' (aka 
'unsigned short *') [-Wincompatible-pointer-types]

uint8_t *BufferRAM = (uint16_t*) &bufferRAM;

              ^            ~~~~~~
main.c:91:44: warning: implicit conversion loses integer precision: 
'uint16_t' (aka 'unsigned short') to 'uint8_t' (aka 'unsigned char') 
[-Wconversion]

BufferRAM[i] = i;

von Maxi (Gast)


Lesenswert?

Danke für die Antwort ich habe das Problem gefunden, habe aber keine 
Ahnung warum das das auslöst. Ich habe jetzt die Zeile:

static const uint8_t DLC_BYTES[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 
20, 24, 32, 48, 64};

durch

uint8_t DLC_BYTES[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 20, 24, 32, 
48, 64};

ersetzt. (can.h) wieso das solche auswirkungen hat keine Ahnung 
vielleicht kann mir das jemand verraten. Aber jetzt gehts.

von A. S. (Gast)


Lesenswert?

Maxi schrieb:
> Ich habe jetzt die Zeile:
>
> static const uint8_t
>
> uint8_t

wenn es const ist, könnte der compiler das in das flash legen. Und jeder 
lesezugriff flashoperationen hervorrufen.

wenn es static in einer header ist, könnte es mehrfach instanziiert 
werden und adressen (pointer darauf) dementsprechend unterschiedlich 
sein.

zudem sind je nach Compiler pointer zwischen ram und rom 
unterschiedlich. eine wechselseitige Zuweisung daher nicht möglich oder 
fehlerhaft.

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
Noch kein Account? Hier anmelden.