Hi, hat jemand Erfahrung mit dem RTOS: MicroC/OS-II (uCOS/OS-II), mit dem Compiler: ImageCraft (ICC) for AVR und dem Mikrocontroller ATMega128? Mein Problem: Der Hersteller von MicroC/OS hat bereits eine Beispiel-Portierung, mit dem ICC, auf den ATMega128 zur Verfügung gestellt. Dieses Beispiel ist auf seiner Homepage downloadbar. Es enthält alle notwendigen Dateien und sogar die Projektfiles für den ICC. Eigentlich sollte es kein Problem sein dieses Beispiel zu kopieren, mit dem ICC zu Compilieren, um eine hex-File zu erhalten, die auf dem ATMega128 ausführbar ist. Wenn es so einfach wäre?!? Das Compilieren machte schon einige Problem läuft aber. Beim Linken allerdings, komme ich nun nicht weiter! Momentan bekomme ich den Linkerfehler: "multiple define:"! Meine Frage: Hat schon jemand die gleiche Portierung versucht und ist auf das gleiche Problem gestossen? Oder hat jemand eine Idee, was dieser Linkerfehler zu bedeuten hat? Das habe ich schon versucht: Habe es schon mit anderen Libs vom ICC versucht, habe selber ein Projekt erstellt in dem alle Source-Files liegen, habe sämtliche Compiler-Einstellungen (für den Linker gibts ja nicht wirklich welche) ausprobiert, habe Pfade für den Linker kontrolliert/hinzugefügt, habe nach mehrfach eingebunden *.h gesucht und mit #defines verhindert....hat alles nichts gebracht! Arbeite mit: MicroC/OS-II Verion 252 (Book Edition), ICC for AVR Version 7, STK500/STK501 + ATMega128 bin für jeden Rat dankbar! thx juergen
Wenn die Meldung lautet: multiple define: __depi dann handelt es sich um einen Fehler in der Library, Abhilfe findest du hier (von Imagecraft): http://dragonsgate.net/pipermail/icc-avr/2004-January/002984.html
Hi Cathrel, danke für deinen Tipp! Die Libs bzw. diesen Link habe ich schon ausprobiert! Meine aktuellen Libs von ICCV7 sind aktueller wie die von diesem Link! meine Linkerfehler sind z.B.: !E uCOS_II.o(824): multiple define: '_OS_EventTO' !E uCOS_II.o(825): multiple define: '_OSStart' !E uCOS_II.o(826): multiple define: '_OSTaskCreateExt' !E uCOS_II.o(827): multiple define: '_OSTimeTick' !E uCOS_II.o(828): multiple define: '_OS_EventTaskRdy' !E uCOS_II.o(829): multiple define: '_OS_EventWaitListInit' !E uCOS_II.o(830): multiple define: '_OSIntEnter' usw..... Gruß juergen
Hallo Jürgen, ich habe gerade das gleiche vor. Was für eine Hardwarekonfig hast du in deinem Projekt? Gib mir doch bitte mal Bescheid, wenn es funktioniert. mfg ASterix-007
noch etwas: die angemeckerten defines sind welche vom µC-OS. Du solltest alle .h-Dateien und andere Quellcodes auf doppelte defines durchsuchen. Abhilfe schafft hier u.U. etwas wie " #ifndef xxxx #define xxxx " ! Kann auch sein, das du etwas doppelt eingebunden hast. Ich werde mich am WE mal hinsetzen und versuchen das µC-OS auf dem 128er zu implementieren. Mal sehen, ob ich Erfolg habe...... Viel Erfolg beim Suchen!!! Asterix
Hi Asterix, sollte es mal funktionieren, kann ich dir gerne bescheid geben! Kein Problem! Das mit den defines habe ich schon probiert! habe jede *.h Datei mit defines versehen, die mehrfach Einbindungen verhindern sollen. Kann schon sein, dass ich etwas falsch gemacht habe?! Muss nochmal kucken! Wie meinst du das mit "andere Quellcodes" auf doppelte defines durchsuchen? Sind das *.c Dateien, die z.B. #define IRGENDWAS #define IRGENDWAS oder #include "IRGENDWAS.h" #include "IRGENDWAS.h" enthalten. Weißt du wie ich meine? Also das 2mal die gleiche Header eingebunden wird bzw. 2mal die gleichen defines! thx juergen
Hallo Jürgen, Also, dein Projekt besteht aus mehreren Dateien, alle die mit #include eingebunden sind. Dabei ist es egal ob *.c oder *.h ! In diesen Dateien sind anscheinend diese #defines doppelt vorhanden!! Wenn ja, meckert der Compiler oder hier der Linker. Mit ifndef .. define ... verhinderst du solche Doppelzuweisungen weil die Anweisung hier nur bedingt ausgeführt wird. Wichtig für die Fehlersuche ist, daß du dir alle involvierten, mit #include eingebundenen, Dateien anschaust, was machnmal ganz schön viele sind!! Also lass dein Projekt nach z.B. : "#define _OS_EventTO" durchsuchen. Bei mehrfachen #defines einfach die letzen auskommentieren und noch einmal kompilieren und linken! Ich glaub das sollte helfen...
Hallo nochmal, das war ne sehr gute Idee! Jedoch stellt dieses komische "_OS_EventTO" eine Funktion dar! D.h. sie wird einmal bekanntgegeben und einmal ausimplementiert (habe mein Projekt durchsucht) und zwar in den Prozessor unabhängigen Dateien. Und jetzt kommts: die Funktion steht im orginal Sourcecode vom Hersteller, den ich eigentlich nicht modifizieren sollte. Also wirklich das orginal von der Book Edition. Somit denke ich mal wird der schon korrekt sein...sonst ist des ja Pfusch?!? thx für deine hilfe!! juergen
Hallo Jürgen, das die Funktion im Sourcecode steht ist richtig und notwendig, aber sie muß, genau wie die anderen, nur EINMAL mit #define definiert werden. Dein Linker sagt dir nur, daß in Zeile xy die Definition doppelt vorhanden ist. => Also DOPPLUNGEN beseitigen und dein System sollte funktionieren! Viel Spaß! Asterix
Hallo nochmal, Die Version V2.8x (aktuelleste) enthält bereits einen Port für den Imagecraftcompiler, dass heisst es sollte auf Anhieb klappen. http://www.ucos-ii.com/contents/support/downloads/AN-1128.ZIP
Hi Cathrel, das ist noch ne möglichkeit! werde es gleich mal ausprobieren! thx juergen
Also, so wie es aussieht ist die Portierung unter ICC eine bleibende Baustelle! Es sind immer noch die gleichen Linkerfehler "multiple define" vorhanden! Jedoch unter Linux mit avr-gcc scheint die Portierung zu funktionieren. Auch hier habe ich eine Beispielportierung gefunden, mit der es nach einiger Tüftelei geklappt hat, die Applikation zu compilieren bzw. zu linken. Jetzt fehlt nur noch eine Beispielapplikation, mit der die Echtzeit bewiesen werden kann. Hätte neben mir ein Oszi stehen mit dem ich die Taskzeiten messen könnte. Also wenn zufällig jemand ein Beispielprogramm hätte, würde ich mich freuen. Müsste dann das Rad nicht neu erfinden!! @Cathrel: Habe unter ICC mit der V2.76 gearbeitet. Leider ohne Erfolg=>Linkerfehler. Habe dann uC/OS angeschrieben, um die aktuellen Sourcen zu erhalten. Bis jetzt noch keine Rückmeldung. Darum habe ich es mal unter Linux versucht! Könnte schon sein, dass es mit V2.8x funktioniert, habe aber die V2.8x Sourcen noch nicht testen können! @Asterix: Habe bei meinem besten Willen KEINE Doppelungen gefunden!! @all: Die Linkerfehler könnten aus der Reihenfolge, der zu linkenden (vielleicht auch aus den zu compilierenden) Dateien liegen. Unter Linux ist dies unter Verwendung von Makefiles ohne weiteres möglich. Im ICC habe ich leider keine Einstellmöglichkeit gefunden, in der man die Reihenfolge beeinflussen könnte. Allerdings hat dies der Hersteller bei seiner Portierung auch nicht erwähnt! Naja, is ja auch nur ne Vermutung! thx juergen
hi, ich benutze (zum glück nur zeitweise) diese imagecraft-grütze für den hcs12. der compiler ist total mies! machmal kann er konstrukte a'la x = y[z++]; nicht zu lauffähigem code compilieren. als y = y[z]; z++; geht's dann, wie durch ein wunder!!! ich weiss, das hilft euch nicht weiter, aber ich wollte euch nur davor warnen wie schlecht der icc ist.
Das scheint dann aber nur bei der Version für die Freescale-Controller so zu sein, bei der AVR-Version habe ich das Problem nicht beobachtet. Unabhängig davon kannst du bei Imagecraft wenigstens davon ausgehen, dass die zeitnah Bugs beheben, bei dem GCC wartet man u. U. ewig darauf.
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.