Forum: Mikrocontroller und Digitale Elektronik avrasm2 auf macos, welche Include Files


von Peter S. (cbscpe)


Lesenswert?

Zufällig bin ich darauf gestossen, dass es avrasm2 ein Mal für ganz 
kurze Zeit als macOS command line tool gab (XC8 V2.05 und V2.10). Mit 
Hilfe eines alten MacBook das nur noch mit Mojave lief gelang es mir 
dann auch das XC8 V2.05 zu installieren und auf mein Catalina zu 
kopieren. So wie es aussieht läuft das Program auch auf Catalina. Die 
Aufgabe die jetzt noch bleibt, wie komme ich am einfachsten zu einem 
aktuellen Satz der inlcude Files von Microchip zu den AVR8 Kontroller? 
Unter AVR Studio 7.0 sind die alle unter
1
C:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel\

in mehreren Verzeichnissen verteilt. Pro Architektur gibt es ein
Verzeichnis aber in diesen Verzeichnissen gibt es jeweils mehrere 
Unterverzeichnisse
1
ls -l ATmega_DFP
2
drwxrwxrwx  1 peter  staff  16384 28 Nov  2020 1.6.364
3
drwxrwxrwx  1 peter  staff  16384  9 Jun  2020 1.4.351
4
drwxrwxrwx  1 peter  staff  16384 11 Apr  2020 1.2.209

Ich hätte jetzt einfach jeweils die Neusten genommen. Oder gibt es etwas 
das dagegen spricht?

Peter

von c-hater (Gast)


Lesenswert?

Peter S. schrieb:

> Ich hätte jetzt einfach jeweils die Neusten genommen. Oder gibt es etwas
> das dagegen spricht?

In aller Regel ist das neueste die beste Wahl. Auf jeden Fall für neue 
Projekte.

von Frank K. (fchk)


Lesenswert?

Kannst Du nicht einfach das avrasm2 Binary sichern und in die aktuelle 
XC8-Installation kopieren? Bei Windows geht das.

fchk

: Bearbeitet durch User
von Peter S. (cbscpe)


Lesenswert?

Gute Idee daran habe ich erst gar nicht gedacht, ich wollte ja sowieso 
schon lange vom AVR Studio in der VM auf MPLAB für macOS umsteigen aber 
da fast alle meine AVR Projekte reine Assembler Projekte sind ist das 
ohne avrasm2 natürlich nicht so toll. Ich hatte mal MPLAB (vor Version 
2) installiert aber dann wegen dem fehlenden Assembler für macOS wieder 
gelöscht und habe es fast verschlafen, dass eine macOS Version für kurze 
Zeit enthalten war. Ich wüsste nur zu gern was die Hintergründe dafür 
sind.

von Peter S. (cbscpe)


Lesenswert?

In der aktuellen Version von XC8 scheinen auch die Assembler inlcudes zu 
fehlen. Also doch die von AVR Studio übernehmen.

von Peter D. (peda)


Lesenswert?

Peter S. schrieb:
> da fast alle meine AVR Projekte reine Assembler Projekte sind ist das
> ohne avrasm2 natürlich nicht so toll.

Wieso, es gibt doch im AVR-GCC den GAS.
Die Syntax ist leicht unterschiedlich, aber das lernt man schnell. Dafür 
kann man aber Profi-Projekte mit mehreren Objekten erstellen und 
zusammen linken. Man kann auch Libs erstellen oder C-Objekte dazu 
linken.
Der GAS ist also deutlich leistungsfähiger, der AVRASM2 ist nur eine 
Behelfslösung.

https://maxembedded.com/2015/06/setting-up-avr-gcc-toolchain-on-linux-and-mac-os-x/

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Peter D. schrieb:

> Dafür
> kann man aber Profi-Projekte mit mehreren Objekten erstellen

Inwiefern macht das Zerlegen in mehrere Objekte ein Projekt zum 
Profi-Projekt?

Das mit den Objekten ist eigentlich nur eine Hilfskonstruktion, um die 
unsäglich langen Kompilierzeiten von C-Compilern einigermaßen erträglich 
zu machen.

Avrasm2 hat das nicht nötig. Der kann auch die größten AVR8 in zwei, 
drei Sekunden komplett füllen.

Was sollte es da bringen, den Code in Häppchen zu zerlegen (mal 
abgesehen von der sinnvollen Aufteilung in einzelne Dateien, die man ja 
auch dort machen kann)?

> C-Objekte dazu
> linken.

Wer würde das ernsthaft wollen? Damit muss man doch einen großen Teil 
des Vorteils der Assemblerprogrammierung wieder aufgeben.

von Peter D. (peda)


Lesenswert?

c-hater schrieb:
> Das mit den Objekten ist eigentlich nur eine Hilfskonstruktion, um die
> unsäglich langen Kompilierzeiten von C-Compilern einigermaßen erträglich
> zu machen.

Nö, das ist nicht der Grund.
Man vermeidet Seiteneffekte der einzelnen Module aufeinander.
Man kann damit Namen funktionslokal halten, d.h. muß nicht darauf 
achten, daß es keine Namenskonflikte gibt. Auch kann man den Linker die 
Plazierung von Variablen automatisch machen lassen.

