Ansonsten macht das Programm nichts weiter. Ich habe noch weitere Arrays
derart angelegt, um den Programmspeicher zu füllen.
Ausgegeben werden die Werte wie folgt: 8187, 8188, 8189, 8190, 0, 1...
Auch bei den anderen Arrays stimmen die Elemente nicht. Woran kann das
liegen?
Grüße, Alex
Alexander H. schrieb:> Ausgegeben werden die Werte wie folgt: 8187, 8188, 8189, 8190, 0, 1...> Auch bei den anderen Arrays stimmen die Elemente nicht. Woran kann das> liegen?
Welcher AVR ist denn in Gebrauch? Ist dir klar, dass dein Array alleine
16382 Byte Flash brauchen würden?
Warum willst du den Flash-Speicher eigentlich füllen? Was ist Sinn und
Zweck der Aktion?
Hallo,
danke für eure Antworten. Ich verwende einen ATxmega128A1. Sinn und
Zweck der Aktion ist es, meinen Bootloader zu testen, im speziellen die
Generierung der zu sendenden Daten aus dem Intel-HexFile, und dafür ein
Programm zu haben, was etwas Sinnvolles macht und dabei möglichst den
ganzen Flash belegt. Quellcode kann ich morgen früh posten.
Grüße, Alex
Georg G. schrieb:> Warum ultoa? 16 Bit ist ein normaler Integer, kein Long.
Ja, das könnte man fragen, ist aber gewiss nicht das Problem.
Alexander H. schrieb:> Quellcode kann ich morgen früh posten.
Das ist sicher sinnvoll, hänge die Quellcode-Dateien einfach an den
Beitrag an bzw. wenn du den Code in den Beitrag packst denke daran die
entsprechenden Tags zu benutzen, sonst liest es sich recht schwer.
Der Fehler ist, dass zuerst die vier letzten Elemente kommen und dann
beginnt die Aufzählung von vorne? Oder sind zwischen drin auch Fehler?
Alexander H. schrieb:> Ich verwende einen ATxmega128A1. Sinn und> Zweck der Aktion ist es, meinen Bootloader zu testen, im speziellen die> Generierung der zu sendenden Daten aus dem Intel-HexFile, und dafür ein> Programm zu haben, was etwas Sinnvolles macht und dabei möglichst den> ganzen Flash belegt.
Dir ist klar, dass pgm_read_word nur auf die unteren 64k zugreifen kann?
Lass mich raten: zum Füllen des Speichers hast du mehrere dieser Arrays
angelegt, die alle die selbe Zahlenfolge enthalten. Und bei manchen
(nämlich jenen, die jenseits der 64k-Grenze liegen) hast du das
beschriebene Problem.
Stefan E. schrieb:> Dir ist klar, dass pgm_read_word nur auf die unteren 64k zugreifen kann?
guter Einwand
pgm_read_word_far() sollte helfen?
aber dann konsequent für alles nicht das ein Mischmasch entsteht.
geklaut aus:
Beitrag "Frage: Atmega >64k, PROGMEM und Pointer, AVR Studio 6"
ich bin selbst beim 2560 mal reingefallen, habe den aber lange nicht
mehr angesehen.
Stefan E. schrieb:> Dir ist klar, dass pgm_read_word nur auf die unteren 64k zugreifen kann?>> Lass mich raten: zum Füllen des Speichers hast du mehrere dieser Arrays> angelegt, die alle die selbe Zahlenfolge enthalten. Und bei manchen> (nämlich jenen, die jenseits der 64k-Grenze liegen) hast du das> beschriebene Problem.
Du muss Hellseher sein. Also erstens, nein das war mir nicht klar und
zweitens, ja. Ich habe mich mal an dem Link im letzten Post langehangelt
und das hier fabriziert:
Das macht zumindest erst einmal das, was ich erwarte. Warum dazu bei
FAR_SECTION ein 2*i notwendig ist, habe ich allerdings noch nicht ganz
verstanden.
Grüße, Alex
Alexander H. schrieb:> Warum dazu bei> FAR_SECTION ein 2*i notwendig ist, habe ich allerdings noch nicht ganz> verstanden.
Weil das Array 16-Bit-Elemente enthält. Das FAR() ist ja nicht wirklich
ein Pointer, sondern nur die Adresse in Form einer Zahl. Es kommt also
nicht die Pointer-Arithmetik zum tragen.