www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik WINARM Beispiel AT91SAM7S256


Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...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

Autor: Marius S. (lupin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lad dir Yagarto von http://www.yagarto.de/

Und dann arbeite mal dieses Tutorial durch:
http://www.atmel.com/dyn/resources/prod_documents/...

Eclipse mit Debugger integration ist einfach super. Im Tutorial wird 
auch beschrieben wie man seinen Code ins RAM bringt.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fertigen Code für die SD-Karte bekommst du hier:
ARM MP3/AAC Player

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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;

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...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

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ... 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.