Forum: Mikrocontroller und Digitale Elektronik pic 18f2550 usb cdc assembler


von Tobi D. (fanti)


Lesenswert?

Hallo zusammen,

ich bin schon seit mehreren Tagen dabei mein Problem zu lösen, aber ich 
komme kein Schritt voran. Ich hoffe mir kann jemand helfen und mir ein 
paar Tips oder Ideen auf den Weg geben.

Ich hab ein großes Programm für den PIC18f2550 in Assembler geschrieben, 
welches über rs232 Schnittstelle mit dem PC verbunden ist und Daten 
austauscht.
Nun gabs nen neuen Pc und zwangsläufig das Problem, dass kein Comport 
mehr vorhanden ist.

Ich möchte jetzt gerne die Kommunikation über den USB Port laufen 
lassen.
Dazu habe ich mich schon mit der Materie etwas vertraut gemacht (sprut 
und holger-klabunde sei dank).
Der Bootloader von sprut funktioniert, genauso wie das usb-echo-Programm 
von holger, aber ich finde einfach keine möglichkeit den 
usb-kontrollcode der überall in c geschrieben ist in Assembler zu 
übertragen und in mein Programm zu integrieren. Meine C Kenntnisse sind 
begrenzt und es wäre auch ein riesen Aufwand den über 1000 Zeilen 
GrundPIC Assembler Code in C umzuschreiben damit er mit dem c USB codes 
funktioniert. AssemblerUSB Beispiele habe ich nicht gefunden.
Ich bin zwar noch auf den Bootloader von mischaka gestoßen mit 
integrierter usb Ansteuerung aber den funktioniert irgendwie nicht, 
obwohl der erste mitgelieferte Test auch nur ein Echo liefern sollte.

Am einfachsten wäre wohl meiner Meinung nach die USB Ansteuerung in 
Assembler, aber wie geht das :-/
Ich lasse mich aber auch gerne eines besseren belehren.

von Tobi D. (fanti)


Lesenswert?

wirklich keiner ne idee?
gibts doch nicht...

von Master S. (snowman)


Lesenswert?

du hast schneller C gelernt als wir hier dir mit fragen, raten und 
antworten das erklären könnten, falls es jemand gäbe (ich bezweifle es), 
der in asm eine USB-CDC-verbindung programmiern kann, die mit den 
Microchip-treibern für den PC funktioniert.
nimm doch einfach das Microchip-beispiel und füge deinen asm-code als 
inline-asm ein; oder noch einfacher, wenn es ja sowieso "nur" 1000 
zeilen asm-code sind, schreib sie schnell in C und füge sie an der dafür 
vorgesehenen stelle ein.

von Lehrmann M. (ubimbo)


Lesenswert?

Wenn du die 1000 Zeilen nicht übersetzen willst (ist eigentlich nicht 
viel) dann musst du einen Inline-Assembler verwenden. Die Hilfe deines 
Compiler's hilft dir da weiter wie genau der Syntax ist. Natürlich gibt 
es auch Übergangsvariablen in das Inline-ASM ...

von Tobi D. (fanti)


Lesenswert?

ok, immerhin ne ehrliche und fachliche Antwort^^

für mich als Einsteiger-hobbybastler sind 1000 Zeilen schon ne ganze 
Menge, hat auch ne Weile gedauert das so zusammenzuwerkeln.

c wäre bestimmt von Vorteil zu lernen, sieht zumindest einfacher und 
übersichtlicher aus, da werde ich mich auf kurz oder lang dransetzen, 
weil Assembler doch irgendwie ausstirbt hab ich das Gefühl.

danke für den Tip mit dem Inline Assembler, das ist zwar nicht gerade 
elegant gelöst sollte aber zumindest mal als Übergangslösung hinhauen. 
Ich wusste gar nicht dass es sowas gibt. klingt nach der Lösung, die ich 
gesucht habe. Wobei überall darauf hingewiesen wird dass der Assembler 
Code kurz gehalten werden sollte da der C Compiler wohl nicht so gut 
optimiert, ich werde sehn was passiert.

danke euch beiden

von Lehrmann M. (ubimbo)


Lesenswert?

Tobi D. schrieb:
> c wäre bestimmt von Vorteil zu lernen, sieht zumindest einfacher und
> übersichtlicher aus, da werde ich mich auf kurz oder lang dransetzen,
> weil Assembler doch irgendwie ausstirbt hab ich das Gefühl.
>
> danke für den Tip mit dem Inline Assembler, das ist zwar nicht gerade
> elegant gelöst sollte aber zumindest mal als Übergangslösung hinhauen.
> Ich wusste gar nicht dass es sowas gibt. klingt nach der Lösung, die ich
> gesucht habe. Wobei überall darauf hingewiesen wird dass der Assembler
> Code kurz gehalten werden sollte da der C Compiler wohl nicht so gut
> optimiert, ich werde sehn was passiert.

Natürlich ist Inlineassembler keine elegante Lösung.
Zu C: Glaub mir es ist ein enormer Vorteil (for-Schleifen, If und 
vorallem Rechnen, Typcast und so ist so unglaublich einfach). Ich bin 
auch von Assembler gekommen (von sprut.de) und dann in C rein. Habe 
zuerst ANSI C (Standart C) gelernt und bin dann ab nach "PIC C" 
gegangen. Es ist das beste wenn man Assembler noch kann, dann kann man 
auch den compilierten C Code noch gut in Assembler lesen. Assembler 
benötigt man nur bei sehr kritischen Zeitaufgaben wenn man z.B. 
Instructions zählen muss oder so. C ist eigentlich das Beste unter den 
PIC Hochsprachen. Pascal habe ich noch nie gearbeitet. Basic ist eine 
Katastrophe in Sachen Zeitmessung und Abschätzung. Soweit meine 
persönliche Meinung.

Dass ein C Compiler schlechter optimiert als ein Assembler Compiler wage 
ich zu bezweifeln...

von Rimini (Gast)


Lesenswert?

Einen vollkommen im Source-Code veröffentlichten CDC-Bootloader für den
PIC18F2550, der recourcenschonend vollständig in Assembler programmiert
ist, findet man unter:

http://home.datacomm.ch/str/usbolo.asm

von heinzhorst (Gast)


Lesenswert?

Lad dir mal von Microchip die Application Libraries runter. Und dann 
schau dir mal das Beispielprojekt "USB Device - CDC Serial Emulator" an. 
Das ist im Prizip genau, was du suchst. Nur Fix und Fertig.

von Tobi D. (fanti)


Lesenswert?

danke für eure Hilfe,

aber mittlerweile kam bei mir die Erkenntnis, in C umzusteigen, da es 
bei größeren und komplexeren Programmen einfacher und übersichtlicher 
ist, auch wenn ich da bei der Codeentwicklung erstmal wieder bei 0 
anfangen muss

hätte ich halt gleich mal machen sollen anstatt Tage lang mit Assembler 
zu kämpfen um eine halbwegs lauffähige Version hinzubekommen...bei 
manchen dauert eben bisl länger :P

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.