Forum: Mikrocontroller und Digitale Elektronik Assembler Libraries für USB, wo? ARM, MSP430, ähnliche


von Matthias K. (kannichauch)


Lesenswert?

Hallo

Ich fand bisher, das es kostenlose Libraries bzw. Programme gibt, u.a. 
von Herstellern von Controllern, z.B. um die USB Schnittstelle korrekt 
anzusteuern.

Ideal wäre zum Beispiel ein Programm im Flash, welches einen von beiden 
Seiten beschreibbaren und lesbaren Speicher aus dem Ram bereitstellt.
Etwas ähnlich interessantes sind ja auch mp3 Kompression für 
Tonaufnahme, Dateisystemtreiber für SD Cards, und z.B. Fourieranalyse 
oder wie das heißt.

Ich fand auch etwas, aber nur in C oder C für den Gnu Compiler.
Leider kann ich mit C nicht, es graust mir davor.
Assembler geht, oder Basic könnte auch gehen.

Könnt Ihr etwas schlaues dazu sagen?
Kann ich als C Laie den Gnu Compiler laden, C Libraries damit 
kompilieren und dann das ganze im Ergebnis mit Assembler ansprechen?

Notfalls kann ich Daten mit einer SD Card übertragen.
Die SD Card gibt ein einfaches Laufwerk. Mit einem speziellen Programm 
geht es ohne  Dateisystem.

Übrigens gibt es bei Reichelt "große" Arm Controller, die nur 99Cent 
kosten, anscheinend abgekündigte. Kosten sonst bei etwa 10€.

MfG

von Dr. Sommer (Gast)


Lesenswert?

Matthias Kattelmann schrieb:
> Könnt Ihr etwas schlaues dazu sagen?
C++ lernen. Damit kannst du all die C Libraries, die von den Herstellern 
produziert werden, ansprechen und dabei eine richtige Sprache verwenden.

Gerade so komplexe Libraries wie für USB schreibt keiner mehr in 
Assembler, das ist einfach viel zu viel Arbeit, und die ist dann auch 
noch für die Katz wenn man den Prozessor-Kern umstellt, die Peripherie 
aber beibehält (Cortex-M0 zu Cortex-M3 oder so),

Matthias Kattelmann schrieb:
> Kann ich als C Laie den Gnu Compiler laden, C Libraries damit
> kompilieren und dann das ganze im Ergebnis mit Assembler ansprechen?
Wenn du auf Schmerzen stehst, ja.

von Lothar (Gast)


Lesenswert?

Viele ARMs haben USB-ROM-Treiber, da muss man nur wenig machen, z.B. 
LPC1343:

ROM **rom = (ROM **)0x1fff1ff8;

void USBIRQ_IRQHandler()
{
  (*rom)->pUSBD->isr();
}

(*rom)->pUSBD->init_clk_pins();
(*rom)->pUSBD->init(&DeviceInfo);
(*rom)->pUSBD->connect(TRUE);

von W.S. (Gast)


Lesenswert?

Lothar schrieb:
> Viele ARMs haben USB-ROM-Treiber, da muss man nur wenig machen, z.B.
> LPC1343:

Ach, und was hast du davon? Schon ein einfacher virtueller COM Port läßt 
sich SO nicht wirklich aufsetzen, da fehlt einfach noch alles, was 
wirklich gebraucht wird. Ich hab's hinter mir, hab mir mittlerweile nen 
VCP für alles, was bei mir so rumfliegt geschrieben. Sinnigerweise 
gibt's bei NXP bei fast jedem µC nen anderen USB-Core.

W.S.

von Kurt (Gast)


Lesenswert?

Matthias Kattelmann schrieb:
> Leider kann ich mit C nicht, es graust mir davor.

Dann sind Mikrocontroller und PC-Systeme nicht das richtige für dich.

Matthias Kattelmann schrieb:
> Übrigens gibt es bei Reichelt "große" Arm Controller, die nur 99Cent
> kosten, anscheinend abgekündigte. Kosten sonst bei etwa 10€.

Vielen Dank für die Werbung.

von Lothar (Gast)


Lesenswert?

W.S. schrieb:
> Schon ein einfacher virtueller COM Port läßt
> sich SO nicht wirklich aufsetzen, da fehlt einfach noch alles, was
> wirklich gebraucht wird.

1) Ich kenne keine Anwendung bei der HID nicht besser ist als VCOM. Bei 
VCOM muss auf PC-Seite erst mal der Treiber stabil laufen, bei HID haben 
die Betriebssysteme bereits generische Treiber (Windows, Linux, MacOS), 
die eben laufen.

2) Es gibt NXP-Chips mit CDC-Class im ROM, hier ist für VCOM nichts 
selbst zu programmieren, man muss nur die definierten In/Out-Puffer 
schreiben bzw. lesen. Das ist ja grade der Punkt von ROM Treibern.

