Forum: Compiler & IDEs Problem mit AT90Can128


von Christian Mayer (Gast)


Lesenswert?

Hi,

ich versuche verzweifelt ein Headerfile für den AT90can128
zu bekommen, welches ich in WinAVR bzw. mein Programm einbinden kann.
Hat evtl. jemand so ein Headerfile oder weiß jemand wo man eines
herbekommen kann ?

Servus und vielen Dank für eure Hilfe.

Christian Mayer

von Jörg Wunsch (Gast)


Lesenswert?

Du brauchst weit mehr als ein Headerfile: Compiler und Linker müssen
den neuen -mmcu= ja auch verstehen lernen.

Die Arbeit dafür wird gerade insgesamt erledigt.  (Das Headerfile
gibt's mittlerweile in der Tat bereits im CVS, aber s. o.: es wird
Dir
allein kaum was nützen.)

So wie ich das verstanden habe, war es aber bisher weniger aufwendig,
die komplette toolchain selbst neu zu compilieren, als an Muster
dieser Gattung von Atmel heranzukommen. ;-)

von Jörg Wunsch (Gast)


Lesenswert?

Hätt ich vorher avrfreaks gelesen, hätte ich mir die Arbeit, eine
Antwort zu schreiben, eigentlich auch sparen können.  Du hast dort ja
schon eine Antwort erhalten.  Mehrfachpostings gelten als unhöflich,
weil sie sinnlos Zeit bei den potentiellen Beantwortern binden -- das
gilt bei einem derartigen Thema durchaus auch für mehrere verschiedene
Foren, insbesondere da Du ja bereits eine recht erschöpfende Antwort
(mit URL) bekommen hast.

von Christian Mayer (Gast)


Lesenswert?

Sorry Jörg!

Kann ja nicht riechen, das es Leute gibt, die sich gleich in mehreren
Foren aufhalten, drum habe ich in zwei Foren meine Frage versucht zu
klären, um mehr Leute zu erreich.
Nochmals sorry, und vielen Dank für Deine Antwort!!!

Servus Christian!

von Christian Mayer (Gast)


Lesenswert?

Hi Jörg!

Noch eine Frage, was meinst Du mit mmcu und CVS?
Ich hätte vielleicht auch anmerken sollen, daß das mein erstes Projekt
ist, und ich deshalb nicht wirklich viel Ahnung von der Materie habe.

Servus Christian!

von Jörg Wunsch (Gast)


Lesenswert?

Nun, wenn Du Dich in mehreren Foren aufhälst, warum traust Du das
nicht auch anderen zu? ;-)

von Christian Mayer (Gast)


Lesenswert?

Der ;-) von Dir beruhigt mich wieder etwas, es ist halt so, daß ich
gerade Diplomarbeit schreibe und ich die Zeit im Nacken sitzen habe,
drum hab ich halt in 2 Foren inseriert, bitte sag mir nun was mmcu und
CVS sind ?

Servus Christian !!!

von Jörg Wunsch (Gast)


Lesenswert?

Das solltest Du bei der Diplomarbeit aber langsam wissen, oder? ...

-mmcu= ist die Compileroption, mit der man dem Compiler(-frontend)
mitteilt, für welchen MCU-Type (microcontroller unit) man compiliert,
also -mmcu=at90s8515 oder -mmcu=atmega128, oder eben -mmcu=at90can128.

CVS ist das concurrent version system, das vermutlich
meistverbreitetste Versionsverwaltungssystem.  Damit werden u. a. auch
die Quellen der avr-libc verwaltet.  Ein Web-Frontend dafür findest Du
hier:

http://savannah.nongnu.org/cgi-bin/viewcvs/avr-libc/

Eine URL mit dem Bugreport für den Arbeitsstand der Implementierung
hast Du ja bei AVRfreaks schon bekommen.  Dort sollten sich auch
Zeiger auf die Implementierungsdetails für GCC und Binutils befinden.

Alles in allem wirst Du nicht umhin kommen, Dir diese Dinge selbst zu
compilieren.  Auf einem Unix dauert das keine Stunde.  Auf Windows?
Keine Ahnung.  Keiner der aktiven Entwickler benutzt sowas...

von Peter D. (peda)


Lesenswert?

Ich würde für ne Diplomarbeit nie einen so brandneuen Chip nehmen.

Man weiß dann nie, ist es ein Hardware- oder Softwarefehler oder ist
einfach nur der Chip buggy.

