Forum: Compiler & IDEs AVR / Atmel Studio 5 / 6 - libc Source


von Daniel A. M. (amad) Benutzerseite


Lesenswert?

Servus!

Unter 
http://distribute.atmel.no/tools/opensource/Atmel-AVR-GNU-Toolchain/3.4.4/ 
ist ja mit der Datei
http://distribute.atmel.no/tools/opensource/Atmel-AVR-GNU-Toolchain/3.4.4/avr-libc-1.8.0.tar.bz2
der Sourcecode der libc erhältlich.

Beim Studio 5 & 6 bzw. gibt es ja durch Visualstudio per Alt+G bzw. 
Rechtsklick "Goto Implementation" die Möglichkeit sich den Source einer 
Funktion anzeigen zu lassen.

Ich habe jetzt den Inhalt des Ordners libc\avr-libc\ in dieser Datei 
nach
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 
GCC\Native\3.4.1056\avr8-gnu-toolchain\avr
entpackt, weil ich da jeweils identische Dateien gefunden habe. (die 
Header)
Der Ordner gilt jetzt fürs Studio 6, ist aber beim 5er ähnlich.

Kennt ihr eine Möglichkeit dem Studio nun mitzuteilen, dass es dort nach 
den Sources suchen soll? (wenn es unter Code::Blocks irgendwie möglich 
wäre, würde ich mich auch sehr freuen)

lG,
Daniel

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


Lesenswert?

Daniel A. Maierhofer schrieb:

> Kennt ihr eine Möglichkeit dem Studio nun mitzuteilen, dass es dort nach
> den Sources suchen soll?

Da wirst du wohl die ganze avr-libc mit Debuginformationen compilieren
und installieren müssen.

von Daniel A. M. (amad) Benutzerseite


Lesenswert?

Danke für die rasche Antwort Jörg!

Ich hab zwar schon mit MinGW32 und dem Compilieren einiger Libraries 
(welche ohne MSYS installierbar waren, wie z.B. die Allegro Game 
Programming Library) Erfahrung, aber leider weiß ich da nicht ganz, wie 
ich da ansetzen soll das in einer Debug-Version zu compilieren? 
./configure kann ich ja unter Windows nicht so leicht ausführen. ;)

Wobei, es geht mir gar nicht darum Beim Debuggen bis in die niedrigste 
Implementierungsstufe zu kommen, mir würde es völlig reichen mit "Goto 
Implementation" da bequem hinzufinden.

Ich habe wie unter
Beitrag "Arduino Library unter Atmel Studio 6.2"
beschrieben z.B. die komplette Arduino-Library als statisch linkbare 
Library compiliert und kann bei dem Beispielprogramm ohne Probleme mit 
Alt+G bzw. Goto Implementation bis ins kleinste Detail nachverfolgen, 
was unter der Haube der Library vor sich geht.
Genau so hätte ich es gern mit der avr-libc, wobei ich mich nicht ganz 
herantrau, die im AVRStudio komplett einbinden zu können. :)

Oder ist das die einzige Möglichkeit diese Informationen der IDE 
mitzuteilen? Soweit ich das verstehe können in den .o Files "Symbole" 
enthalten sein, welche die Namen der Variablen & Funktionen 
widerspiegeln.

In diesem Fall interessier ich mich aber ja gar nicht für die bereits 
kompilierten Sachen sondern ich will gern im Source herumspringen 
können.

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


Lesenswert?

Daniel A. Maierhofer schrieb:

> ./configure kann ich ja unter Windows nicht so leicht ausführen. ;)

Doch, MinGW32 liefert eine Bash mit.  Anders kann die avr-libc, die
Atmel mitliefert, ja auch nicht entstanden sein (sofern sie sie nicht
gerade auf Unix compilieren, danach strip -g, das würde auch gehen ;-).

> Soweit ich das verstehe können in den .o Files "Symbole"
> enthalten sein, welche die Namen der Variablen & Funktionen
> widerspiegeln.

Es sind lediglich die Symbole noch vorhanden, die der Linker
unbedingt braucht.  Also schon interne Funktionen wirst du nicht
mehr finden.