3) Leider ist es bei NXP so, das unverständlicherweise bestimmte Chips 
diese ROM-Treiber haben (LPC11U00, LPC1345 aufwärts), aber andere nicht. 
Dementsprechend benötigt man z.B. für den populären LPC1768 einen 
Software-Stack, und der ist riesig. Ich habe den von IAR als Beispiel, 
und kann damit z.B. HID mit mehreren Streams problemlos machen. 
Seltsamerweise funktioniert dies mit den meisten PCs, mit einigen 
wenigen aber nicht. Mit dem NXP ROM-Treiber funktioniert es immer. 
Fehler finde ich nicht, auch nicht mit Sniffer. Der ROM-Treiber wird 
aber einfach nicht auf den LPC1768 portiert.

von Knut (Gast)


Lesenswert?

Lothar schrieb:
> Ich habe den von IAR als Beispiel,
> und kann damit z.B. HID mit mehreren Streams problemlos machen.
> Seltsamerweise funktioniert dies mit den meisten PCs, mit einigen
> wenigen aber nicht.

Dann wendest Du die Funktionen vermutlich falsch an (Initialisierung, 
Reihenfolge, Timing, sonstige Konventionen).
Oder IAR liefert fehlerhafte Software aus.

Lothar schrieb:
> Mit dem NXP ROM-Treiber funktioniert es immer.

Hier wendest Du den Treiber richtig an. Ich vermute, dass einem die 
ROM-Implementierung vieles an Stolperfallen vorenthält.

von greg (Gast)


Lesenswert?

Matthias Kattelmann schrieb:
>
> Ich fand auch etwas, aber nur in C oder C für den Gnu Compiler.
> Leider kann ich mit C nicht, es graust mir davor.
> Assembler geht, oder Basic könnte auch gehen.
>

Was graust dir denn so vor C? Du wirst nicht drumrum kommen. C ist eine 
der populärsten Programmiersprachen überhaupt und auf Microcontrollern 
sowieso. Es ist auch weder kryptisch noch schwer.

von KannIchauch (Gast)


Lesenswert?

Hallo

Ich hab mich schon mal mit C beschäftigt.
An der Stelle, wo ich einen String in eine Zahl umwandeln wollte oder 
umgekehrt, ist mir der Kragen geplatzt.

Wo es in VB eine einfache Funktion dafür gibt, fand ich dasselbe in VC++ 
oder so, nicht einmal beschrieben.

MfG
Matthias

von Stefan (Gast)


Lesenswert?

Du hast in C die Freiheit, eigene Funktionen und Prozeduren zu 
erstellen. Wenn Du deine String-Umwandlung in Assembler hinbekommst, 
dann auch in C. Der Algorithmus ist nämlich exakt der gleiche, ganz 
egal, welche Programmiersprache nun zur Umsetzung eingesetzt wird.

Wenn Dir C zu schwierig ist, dass USB kommunikation erst Recht. USB ist 
weitaus komplexer, als eine serielle Schnittstelle.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Matthias Kattelmann schrieb:
> brigens gibt es bei Reichelt "große" Arm Controller, die nur 99Cent
> kosten, anscheinend abgekündigte. Kosten sonst bei etwa 10€.

Du wirst http://www.reichelt.de?ARTICLE=68402 meinen.

So etwas möchte man sich heutzutage eigentlich nicht mehr antun; der 
Interruptcontroller des ARM7TDMI ist "beliebt".

KannIchauch schrieb:
> Wo es in VB eine einfache Funktion dafür gibt, fand ich dasselbe in VC++
> oder so, nicht einmal beschrieben.

Dann musst Du besser suchen lernen. atoi und Co. sind dokumentiert.

von Matthias K. (kannichauch)


Lesenswert?

Erst mal Danke für die Motivation.

Ja genau, den meinte ich unter anderem. Bei Reichelt sind 3 
verschiedene, superkleine Teile mit mindestens 64 Anschlüssen für 
99Cent.
Ich muss aufpassen, das ich nicht anfange, Teile zu horten, und den 
Schritt, alles einmal auszuprobieren und zu programmieren, vergesse.

Interruptcontroller, wo ist das Problem? Stimmt da was nicht?
Wahrscheinlich muss viel eingestellt werden, Interruptadressen, 
Pinconnectoren("PINSEL") usw..

Wegen dem C, vielen Dank, ich werde noch einmal verschiedene Hilfen 
durchschauen, vielleicht komm ich doch mit klar.
Überhaupt scheinen die meisten Probleme auf mangelnde, bzw. 
Dokumentenmängel zurückzuführen zu sein.

Allerdings bin ich der Meinung, das C wird allgemein hoffnungslos 
überbewertet.
Ich hab schon mal was mit Forth, VB, Assembler, Javascript gemacht.
War jetzt mit Python zugange, für ein CAD-Programm. Hebt sich aber nicht 
extrem fremdartig hervor.