Neue Chips werden heutzutage grundsätzlich nur als grüne Bananen
ausgeliefert. Es finden sicher ja immer wieder genügend doofe Anwender,
die brav ihre gefundenen Bugs zurückmelden.

Wenn man also in Zeitdruck ist, ist ein brandneuer Chip das pure Gift
für den Zeitplan.

Zumindest solltest Du ihn nur bei max 8MHz betreiben, da manche Fehler
erst bei hohen Frequenzen auftreten (siehe AVRFreaks: LPM-Bug).


Peter

von Christian Mayer (Gast)


Lesenswert?

Vielen Dank Jörg !

Wenn Du mir jetzt noch sagst was ich wie und wo compilieren muß, dann
bin ich zufrieden, denn wie schon oben angekratzt, das ist mein erstes
Projekt, und ich war froh, als WinAVR überhaupt etwas gemacht hat, und
nu soll ich irgendwas compilieren, ich hoffe Du kannst Dir vorstellen,
daß ich da keinen Dunst habe was ich zu tun habe !!!!

Servus Christian !!

von Christian Mayer (Gast)


Lesenswert?

Hi Peter!

Danke für den Tip, leider ist der Chip (AT90Can128) ziemlich passend
für meine Aufgabe, denn ich muß GPS Daten auf den CANbus schicken, ich
hab auch ein Board von Microchip hier, jedoch habe ich da eine SPI
Schnittstelle zusätzlich zwischen dem PIC16F876 (µController) und dem
MCP2515 (CAN Controller).

Servus Christian !!!

von Jörg Wunsch (Gast)


Lesenswert?

Nun, hast Du es denn schonmal mit RTFM probiert?

Die avr-libc Doku solltest Du wenigstens mal gelesen haben -- die hat
ein eigenes Kapitel darüber, wie man die Tools compiliert.

Wie gesagt: auf Windows ist das alles entsprechend umständlicher, da
Du Dir erstmal die Cygwin-Umgebung draufnageln mußt.  Letztlich hast
Du dann ein ,,Unix im Windows'', kannste auch gleich auf ein Unix
gehen, das ist einfacher -- mit der Kommandozeile umgehen lernen mußt
Du ohnehin, wenn Du den Kram compilieren willst.  Das ist nicht alles
,,klickbar''. :-))

von Christian Mayer (Gast)


Lesenswert?

Sorry aber was ist RTFM?
Und ich krieg hier nen Vogel, Peter hat da wohl was wares geschrieben,
ich hau den Atmel kram bald in die Ecke und nehm das Microchip Board,
da hacke ich dann meine Assemblercode rein und gut ist.
Wie ist es eigentlich, wenn ich im AVRStudio 4.0X Assemblercode
verwenden möchte (nur Assembler), da brauch ich doch auch eine
AT90Can128.inc,oder sowas, gibt es sowas ?

Servus Christian!!!

von mmerten (Gast)


Lesenswert?

da gibt`s ne can128.def ist bei der aktuellen version von avr studio mit
dabei. Trotzdem halte ich es für risikoreich mit einem chip zu
entwickeln der noch nicht als serienprodukt verfügbar, und dessen
liefertermin Q4/2004 bei atmel auch keiner verbindlich bestätigen
möchte.

von Stefan Kleinwort (Gast)


Lesenswert?

Aua Aua Aua Aua Aua
Sag mal tut das auch beim Schreiben weh oder nur beim Lesen?

Stefan

von Peter D. (peda)


Lesenswert?

Ich kann mir nicht vorstellen, daß der AT90CAN128 sich grundsätzlich vom
ATMega128 unterscheidet.

Deshalb muß man doch nicht gleich den WINAVR neu compilieren

Benenne doch einfach das iocan128.h in iom128.h um, damit die
zusätzlichen Namen für die CAN-Register und die Interruptvektoren
definiert sind und fertig.


Peter

P.S.:
Ich verwende den T89C51CC01 als CAN-µC und bin sehr zufrieden damit.
Ich programmiere mit einem älteren Keil C51 Compiler, der wußte auch
noch nichts vom T89C51CC01.
Ich hab dann nur das neue regcc01.h mit ins Include-Verzeichnis
gestellt und fertig.

von Jörg Wunsch (Gast)


Lesenswert?

Er unterscheidet sich massiv :-( -- lies die iocan128.h im CVS einfach
nach.

RTFM -- Lies das Scheiß-Manual.

von Peter D. (peda)


Lesenswert?

@Jörg,

"Er unterscheidet sich massiv"

???

Also ich kann da keinerlei weitere Unterschiede erkennen.
Für die Codeerzeugung (Instruction Set, Memory Map) sind sie 100%
kompatibel.

Man muß also nur die anderen IOs und Interrupts bekannt machen (s.o.).
Ich hab das schon öfter so gemacht, daß ich, wenn der Compiler /
Assembler den neuen Typ noch nicht kennt, einfach den nächst ähnlichen
alten Namen nehme und hatte nie Probleme damit.


Peter

von mmerten (Gast)


Lesenswert?

wenn`s ja nur I/O und INT wären, dann wäre es ja recht einfach. Beim
AT90CAN128 hat man aber gerade bei den Ports und Funktionsregistern
eine Menge zwischen I/O-mapped und MEMORY-mapped verschoben. Um hier
noch optimalen code zu generieren sind wohl noch einige veränderungen
am compiler notwendig.

