mikrocontroller.net

Forum: Projekte & Code MicroC/OS mit ICC auf ATMega128 portieren


Autor: Jürgen H. (juergen)
Datum:

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

Autor: Cathrel (Gast)
Datum:

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

Autor: Jürgen H. (juergen)
Datum:

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

Autor: Asterix-007 (Gast)
Datum:

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

Autor: Asterix-007 (Gast)
Datum:

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

Autor: Jürgen H. (juergen)
Datum:

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

Autor: Asterix-007 (Gast)
Datum:

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

Autor: Jürgen H. (juergen)
Datum:

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

Autor: Asterix-007 (Gast)
Datum:

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

Autor: Cathrel (Gast)
Datum:

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

Autor: Jürgen H. (juergen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Cathrel,

das ist noch ne möglichkeit! werde es gleich mal ausprobieren!

thx

juergen

Autor: Jürgen H. (juergen)
Datum:

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

Autor: pittbull (Gast)
Datum:

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

Autor: Jens (Gast)
Datum:

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

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.