Grafikdaten im Flash ablegen

Gast #119353
Hallo,
ich versuche gerade beim M16C 64kB Grafikdaten über Assembler an
Adresse A0000 (oberster Flash Block bei 384kB) ins Flash zu schreiben.
Dazu verwende ich ein einfaches Assemblerprogramm (eigentlich kein
Programm, sondern nur Daten):
.section Grafikdaten
.org a0000h
.Byte "hier stehen die Grafikdaten"

Solange ich bei org unter a0000 bleibe funktioniert es, aber a0000
aufwärts verursacht einen Fehler beim Compilen:
test.a30 2 Error (asp30): Operand value is not defined

Nun das nächste Problem:
Ich schreibe jetzt, sagen wir mal 10 Bilder mit je 1024Bytes ins Flash
an Adresse A0000.
Wie kann ich in C ein Array erzeugen, das genau diese Daten enthält,
also an Adresse A0000 beginnt und in etwas so aufgebaut ist:
Bilder [10] [1024] ?
Gast
Hi

IIRC ist es nötig die Zahl für den Assembler als Zahl zu markieren ->
du mußt eine Null vor die eigentlich Zahl stellen. Ansonsten kann der
Assembler nicht zwischen einer irgendwo definierten Konstante A0000h
und deiner Zahl A0000h unterscheiden.

.org 0a0000h sollte also funktionieren.

bilder[10][1024] dürfte eigentlich nicht funktionieren da bilder[10]
einen Pointer zurückgeben müßte. Diese Pointer müßtest du in einer
Schleife getrennt initialisieren.

uint8_t * bilder;

bildbayte = *(bilder+1024*x+y);

für den Zugriff auf Bild x an Byte y sollte aber funktionieren.

Matthias
Gast
Super, Danke !
Das mit der vorgestellten 0 hat schonmal funktioniert.
Das mit den Pointern bekomme ich dann hoffentlich auch noch hin, sowas
lernt man leider in der Schule in Informatik nicht. Und die meisten C
Tutorials sind für Mikrocontroller eher weniger zu gebrauchen.
Gast
Eine frage habe ich noch zu dem Pointer:
Wie bekomme ich die Adresse a0000h in den Pointer ?
In allen Beispielen werden nur Variablenadressen mit
Pointer=&Variable geladen, aber ich muss benötige ja sowas wie
Pointer = a0000h, was aber in einem Fehler beim Compilen endet.
Gast
So habe ich das auch gemacht, der Compiler meldet keinen Fehler, aber
auf dem LCD erscheint etwas, das eher nach Programmcode aussieht.
Im Debugger sieht man, dass der Pointer nicht mit A0000h initialisiert
wird, sondern mit 0. Aber die Software ist doch OK, oder ?


    char *_far Bilddaten;

    Bilddaten= (unsigned char *)0xA0000;

    for (y=0; y<8; y++)
      for (x=0; x<256; x++)
          {SendCom (29);   //Data Write
           SendDat (*Bilddaten);
           Bilddaten++; }

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.