Allerdings enthalten halt die Debugsymbole den Hinweis auf den
Dateinamen, der ohne diese logischerweise fehlt.  Keine Ahnung, ob
das Atmel Studio auch ohne diese Info in der Lage ist, dass du ihm
mitteilen kannst, welche Quelldatei zu welchem Objektmodul gehört.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Daniel A. Maierhofer schrieb:
> ./configure kann ich ja unter Windows nicht so leicht ausführen. ;)

Brauchst du auch nicht.  Die avr-libc enthält ja code für AVR, nicht für 
Windwos :-) Du kannst die Lib also auch unter Linux erzeugen und unter 
Windows verwenden.

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


Lesenswert?

Johann L. schrieb:
> Du kannst die Lib also auch unter Linux erzeugen und unter Windows
> verwenden.

Allerdings stimmen dann die Pfadnamen im DWARF-2 nicht mehr.  Gerade
die sind ja hier aber wichtig.

von Stefan E. (sternst)


Lesenswert?

Jörg Wunsch schrieb:
> Da wirst du wohl die ganze avr-libc mit Debuginformationen compilieren
> und installieren müssen.

Jörg Wunsch schrieb:
> Allerdings stimmen dann die Pfadnamen im DWARF-2 nicht mehr.  Gerade
> die sind ja hier aber wichtig.

Sorry Jörg, aber ich bezweifle stark, dass das dem OP weiterhilft. Es 
geht hier ja nicht um den Debugger, sondern um den Source-Code-Editor 
der IDE. Der sucht einfach in dem ihm zur Verfügung stehenden 
Source-Code nach der Funktionsdefinition. Für das, was der OP möchte, 
müsste man den Source-Code der Lib dem Projekt als eine Art externe 
Referenz/Abhängigkeit hinzufügen, so dass er zwar bei der 
Source-Code-Analyse mit berücksichtigt wird, aber nicht mit 
kompiliert/gelinkt wird.
Ich weiß aber auch nicht, ob und wie das beim Studio geht.

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


Lesenswert?

Stefan Ernst schrieb:
> Es geht hier ja nicht um den Debugger, sondern um den Source-Code-Editor
> der IDE. Der sucht einfach in dem ihm zur Verfügung stehenden
> Source-Code nach der Funktionsdefinition.

Zumindest im alten AVR Studio hat er aber Dateien, die keine
Dateinamensinformationen in den Debug-Infos hatten, komplett
ignoriert und kam nie auf die Idee, dafür irgendwo nach dem
Sourcecode zu suchen.  (Wurde die Datei nicht an der in den
Debug-Infos hinterlegten Stelle gefunden, wurde explizit nach dem
Standort gefragt.)

Keine Ahnung, ob das mit dem Visual-Kram jetzt tatsächlich völlig
anders ist.  Ich benutze das Zeug nur, wenn mich jemand mit Geld
dafür bedroht. ;-)

von Daniel A. M. (amad) Benutzerseite


Angehängte Dateien:

Lesenswert?

Stefan Ernst schrieb:
> Für das, was der OP möchte,
> müsste man den Source-Code der Lib dem Projekt als eine Art externe
> Referenz/Abhängigkeit hinzufügen, so dass er zwar bei der
> Source-Code-Analyse mit berücksichtigt wird, aber nicht mit
> kompiliert/gelinkt wird.

Ich hab grad gesehn, dass ich mir die Lösung des "Problems" heut schon 
vorweggenommen habe!
siehe Beitrag "Arduino Library unter Atmel Studio 6.2"

Vorgehensweise:
Neues GCC C Static Library Project erstellen, die Startdatei rauslöschen 
und alle .c .h sowie .S und .inc Files aus folgenden Verzeichnissen als 
Vorhandenes Element als Link hinzugefügen
Ihr müsst halt den Pfad bei Verwendung einer anderen Version der 
Toolchain anpassen.
1
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\libc\misc
2
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\libc\pmstring
3
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\libc\stdio
4
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\libc\stdlib
5
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\common

