Forum: Mikrocontroller und Digitale Elektronik Bootloader-Test; großes Hex-File erzeugen


von Alexander H. (ill_son)


Lesenswert?

Hallo,

ich habe für ein Projekt den Atmel-Bootloader,
Link:
www.atmel.com/images/Atmel-8242-XMEGA-Boot-Loader-Quick-Start-Guide_Appl 
icationNote_AVR1605.pdf

angepasst und eine eigene PC-Software zum Flashen geschrieben. Um das 
ganze für Controller mit Flash > 64k zu testen muss ich irgendwie ein 
Hex-File erzeugen, das etwas Sinnvolles macht (UART-Ausgabe, Blinken 
oder was auch immer) und das auch noch groß genug ist, damit im Hex-File 
ein Record mit Typ 2 auftaucht, also mehr als 64k Programmspeicher 
belegt. Gibt es ein probates Mittel, mit wenig Aufwand viel Speicher zu 
verbrauchen, ohne tausend mal

1
uart_puts(PSTR("kjhkjhkjhkhkjh"));

zuschreiben?

Grüße, Alex

: Bearbeitet durch User
von dummy (Gast)


Lesenswert?

Bilder oder Sounds als Flash Array verbraucht immer schön viel Platz;)

von Alexander H. (ill_son)


Lesenswert?

Hi,

danke für den Hinweis. Allerdings hab ich das noch nie eingebunden. 
Kannst Du mit einen Tipp bzw. Link nennen, wie das funktioniert?

von S. Landolt (Gast)


Lesenswert?

Mit copy&paste immer größere Blöcke erzeugen.

von Jay (Gast)


Lesenswert?

Hallo,

schau dir doch mal http://srecord.sourceforge.net an. Damit solltest du 
hoffentlich erreichen können, was du willst.

Ich würde vorschlagen mit -random-fill Daten nach den eigentlich 
Instruktionen erzeugen und mit deinem Bootloader hochladen. 
Anschliessend kannst du den Speicher wieder über den Programmer auslesen 
und miteinander vergleichen.

CU,
Jay

von dfhgfth (Gast)


Lesenswert?

Einfach ein großes Array anlegen:
1
#include <stdio.h>
2
3
#define A B B B B B B B B B B B B B B B
4
#define B C C C C C C C C C C C C C C C
5
#define C D D D D D D D D D D D D D D D
6
#define D E E E E E E E E E E E E E E E
7
#define E F F F F F F F F F F F F F F F
8
#define F G G G G G G G G G G G G G G G
9
#define G 0xabcd,
10
11
int main()
12
{
13
    int foo[] = {A 0};
14
    /* ... */
15
}

von Alexander H. (ill_son)


Lesenswert?

Danke, ihr seid ja kreativ. Das sollte helfen.

Grüße, Alex

von Nop (Gast)


Lesenswert?

Alexander H. schrieb:
> danke für den Hinweis. Allerdings hab ich das noch nie eingebunden.
> Kannst Du mit einen Tipp bzw. Link nennen, wie das funktioniert?

Unter Linux oder Cygwin gibt es dafür das Tool "xxd". Mit xxd -i kann 
man C-include-Files aus Binärdaten erzeugen, die man einfach mit 
#include in den Source einbindet.

Damit kann man außerdem (konstante) Dateien einbinden, ohne ein 
Dateisystem zu brauchen. Die spricht man ganz einfach als char-Array an. 
xxd legt außerdem eine weitere Variable mit der Länge des Arrays an, so 
daß man die Datei auch aktualisieren kann (zur Compilierzeit), ohne daß 
man den Rest des Sourcecodes ändern muß, wenn man die Arraylänge über 
diese Variable abfragt.

von Vincent H. (vinci)


Lesenswert?

asm volatile(".space 65536");

von Achim (Gast)


Lesenswert?

Für konstante globale Variablen wird doch ROM reserviert. Also

const int a[10000];

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.