Wenn man aber eh nur winzige Programme schreibt, ist das natürlich nicht 
nötig.

c-hater schrieb:
> Wer würde das ernsthaft wollen?

Es kann durchaus sein, daß vielleicht 1% des Codes genaue 
Echtzeitanforderungen einhalten müssen. Dann kann man diesen in 
Assembler schreiben. Die restlichen 99% schreibt man natürlich bequem in 
C.
Um das Assemblergerüst zu erhalten, schreibt man die gewünschte Funktion 
als Dummy mit allen Namen, Variablen und Parametern in C und läßt sie 
nach Assembler übersetzen. Dann fügt man nur noch den Assemblercode ein.
Den C-Dummy muß man dann aus dem Projekt entfernen, damit er nicht 
nochmal übersetzt wird.

von Gerhard H. (Gast)


Lesenswert?

Peter D. schrieb:
> Es kann durchaus sein, daß vielleicht 1% des Codes genaue
> Echtzeitanforderungen einhalten müssen. Dann kann man diesen in
> Assembler schreiben. Die restlichen 99% schreibt man natürlich bequem in
> C

Ganz egal welche Anforderung- Assembler erfüllt sie am besten. "Bequem 
in C" ist sehr relativ.
Wer

Peter D. schrieb:
> Um das Assemblergerüst zu erhalten, schreibt man die gewünschte Funktion
> als Dummy mit allen Namen, Variablen und Parametern in C und läßt sie
> nach Assembler übersetzen. Dann fügt man nur noch den Assemblercode ein.
> Den C-Dummy muß man dann aus dem Projekt entfernen, damit er nicht
> nochmal übersetzt wird.

für bequem hält stellt sich wohl auch sonst öfter die Frage: Warum 
einfach wenns auch kompliziert geht?

von Peter D. (peda)


Lesenswert?

@Gerhard H.

Wenn man täglich Assembler verwendet, wie Du, kennt man natürlich das 
Linker-ABI auswendig.

Für diejenigen, die aber nur ganz selten Assembler dazu linken müssen, 
ist der Weg über den C-Dummy der bequemere. Der Compiler weiß dann 
schon, welche Register welche Argumente übergeben und wie die 
Syntaxkonventionen für Variablen und Funktionen sind.

https://en.wikipedia.org/wiki/Application_binary_interface

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Peter D. schrieb:
> Um das Assemblergerüst zu erhalten, schreibt man die gewünschte Funktion
> als Dummy mit allen Namen, Variablen und Parametern in C und läßt sie
> nach Assembler übersetzen. Dann fügt man nur noch den Assemblercode ein.
Genau, erspart eine Menge Kopfschmerzen.

Peter D. schrieb:
> Den C-Dummy muß man dann aus dem Projekt entfernen, damit er nicht
> nochmal übersetzt wird.

Ich entferne es normalerweise nicht, auskommentieren ist viel besser,
falls nachträglich noch etwas in C geändert wird...

von Thomas R. (analogfreak)


Lesenswert?

Man kann auch in avrasm2 Namen funktionslokal halten, wenn man den 
Funktionsrumpf als Makro schreibt

von Peter S. (cbscpe)


Lesenswert?

Es geht hier nicht im C versus Assembler sondern darum, dass viele 
meiner Projekte in reinem Assembler geschrieben sind. Das grösste hat 
ca. 64kbyte code. Beim gcc Assembler stört weniger die eher etwas 
gewöhnungsbedürftige Syntax als vielmehr das unbrauchbare Listing. Und 
das noch viel mehr in einem gemischten Projekt. Das mit dem globalen 
Namensraum ist kaum ein Problem, da gibt es verschiedene Mittel um das 
in den Griff zu bekommen. Ich habe einfach keine Lust meinen ganzen 
Sourcecode gcc konform zu machen. Auch ist ein AVR Prozessor in meinen 
Augen viel zu klein um sich Sorgen wegen Teilkompilieren oder Namensraum 
zu machen. Ich will als erstes einfach weg von Windows. Gemischte 
Projekte habe ich auch schon, aber viel Freude am Resultat habe ich noch 
nicht, auf alle Fälle reicht der Vorteil gewisse Module der 
Bequemlichkeit halber in C programmieren zu können nicht aus um den 
Frust am mässigen Resultat zu kompensieren. C und Assembler mischen 
scheint nicht wirklich das Ziel der Toolchain zu sein und so bleibt es 
bei Inline Assembler wenn ich in einem C Projekt kritische Teile in 
Assembler programieren will oder muss.

von c-hater (Gast)


Lesenswert?

Peter S. schrieb:

> Auch ist ein AVR Prozessor in meinen
> Augen viel zu klein um sich Sorgen wegen Teilkompilieren oder Namensraum
> zu machen.

Genau so ist das. Die AVR8 sind klein genug, dass man sie problemlos 
vollständig in Asm programmieren kann. Vieles ist sogar in Asm deutlich 
einfacher umzusetzen. Man denke z.B. nur an konstante Tabellen mit mehr 
als 32k Elementen oder mehr als 64k Speicherbedarf. Das ist mit dem 
avrgcc absoluter Krampf.

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.