von Jörg Wunsch (Gast)


Lesenswert?

Nö, das kann der Compiler schon allein optimieren.  Alle IO-Register
werden erstmal als MMIO behandelt, der Optimizer kann dann
ggf. ermitteln, ob der Zugriff via IO-Befehlen einfacher zu machen
ist.  Die Grenze, aber der MMIO Pflicht ist, kennt er ja.

Meine Aussage mit ,,unterscheidet sich massiv'' bezog sich vielmehr
darauf, daß der für den ATmega128 erzeugte Code aufgrund der vielen
geänderten Register nicht binärkompatibel ist.

Wenn man sowieso anfangen muß, an den Tools herumzuhacken, kann man's
auch gleich richtig machen.  Wir haben schließlich Opensource,
/You/'ve got the source.  Die Patches geistern im Internet herum.
Man
muß die Tools also wirklich nur mal schnell übersetzen.  Das braucht
keine halbe Stunde (zumal die avr-libc standardmäßig keine Doku baut
-- die dafür benötigten Tools würden nochmal einen Rattenschwanz an
abhängigen Werkzeugen mit sich bringen).

Kann sein, daß das Aufsetzen eines Linux oder FreeBSD auf dem Rechner
auch nochmal eine weitere Stunde dauert, aber danach hat man eine
lauffähige Umgebung.  (Wenn man unter Windows schon Cygwin drauf hat,
sollte es dort aber auch nicht länger brauchen.)

von Peter D. (peda)


Lesenswert?

"Man muß die Tools also wirklich nur mal schnell übersetzen."

Wer, wie ich, ein komplett vorinstalliertes XP hat und daher dieses
komplett löschen, neu partitionieren, neu installieren, alle
Anwendungen neu installieren und einrichten und dazu Linux installieren
und lernen müßte, für den dürftes dieses "nur mal schnell" schon gut
einen Mann-Monat bedeuten.

Da benenne ich doch viel lieber "nur mal schnell" um, solange bis das
aktuelle WINAVR da ist.


Aber ich sehe diese Gefahr noch lange nicht, da ich Chips erst dann
nehme, wenn sie bereits einige Zeit in Produktionsstückzahlen gut
verfügbar sind (aufgrund früherer schlechter Erfahrungen).


Peter

von Birger* (Gast)


Lesenswert?

Ich vermisse eine aktualisierte Version der EEPROM.H
Bei der Migration vom mega128 auf den can128 muss ich mir jetzt für
jeden Zugriff auf's EEprom Konstrukte drumherum basteln. Wann kommt
eine neue WINAVR-Version?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Ich vermisse eine aktualisierte Version der EEPROM.H

Erstens eeprom.h (Kleinschreibung), zweitens suchst du wohl eher eine
aktualisierte Fassung der entsprechenden Bibliothek, denn die ist dein
eigentliches Problem.

Du kannst dir nach Kai Klenovseks Anleitung (hat er hier schon
gepostet) sofort und auf der Stelle eine avr-libc-1.2.5 compilieren
und diese über die 1.2.3 von WinAVR drüberbügeln, wenn du willst.  Mit
dieser Version wurde das ,,EEPROM geht nicht auf einer Reihe von
Controllern''-Problem repariert.

> Wann kommt eine neue WINAVR-Version?

Musst du Eric Weddington fragen.  Aber besser nicht persönlich, da er
dafür schon einen Thread aufgemacht hat:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=31546

