www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7S256 USB / VirtualCOM


Autor: Luky S. (luky)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss 4096 Messwerte zu je 16Bit von einem AT91SAM7S zum PC schicken.
Ich habe mir dabei mal die VirtualCOM Demo von
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm...
angesehen und angepasst.
Die Anmeldung an den PC klappt auch wunderbar, aber manchmal kommt die 
Ordnung der Messwerte durcheinander oder es werden gar Werte 
verschluckt.
Mehrere Terminalprogramme zeigen dasselbe Verhalten, also dürfte es 
nicht auf der PC- Seite fehlen.
Ich habe das Mikrocontrollerprogramm auf ein Minimum reduziert und 
angehängt.
Kann mir bitte jemand einen Tipp geben?

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein gcc Anpassung beruht noch auf einem recht alten Code von Atmel. 
Kann durchaus sein, dass da noch ein paar Unzulänglichkeiten drin sind. 
Inzwischen stellt Atmel eine neue Codesammlung bereit (AT91SAM7S 
software package), in der auch ein CDC Beispiel enthalten ist, das 
augenscheinliche auf dem AT91 USB-Framework beruht. Die Sammlung enthält 
neben den Einstellungen/Anpassungen für die IAR tools auch schon 
Anpassungen für ARM GNU toolchain. Vielleicht hilft's: 
http://www.atmel.com/dyn/products/tools_card.asp?t...

Martin Thomas

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis!
Ich habe mir nur das AT91 USB Framework - Core 1.02 + CDC 1.0 angesehen 
und das ist nix für GCC

Ich habe das Projekt (usb-device-cdc-serial-project-1.1-at91sam7s-ek) 
jetzt mal in Yagarto (neueste Version) importiert, werde aber die 
folgenden Fehler einfach nicht los...

boards/at91sam7s-ek/board_cstartup.S:101: Error: internal_relocation 
(type: OFFSET_IMM) not fixed up
boards/at91sam7s-ek/board_cstartup.S:102: Error: internal_relocation 
(type: OFFSET_IMM) not fixed up

     ldr     lr, =AT91C_BASE_AIC
101  ldr     r0, [r14, #AIC_IVR]
102  str     lr, [r14, #AIC_IVR]


boards/at91sam7s-ek/board_cstartup.S:114: Error: internal_relocation 
(type: OFFSET_IMM) not fixed up
     ldr     lr, =AT91C_BASE_AIC
114  str     lr, [r14, #AIC_EOICR]

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt das usb-device-cdc-serial-project-1.1-at91sam7s-ek 
erfolgreich zum laufen gebracht, habe aber noch ein Problem:

Ich bekomme keine Routinen ins RAM um sie von dort schneller 
auszuführen:

#define _ramfunc __attribute_ ((long_call, section (".fastrun")))

__ramfunc void Testroutine(void) {

//Tue was

}

produziert beim Kompilieren folgenden Fehler:

c:/programme/yagarto/bin/../lib/gcc/arm-elf/4.2.2/../../../../arm-elf/bi 
n/ld.exe:  section .fastrun [00102498 -> 001024ef] overlaps section 
.relocate [00102498 -> 00102547]
collect2: ld returned 1 exit status

Wie kann ich die Routine in einen anderen bereich mappen?
RAM ist noch genügend frei.

Autor: Martin Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
".fastrun" ist keine vordefinierte Section und muss entsprechend 
verarbeitet werden. Im Linker-Scipt in der Art:
  .data : AT (_etext)
  {
    _data = . ;
    KEEP(*(.vectmapped))
    . = ALIGN(4);
    *(.fastrun .fastrun.*) /* <--- */
    . = ALIGN(4);
    SORT(CONSTRUCTORS)
    . = ALIGN(4);
    *(.data)
    *(.data.*)
    *(.gnu.linkonce.d.*)
    . = ALIGN(4);
  } >DATA
Kopieren des Codes vom ROM LMA to RAM VMA erfolgt dann mit der Kopie von 
initialisierten Variablen.

Alternativ kann man auch dies versuchen, spart Modifikation des 
Linker-Scripts, könnte aber u.U. Probleme mit alignments geben:
#define _ramfunc __attribute_ ((long_call, section (".data")))

Hoffe, es hilft
Martin Thomas

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super!
Danke!
Jetzt läufts wunderbar!
Du solltest ein Buch über ARM-Programmierung schreiben...

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.