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] ?
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
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.
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.
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++; }
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.