Hallo,
wie lässt man einen LPC22xx ein Programm von einer SD-Card n einen
externen SRAM einlesen und dieses dann ausführen? Was muss man alles bei
WinARM einstellen, damit das möglich ist? Geht das überhaupt? Ich möchte
nähmlich so eine Art Betriebssystem schreiben(ähnlich wie MS-DOS), da
ich es satt hab, immer den Flash des Controllers zu beschreiben, da das
Übertragen sehr lange dauert. Oder soll ich gleich µCLinux draufmachen?
Und was bringt mir das dann?
MfG Mark
Hallo Mark,
ich hab zwar noch nichts mit ARMs gemacht aber dabei handelt es sich
ja um eine vonNeumann Architektur, also sollte es ohne Probleme möglich
sein Programme von einer SD-Card zu laden. Du musst halt ein Bootloader
schreiben, der die SD-Card erkennt und dann das Programm an eine
bestimmte Stelle im Speicher schreibt. Danach kann der Bootloader
einfach zum Entry-Point deines Programms springen. Ich denke mal, daß
die LPC22xx ein externes Speicherinterface besitzen, oder?
Mit WinARM kenn ich mich leider nicht aus... deshalb kann ich dazu nicht
viel sagen.
Ich würde aber bei entsprechenden Resourcen dazu tendieren Linux
einzusetzen... da musst du dann nicht mehr ums Betriebssystem kümmern
und kannst fertige Software einsetzen.
Gruß,
SIGINT
Hallo,
das Problem ist, dass ich niht weiss, wie ich WinARM sagen soll, dass er
das Programm so schreiben soll, dass das Programm, alle Variablen usw.
ab der Adresse 0x8000 0000 plaziert werden, weil der externe Speicher
dort anfängt und das Teil ja keine MMU hat. Was Linux angeht kann ich
mich immernoch nicht entscheiden, weil ich absolut keine Kentnisse von
Programmierung von Treibern hab. Fertige Software werde ich
wahrscheinlich nicht benutzen können, das es sich um einen Roboter
handelt, dessen Programmierung ja sehr hardwarespeziefisch ist.
MfG mark
Hi,
die Platzierung von Code, Daten etc. im Speicher wird bei einer GNU
toolchain wie WinARM durch ein Linker Skript festgelegt. Compiler und
Assembler erstellen erstmal "relocatable objects", die dann vom Linker
in eine executable gebunden werden. Dem Linker übergibt man dazu mit "-T
<script>" eine Datei, die erst alle verfügbaren Speicherbereiche bekannt
macht (int RAM, int Flash, optional ext. Flash), und anschliessend die
sections der Objekte den Speicherbereichen zuweist. Beispiele zu solchen
Linker Skripten findet man z.B. in Jim Lynch's exzellenten Tutorials.
Sofern dein LPC22xx Board nicht über mehrere MB Speicher verfügt ist
uCLinux wohl der falsche Weg.
Ob die "langen" Flashzeiten das Ausweichen auf ein derart komplexes
Vorhaben rechtfertigen wage ich allerdings zu bezweifeln. Ausserdem
dürfte die Ausführung aus externem RAM eine Performance Bremse
darstellen.
Gruss,
Dominic
Hallo,
>Sofern dein LPC22xx Board nicht über mehrere MB Speicher verfügt ist>uCLinux wohl der falsche Weg.
im moment nur 512kB, es währen aber auch 2/4mb denkbar.
>Ob die "langen" Flashzeiten das Ausweichen auf ein derart komplexes>Vorhaben rechtfertigen wage ich allerdings zu bezweifeln.
Na ja, die Flash-Zeiten eigentlich doch eher weniger. sondern eher die
Tatsache, dass ich immer nur EIN Programm drauf haben kann. Natürlich
kann ich da mehrere in einen Quellcode packen und dann compilieren, es
nervt aber, denn es währe mir viel lieber, wenn ich da einfach wie bei
einem PC Programme dazufügen/entfernen kann, ohne den halben Code zu
ändern. Ausserdem ist der interne Flash nich unendliche groß und kann
auch nicht unendlich oft beschrieben werden und es wäre mir lieber, ein
neue SD-Card zu kaufen als einen neuen Controller. Übrigens plane ich
das schon als ein großes Projekt, ich hätte kein Problem damit, wenn es
bis Herbst oder gar Winter dauern würde.
>Ausserdem dürfte die Ausführung aus externem RAM eine Performance Bremse>darstellen.
Wieso, der int. Flash haat ja auch bestimmte Zugriffszeiten. Zudem
könnte ich oft vorkommende Routinen auch im Flash unterbringen und diese
dann als Betriebssystemroutinen aufrufen.
mfg Mark