Dann noch bei den Projekteigenschaften für alle Konfigurationen unter 
Toolchain dem AVR/GNU C Compiler sowie Assembler mitgeteilt, dass er 
auch im Verzeichnis (kein Relativer Pfad!)
1
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\common
nach Includes, in dem Fall asmdef.h suchen soll.

Bis auf ein einziges Warning für \avr\libc\stdlib\dtostre.c kompiliert 
das dann einwandfrei unter dem Atmel Studio 6.2 bei der Vorgehensweise!
Wobei das Kompilieren eigentlich gar nicht notwendig ist.
-> Im Konfigurationsmanager das Häkchen beim Erstellen weggeben. Voillà!
Das Projekt kann man dann bei einer zu untersuchenden Projektmappe *als 
vorhandenes Projekt hinzufügen* und den ganzen Source durchstöbern!

Anbei das "Projekt".

Daniel A. Maierhofer

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


Lesenswert?

Du weißt aber, dass die avr-libc in vielen Variationen compiliert
wird für die einzelnen AVRs, ja?  Nicht alle werden dabei den gleichen
Objektcode haben (sonst wären die Variationen nicht nötig).

Wenn du dir die Implementierungsdateien nur ansehen willst, ist das
sicher ziemlich egal, aber sowas wie Single-Step wird auf diese Weise
sicher nicht gelingen.

von Daniel A. M. (amad) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hab gerade gemerkt, dass ich auf die AVR-spezifischen Includes vergessen 
habe, also die Sources aus folgenden Orndern müssen ebenfalls 
hinzugefügt werden:
1
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\include
2
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\include\avr
3
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\include\compat
4
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\include\util
5
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\libm\fplib

Wobei ich von dem include/avr nur folgende ioxx.h Dateien eingebunden 
habe sonst wurde es zu unübersichtlich:
1
"iotnx5.h" "iom8.h" "iom8a.h" "iom16u4.h" "iom32.h" "iom32a.h" "iom32u4.h" "iom88pa.h" "iom168pa.h" "iom328.h" "iom328p.h" "iomx8.h" "iotn4.h" "iotn5.h" "iotn9.h" "iotn13a.h" "iotn45.h" "iotn85.h" "iotn2313a.h"

Außerdem waren das leider alles relative Pfade, sodass es nur in einer 
bestimmten Verzeichnisebene funktionierte. Jetzt sollte es überall 
funktionieren wo die jetzt gerade aktuelle Toolchain 3.4.1056 
installiert ist. Ansonsten einfach per Texteditor ersetzen.

Anbei das aktualisierte File. Kompilieren dauert bei dem, wenn man es 
spaßeshalber probiert, schon eine halbe Ewigkeit, dafür aber eine 
vollkommen klaglose.

von Daniel A. M. (amad) Benutzerseite


Lesenswert?

Jörg Wunsch schrieb:
> Du weißt aber, dass die avr-libc in vielen Variationen compiliert
> wird für die einzelnen AVRs, ja?  Nicht alle werden dabei den gleichen
> Objektcode haben (sonst wären die Variationen nicht nötig).

Ja genau, das hab ich eben auch gemerkt, weil ich die ganzen io-Files 
noch gar nicht inkludiert hatte.

> Wenn du dir die Implementierungsdateien nur ansehen willst, ist das
> sicher ziemlich egal, aber sowas wie Single-Step wird auf diese Weise
> sicher nicht gelingen.

Denk mir auch, dass das nicht einfach sein kann, aber mir reichts auf 
C-Sourcecodeebene. In speziellen Fällen kann ich mir ja eh das 
Assemblerlisting anschaun.

von Daniel A. M. (amad) Benutzerseite


Lesenswert?

Bitteschön ein Update zur Verwendung mit dem Atmel Studio 6.2 Build 1502 
und der Atmel-AVR-GNU-Toolchain 3.4.5 
http://distribute.atmel.no/tools/opensource/Atmel-AVR-GNU-Toolchain/3.4.5/

https://github.com/damadmai/studio_6_libc

Viel Erfolg damit,

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.