von Kai Klenovsek (Gast)


Lesenswert?

Die avr-libc-1.2.5 ist bereits in meinem Package mit drin ;-).

von Fritz G. (fritzg)


Lesenswert?

>Wer, wie ich, ein komplett vorinstalliertes XP hat und daher dieses
>komplett löschen, neu partitionieren, neu installieren, alle
>Anwendungen neu installieren und einrichten und dazu Linux
installieren
>und lernen müßte, für den dürftes dieses "nur mal schnell" schon
gut
>einen Mann-Monat bedeuten.

Warum klingest du nicht einfach beim netten Nachbarsjungen, der macht
dir das in 1-2 Stunden, sofert du noch Platz auf der Festplatte hast.
Man kann nämlich Windowspartitionen kleiner machen, dahinter Linux
drauf (waren das jetzt 3 oder 5 Mausklicks? Weiss ich nicht mehr). Dann
toolchain laut avr-libc Doku bauen (ca. 10-20 Minuten) und fertig ist
es.
Der Nachbarjunge erklärt dir dann noch die nötigsten Sachen und es kann
schon losgehen.

Für eine Windowsinstallation + Office + Mail einrichten brauch ich
ungefähr gleichlang.

von Birger* (Gast)


Lesenswert?

@Jörg Wunsch: Die Großschreibung hab ich zur Hervorhebung bewußt gewählt
- ich versteh das schon richtig. Und ja, ich suche natürlich eine
aktualisierte Bibliothek, denn am Header-File ändert sich bis auf die
Warnings ja wohl nix.

von Birger* (Gast)


Lesenswert?

Ich hab jetzt mal das inoffizielle Update über die alte Installation
drüberkopiert. Nur nun wird allerdings gar kein at90can128 mehr als mcu
akzeptiert und jegliches Kompilieren schlägt folglich fehl. Hab ich noch
was vergessen? Was tun?

von mthomas (Gast)


Lesenswert?

Zuerst pruefen, ob auf avr-gcc -dumpspecs | find "at90can128" etwas
ausgegeben wird (...mcu=at90can128...). Wenn nicht, sind im
"inoffiziellen Update" die gcc-Anpassungen fuer den CAN128 nicht
enthalten.

von Birger* (Gast)


Lesenswert?

Nöö, da kommt nix. Dann ist obiger Link leider kein wirkliches Update,
schade. Auch mit dem Suchbegriff can kommt nix. Laut Ankündigung soll
ja im Laufe des Monats ein neue Version des WINAVR rauskommen. Nun gut,
dann werde ich da wohl selber einen Workaround schreiben.

von Kai Klenovsek (Gast)


Lesenswert?

Im letzten Update hat sich ein kleiner Fehler eingeschlichen der bei mir
wegen MinGW und dem ganzen Geraffel nicht aufgefallen ist.
Inoffizielle Updates für die "noch" aktuelle WinAVR Version werde ich
aber nicht mehr machen, es sei denn es dauert noch mehr als ein Monat.

von Christian Storz (Gast)


Lesenswert?

Hallo Kai,

habe auch das Problem, daß ich die neue avr-libc 1.2.5 für das EEPROM
des AT90CAN128 nutzen will. Jörg hat mir schon gesagt, daß du eine
Anleitung zum Compilieren der LibSources hast, die ich dann über die
alte 1.2.3 bügeln kann.
Wo finde ich die?
Dankeschön

von Kai Klenovsek (Gast)


Lesenswert?


von Christian Storz (Gast)


Lesenswert?

Danke Kai,
hab mir den Link angeschaut und kriege bei der Beschreibung (Unix-Welt
und so...) ein ungutes Gefühl, ob das so easy geht.
Eigentlich brauche ich momentan nur 3 Routinen "eeprom_read_block(),
eeprom_write_block, eeprom_is_ready()". Es müßte doch klappen, die
Sources aus der 1.2.5 zu nehmen und in die eigene Applikation zu
packen. D.h. ich verwende keine fertigen Lib-Funktionen mehr und
übersetze diese 3 kleinen Funktionen halt jedesmal mit - ok?
Gibt's dabei noch was besonderes zu beachten, beim Aufruf, oder so?
Wegen der neuen EE-Adressen 1F, 20 und 21?

Vielleicht hat auch schon jemand eine übersetzte libc.a für diese 3
kleinen Funktionen, ich brauch ja nicht die ganze lib????