habe folgendes gefunden:
http://www.cplusplus.com/

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Matthias Kattelmann schrieb:
> Allerdings bin ich der Meinung, das C wird allgemein hoffnungslos
> überbewertet.

Aus Erfahrung sprichst Du nicht.

von Lothar (Gast)


Lesenswert?

Stefan schrieb:
> Wenn Dir C zu schwierig ist, dass USB kommunikation erst Recht. USB ist
> weitaus komplexer, als eine serielle Schnittstelle.

Zunächst mal ist auf PC-Seite USB mit VB deutlich einfacher als mit C, 
siehe Beispiele:

http://www.lvr.com/hidpage.htm

Dann ist bei ARM UART/USART ein Kapitel für sich, daher hat z.B. NXP in 
neueren Chips auch serielle Treiber im ROM. Damit ist von der Handhabung 
kein Unterschied mehr zwischen seriell und USB. Zudem ist die USB PID 
mit dem ROM-Treiber inbegriffen.

von Dr. Sommer (Gast)


Lesenswert?

Matthias Kattelmann schrieb:
> Überhaupt scheinen die meisten Probleme auf mangelnde, bzw.
> Dokumentenmängel zurückzuführen zu sein.
C ist wegen der intensiven Nutzung wohl die am besten dokumentierte 
Sprache... An jeder Uni/FH mit naturwissenschaftlihen Fächern wirst du 
mindestens ein C-Vorlesungsskript finden... Es gibt den Standard, wo 
solche Funktionen erklärt sind, Bücher, die einem das komplett 
beibringen, und natürlich Google.

Matthias Kattelmann schrieb:
> habe folgendes gefunden:
> http://www.cplusplus.com/
http://cppreference.com ist besser.

von W.S. (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Aus Erfahrung sprichst Du nicht.

Ach Rufus,
Eigentlich weißt du es doch ganz genau: C ist wahrlich keine schöne 
Sprache, es ist auch keine, die man duch bloßes Lesen erlernen kann, 
sondern eine mit vielen Fallen und Fußangeln und Unzulänglichkeiten, mit 
denen auszukommen man erstmal lernen muß.

Ich kann schon verstehen, daß sich die Welt aufteilt in Leute, denen C 
zu eklig ist und Leute, denen alles andere zu geschwätzig erscheint.

Ansonsten finde ich die LPC2131 bei Reichelt für 99 Ct soweit ganz in 
Ordnung und deinen Widerwillen gegen dessen Interrupt-Controller nicht 
wirklich stichhaltig. Im Gegenteil: Mit dem FIQ kann man Sachen machen, 
die mit einem neueren Cortex SO nicht mehr machbar sind. Allerdings die 
Bemerkung des TO über 10 Euro war und ist doch heftig übertrieben. Ist 
ja doch ein eher kleinerer µC.

Und nochwas zu HID versus VCOM:
"Ich kenne keine Anwendung bei der HID nicht besser ist als VCOM" 
schrieb da jemand. Was soll so ein Spruch???
Für solche "void" HID-Geräte (die es in Wirklichkeit garnicht sind) gibt 
es auf keinem PC irgendwelche üblichen Anwendungen. Ich bin deshalb 
der festen Ansicht, daß man anständigerweise HID genau solchen Dingen 
wie echten HID-Geräten vorbehalten sollte.
Für VCOM hingegen gibt es massenweise Anwendungen und es ist auch gut in 
eigentlich alle PC-Betriebssysteme integriert. Man braucht eigentlich 
nur usbser.sys und ein .inf und das war's.
Ganz generell gilt, daß es beim USB eine ganze Breitseite von 
verschiedenen vordefinierten Klassen gibt und daß es eigentlich ein 
einziger Bastelpfusch ist, ein Device in eine Klasse hineinzumogeln, was 
dort eigentlich garnicht hinein gehört.

Ach ja, und dem TO rate ich - mal wieder.. - die Lernbetty in der 
Codesammlung an. Da finden sich genug Konvertierungen, so daß einem 
nicht der Kragen platzen muß. Ich weiß, tibetanische Gebetsmühle... 
immer wieder, aber die Leute hier stolpern ja auch immer wieder über die 
gleichen Sachen.

W.S.

von Dr. Sommer (Gast)


Lesenswert?

W.S. schrieb:
> Ach ja, und dem TO rate ich - mal wieder.. - die Lernbetty in der
> Codesammlung an. Da finden sich genug Konvertierungen, so daß einem
> nicht der Kragen platzen muß. Ich weiß, tibetanische Gebetsmühle...
> immer wieder, aber die Leute hier stolpern ja auch immer wieder über die
> gleichen Sachen.
Jup, wie z.B. #defines für Typen und Konstanten zu verwenden, 
gefährliche Makronamen, inkonsistente Bezeichner-Namen, ... - doch halt, 
nicht dass das in der "Lernbetty" auch völlig kaputt ist und die 
vielleicht gar nicht so gut als "beispielhafter" Code geeignet ist?!?!?!

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.