Hallo NG, nachdem ich mir jetzt mit der besch*** SD-Karte so langsam meine Zähne ausgebissen habe, möchte ich nun doch über einen Umstieg auf C nachdenken. Hat mir vielleicht jemand ein Minimalbeispiel mit Startupskript und Makefile für WINARM? Am besten alles in ein "pnproj" verpackt, so dass man einfach "make all" aus dem Menü aus aufrufen kann. Im Makefile sollte auch der RUN-Mode auswählbar sein (RAM/ROM). im Beispiel würde mir reichen, dass einfach eine LED angesprochen wird. So ála: int main(void) { m_pPio->PIO_CODR = BIT18; m_pPio->PIO_SODR = BIT18; } Für Hilfe wäre ich wirklich sehr dankbar! Grüße aus dem Süden, Peter
...noch eine Frage zum Thema C: wie kann ich es erreichen, dass mein C-Code relokierbar ist? Mir würde es gefallen, wenn ich Kode bekommen würde, der an irgendeiner Stelle im RAM läuft. Geht das überhaupt? MfG Peter
Lad dir Yagarto von http://www.yagarto.de/ Und dann arbeite mal dieses Tutorial durch: http://www.atmel.com/dyn/resources/prod_documents/atmel_tutorial_source.zip Eclipse mit Debugger integration ist einfach super. Im Tutorial wird auch beschrieben wie man seinen Code ins RAM bringt.
> nachdem ich mir jetzt mit der besch*** SD-Karte so langsam meine Zähne > ausgebissen habe, möchte ich nun doch über einen Umstieg auf C > nachdenken. Eine weise Entscheidung. Zum Thema SD-Cards: http://elm-chan.org/docs/mmc/mmc_e.html
> Eclipse mit Debugger integration ist einfach super. Im Tutorial wird > auch beschrieben wie man seinen Code ins RAM bringt. Naja, wie ich den Code ins RAM bekomme und starte ist mir eigentlich schon klar. Mich würde halt brennend interessieren, was ich tun muss, damit ich entweder festlegen kann, wo ich den Code hinladen möchte, oder wie ich es mache, dass der Code überall im Speicher lauffähig ist. bitte_um_Hilfe->Danke;
> ...möchte ich nun doch über einen Umstieg auf C nachdenken...
Gut gemeinte Ratschläge brauchen etwas Zeit verinnerlicht zu werden.
Die Adressen vergibt der Linker nach Vorgaben im Linker-Script. Typisch
erzeugt man eine Konfiguration für "Flash" (.text, .rodata und
Initialwerte für .data im Flash, .data VMA und .bss im RAM) und evtl.
noch eine für "RAM debugging" (alles im RAM-Adressraum, .data braucht
nicht kopiert zu werden, Remapping bei Verwendung von Interrupts
erforderlich). Daneben gibt es noch diverse andere Möglichkeiten
(Funktionen aus RAM ausführen, Variablen an bestimmte Speicheraddressen
binden usw.). Flash-Adresse bzw. Startadresse beim Upload ins RAM müssen
mit den Vorgaben für den Linker übereinstimmen.
Informationen:
- GNU Binutils Dokumenation durchlesen (ld)
- GNU gcc Dokumentation lesen (v.a. function- und variable attributes)
- Beispiele und deren Linker-Scripts nachvollziehen (z.B.
Lynch-Tutorial, embedded.com Artikelsammlung, WinARM Beispielsammlung
(und deren Updates von "meinen" Web-Seiten))
Für Weiteres müsste genauer beschrieben werden, was mit "überall"
gemeint ist.
Martin Thomas
> ... für Weiteres müsste genauer beschrieben werden, was mit "überall" > gemeint ist. naja, wenn ich z.B. einen PIOA-Pin als Output definiere, dann ist das ja eigentlich eine absolute Sache, so wie ich das sehe. Es gibt eine Feste Basisiadresse und einen festen Offset von dieser Adresse aus. So etwas in Assembler geschrieben, läuft sowohl bei 0x202000, als auch bei 0x203000 usw... Wenn ich aber jetzt in C mit Variablen arbeite, um z.B. in einer Schleife zu zählen, dann verändert sich ja deren Inhalt zur Laufzeit. Somit muss sich doch der Compiler entweder Register zu Nutze machen, was aber von der Anzahl der verwendbaren Variablen nahezu unmöglich sein dürfte. Oder er legt die Variablen im RAM an, was auch sowas wie "alloc" erklären dürfte. Hat denn niemand für WinARM so ein Beispiel, welches auch läuft? Wenn ich das Beispiel mit den LEDs versuche, dann gehen immer beide LEDs an, und nichts passiert mehr. Übrigens egal, was ich in Main schreibe, somit denke ich, dass die Initialisierung nicht klappt.
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.