www.mikrocontroller.net

Forum: Compiler & IDEs Konstantes char array im Flash ablegen


Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

erstaml sorry, ich habe diesen teil schon mal in nem anderen Forum 
gepostet, denke aber hier passt er besser her!

ich benutze den GNU GCC Compiler und möchte folgendes realisieren:

#include <avr/pgmspace.h> //WinAVR
#include <progmem.h> //AVR-GCC

const unsigned char code carbmp[]= { //Keil
const rom unsigned char carbmp[]= { //Microchip C18
const unsigned char carbmp[]= { //SDCC
prog_uchar carbmp[]= { //AVR-GCC, WinAVR


Hab diese Möglichkeiten für andere Compiler gefunden, wie mach ich das 
mit GNU GCC?
Möchte ein Konstantes Char Array im Flash meines Philips LPC2119 
ablegen!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pgmspace.h und die darin betriebenen Dinge sind auf einem ARM wie dem 
LPC2119 vollkommen unnötig, da das eine von-Neumann-Maschine ist (im 
Gegensatz zur Harvard-Architektur des AVR).

Es gibt also nur einen Adressraum, in dem sowohl RAM als auch ROM liegen 
- aber eben an unterschiedlichen Adressen.

Daher sollte es genügen, wenn Du das Schlüsselwort "const" verwendest - 
probiere es aus und sieh Dir das Mapfile an bzw. bestimme zur Laufzeit 
die Speicheradresse Deines Arrays.

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, bin noch nicht allzu erfahren.
Const hab ich schon ausprobiert - hat nicht funktioniert.
möcht erst mal sicher gehen, ob das Array wirklich im Flash abgelegt 
wird.
wo kann ich mir das Mapfile ansehen?
Oder wie find ich das sonst raus?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich zitier' mich mal:

> bestimme zur Laufzeit die Speicheradresse Deines Arrays

Im Datenblatt/Programmiermanual des LPC2119 ist die Speicherbelegung 
angegeben, welche Adressen liegen im RAM, welche im ROM, welche werden 
für Peripherie verwendet und welche liegen brach.

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das weiß ich auch, nur wo kann ich mir ansehen in welchem 
Speicherbereich mein Array liegt?

Danke für deine Geduld!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf("%08X", (unsigned int *) carbmp);

Oder im Debugger nachsehen.

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

Autor: Martin Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenns sich erledigt hat, kann man wenigstens die anderen Threads im 
anderen Forum abschließen ("hat sich erledigt"). Dann hätte ich mir die 
Arbeit mit der Prosa im anderen Thread mit gleichlautender Frage sparen 
können. Sorgt für Verdruss - da hilft auch kein vorauseilendes "Danke 
für die Geduld", wenn man gleichzeigt zeigt, dass man selbst keine hat, 
um erstmal auf eine Antwort zu warten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.