Forum: Mikrocontroller und Digitale Elektronik LPC22xx: Programm von SD-Karte lesen und im RAM ausführen


von Mork (Gast)


Lesenswert?

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

von Sigint 112 (sigint)


Lesenswert?

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

von Mork (Gast)


Lesenswert?

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

von Dominic R. (dominic)


Lesenswert?

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

von Mork (Gast)


Lesenswert?

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

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.