Danke Christian

von Sebastian Schildt (Gast)


Lesenswert?

> Eigentlich brauche ich momentan nur 3 Routinen "eeprom_read_block(),
> eeprom_write_block, eeprom_is_ready()"

Schreib dir die Funktionen doch erstmal selber. Müssen ja nur auf
deiner Target MCU laufen und du kannst später wieder auf lib Funktionen
umstellen, sobald die standardmäßig bei den avr-gcc Distris dabei sind.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Es müßte doch klappen, die Sources aus der 1.2.5 zu nehmen und in
> die eigene Applikation zu packen.

Schlechter, als wenn du gleich die älteren Quellen (1.2.3 oder so)
benutzt.  Separat compilieren müsste eigentlich immer funktioniert
haben, da ja dann die korrekten Definitionen für die
EEPROM-IO-Register benutzt werden.

Aber hatte Kai nicht auch 'ne Binärversion der 1.2.5 für Win32 auf
seiner Webseite?

von Kai Klenovsek (Gast)


Lesenswert?

> hab mir den Link angeschaut und kriege bei der Beschreibung
>(Unix-Welt
> und so...) ein ungutes Gefühl, ob das so easy geht.

Ein absolutes Hexenwerk ist das natürlich nicht, aber man sollte schon
ein wenig Verständnis von Unix mit bringen dann sollte es in der Regel
kein Problem sein.

> Eigentlich brauche ich momentan nur 3 Routinen
"eeprom_read_block(),
> eeprom_write_block, eeprom_is_ready()". Es müßte doch klappen, die
> Sources aus der 1.2.5 zu nehmen und in die eigene Applikation zu
> packen. D.h. ich verwende keine fertigen Lib-Funktionen mehr und
> übersetze diese 3 kleinen Funktionen halt jedesmal mit - ok?
> Gibt's dabei noch was besonderes zu beachten, beim Aufruf, oder so?
> Wegen der neuen EE-Adressen 1F, 20 und 21?

So hab ich das persönlich noch nicht gemacht aber theoretisch sollte es
kein Problem sein wenn Du die Assembler Files direkt in Deinen Code
einbindest.

von Kai Klenovsek (Gast)


Lesenswert?

> Aber hatte Kai nicht auch 'ne Binärversion der 1.2.5 für Win32 auf
> seiner Webseite?

hab ich letzte Tage von der Seite runter genommen, da sich ein kleiner
Bug eingeschlichen hat der bei mir mit MinGW auf der Platte nicht
aufgefallen ist der beschränkt sich allerdings auf den AVR-GCC.

von Christian Storz (Gast)


Lesenswert?

Danke Jungs,
Jörg - meinst du mit den "älteren Quellen" die C-Sourcen der 1.2.3?
War auch mein erster Gedanke, die alten Sourcen abzuändern aber die hab
ich doch in meiner WinAVR-Distri gar nicht drin.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Jörg - meinst du mit den "älteren Quellen" die C-Sourcen der 1.2.3?

Ja.

> War auch mein erster Gedanke, die alten Sourcen abzuändern aber die
> hab ich doch in meiner WinAVR-Distri gar nicht drin.

Du musst sie ja nicht einmal abändern, du musst sie nur mit dem
richtigen -mmcu=at90can128 compilieren.

Du kannst sie erstens bei avr-libc selbst bekommen und zweitens gab's
wohl immer noch ein separates WinAVR-File mit allen Quellen (kann aber
sein, dass das Eric beim letzten WinAVR dann nur noch durch die
Hinweise auf die URLs der einzelnen Projekte ersetzt hat).

Aber ansonsten ist das Selbstcompilieren einer avr-libc-1.2.5 auch nur
eine Sache von wenigen Minuten.  Am längsten wird es wohl dauern, bis
du die nötigen MinGW/MSYS-Pakete auf deiner Kiste installiert bekommen
hast.

von Christian Storz (Gast)


Lesenswert?

> Du musst sie ja nicht einmal abändern, du musst sie nur mit dem
richtigen -mmcu=at90can128 compilieren.

Klingt gut, hab's aber noch nicht ganz gecheckt.
Sollen die entsprechenden eeprom.S,... Assemblerfiles mit dem Projekt
übersetzt werden?
Gib bitte nochmal 'nen Newbie-Tip...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Sollen die entsprechenden eeprom.S,... Assemblerfiles mit dem
> Projekt übersetzt werden?

Ja.

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.