Welche AVR werden von FPC unterstützt ?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Ist das richtig, das die AVR unterstützt werden, welche sich in der folgenden Datei befinden ?
fpcsrc/rtl/embedded/Makefile ab Zeile 386.

Was dabei interessant ist, bei Lazarus unter Zielprozessor wir AVR1 und AVR2 gelistet, obwohl es so was in der Makefile nicht gibt.
Dies betrifft zB. den ATiny11.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Timm Thaler »

Nein, ATtiny11, ATtiny15, AT90S1200 und so nicht. Alles was keinen RAM hat und damit keinen Stack ermöglicht geht in Freepascal nicht - und auch nicht in C, es wird nur Assembler unterstützt:

https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html

Und ich würde mit solchen alten Möhren auch nicht mehr anfangen, hab die schon vor Jahren aussortiert.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Brauchen tu ich solche Dinger nicht. Ich brauche es für meine Lazarus IDE Erweiterung, da muss ich wissen, was unterstützt wird.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Timm Thaler »

Einige aus avr25, avr4, avr5, avr51 kann ich positiv bestätigen.

Einige Tinys aus avr2 und avrtiny sind in avr25 gelandet.

avr1 - die AVR mit ohne RAM - gehen definitiv nicht.

Einige classic AVR aus avr2 - AT90S2313, AT90S4414, AT90S8515... - sollten eigentlich technisch gehen, wurden aber anscheinend wegen "zu alt" nicht eingepflegt. Ist auch kein Verlust, es gibt für alle pin- und funktionskombatiblen Ersatz in der Tiny und Mega Reihe.

Ich denke Du kannst die Auswahl aus dem Makefile übernehmen und eventuell nochmal mit /fpcsrc/rtl/embedded/avr gegenprüfen.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Ich habe noch etwas merkwürdiges gefunden.
Fpc unterscheidet den ATTiny2313 und ATTiny2313A. Avrdude nimmt nur den Typ ohne A an.
Woran liegt das ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Timm Thaler »

Mathias hat geschrieben:Fpc unterscheidet den ATTiny2313 und ATTiny2313A. Avrdude nimmt nur den Typ ohne A an.
Woran liegt das ?


Weil in Deiner avrdude.conf der ATtiny2313A nicht eingetragen ist. Das könnte man schnell ändern, den ATtiny2313 in der avrdude.conf kopieren, die Signatur anpassen, der Rest sollte gleich sein.

Avrdude und FPC haben nun gar nichts miteinander zu tun. FPC interessiert nicht, was in der avrdude.conf steht und avrdude interessiert nicht was FPC für AVRs compilieren kann.

Und: Je nachdem wie alt Dein avrdude ist und woher Du es hast und wer da schon dran rumgebastelt hat, können die Einträge in der avrdude.conf unterschiedlich sein.

Wenn Du jetzt vorhast mit FPC avrdude mit voreingestellten Parametern aufzurufen, ja dann wirds schwierig.

Entweder Du rufst es mit dem Controllertyp auf, der bei FPC eingestellt ist. Dann besteht die Gefahr, dass der in der avrdude.conf nicht enthalten ist und Du bekommst eine Fehlermeldung von avrdude.

Oder Du versuchst die avrdude.conf einzulesen und auszuwerten, aber was machst Du wenn es mehrere gibt (was durchaus vorkommen kann: Jemand installiert avrdude von Hand, holt sich die Arduino IDE, die nochmal avrdude installiert, jemand bearbeitet die avrdude.conf unter Windows, aber weil avrdude im Programmverzeichnis liegt wird die veränderte conf nach \Virtual geschrieben... Das würd ich mir nicht antun.

Man kann auch avrdude sagen, dass es die Signatur nicht prüfen soll. Das würde ich aber nicht zum Standard machen, damit handelt man sich nur wieder Ärger ein.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Weil in Deiner avrdude.conf der ATtiny2313A nicht eingetragen ist. Das könnte man schnell ändern, den ATtiny2313 in der avrdude.conf kopieren, die Signatur anpassen, der Rest sollte gleich sein.
Verwende die Default cfg unter /etc.

Avrdude und FPC haben nun gar nichts miteinander zu tun. FPC interessiert nicht, was in der avrdude.conf steht und avrdude interessiert nicht was FPC für AVRs compilieren kann.
Dies ist mir bekannt, aber es sollten es nicht die gleichen Typen sein.

Und: Je nachdem wie alt Dein avrdude ist und woher Du es hast und wer da schon dran rumgebastelt hat, können die Einträge in der avrdude.conf unterschiedlich sein.
Der mir mein Mint standardmäßig installiert hat.

Wenn Du jetzt vorhast mit FPC avrdude mit voreingestellten Parametern aufzurufen, ja dann wirds schwierig.
Da hast du recht.

Entweder Du rufst es mit dem Controllertyp auf, der bei FPC eingestellt ist. Dann besteht die Gefahr, dass der in der avrdude.conf nicht enthalten ist und Du bekommst eine Fehlermeldung von avrdude.
Das habe ich gemerkt, das man dies vermeiden soll.

Ich lösse es folgendermassen, das man den avrdude Parameter manuell korrigieren kann.
Dateianhänge
Bildschirmfoto vom 2019-12-31 16-32-37.png
Bildschirmfoto vom 2019-12-31 16-32-37.png (35.83 KiB) 4501 mal betrachtet
Zuletzt geändert von Mathias am Mi 1. Jan 2020, 13:21, insgesamt 1-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Timm Thaler »

Mathias hat geschrieben:Dies ist mir bekannt, aber es sollten eigentlich die gleichen Typen.


Es werden die Typen angezeigt, die derjenige, der das letzte Mal an der avrdude.conf rumgefummelt hat, die Dein Paketmanager Dir anbietet, für Wert befunden hat in die .conf einzutragen. Da das sehr wahrscheinlich ein anderer Typ ist als der, die die AVRs in FPC angelegt hat, müssen die nicht übereinstimmen.

Hab grad auf dem Raspi nachgesehen, da ist der Tiny2313A auch nicht bei avrdude drin.

Was der Paketmanager macht, wenn Du die avrdude.conf händisch überarbeitest, ob der die beim nächsten Update wieder überschreibt, weiss ich jetzt nicht.

Es ist aber natürlich auch unter Linux möglich, avrdude und die avrdude.conf von Hand zu installieren und in einem beliebigen Verzeichnis abzulegen.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Es ist aber natürlich auch unter Linux möglich, avrdude und die avrdude.conf von Hand zu installieren und in einem beliebigen Verzeichnis abzulegen.

Aus diesem Grund, kann man bei meinem Tool die Pfade manuell eingeben.

Bei Arduino ist es auch nicht anders, jede Package für zusätzliche AVRs die ich für Arduino gesehen habe, hatte eine eigene avrdude.

Bei den avrdude Aufrufe in meinem Tutorial, habe ich viele -D Parameter gesehen. Dieser Parameter hat bis jetzt Ärger verursacht.
Kann ich den generell getrost weglassen, oder handele ich dabei anderen Ärger ein ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Timm Thaler »

Mathias hat geschrieben:Bei den avrdude Aufrufe in meinem Tutorial, habe ich viele -D Parameter gesehen. Dieser Parameter hat bis jetzt Ärger verursacht.


Wer macht denn sowas? Das darf man bestenfalls beim Ersten beschreiben machen, wenn der Chip noch fabrikneu ist, also nix vom Chinesen oder von Pollin. Und es bringt nix außer ein paar msec Zeiteinsparung.

Damit bin ich auch schon auf die Fresse geflogen: Stundenlange Fehlersuche, warum sich dieser blöde Chip ständig Fehler beim Verify brachte. Ich hatte aus versehen den Haken für Chip erase rausgenommen.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Das hatte ich mal von irgendwoher her kopiert. Ich denke, das war irgendwo mal bei Arduino.
Ich werde die Tutorials anpassen, nicht das noch andere darüberstolpern.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Ich habe nun das Tutorial angepasst und die -D entfernt.
Bei fpcupdeluxe hat sich die Bedienung auch ein wenig geändert, habe dort auch noch Anpassungen gemacht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Ich habe gerade gesehen, das avrdude eine NOTE bringt, wen -D fehlt.
Egal ob ATtiny oder ATmega328.

Code: Alles auswählen

...
Reading | ################################################## | 100% 0.00s
 
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "Project1.hex"
avrdude: writing flash (198 bytes):
...
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Timm Thaler »

Mathias hat geschrieben:Ich habe gerade gesehen, das avrdude eine NOTE bringt, wen -D fehlt.
Egal ob ATtiny oder ATmega328.

Code: Alles auswählen

...
Reading | ################################################## | 100% 0.00s
 
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "Project1.hex"
avrdude: writing flash (198 bytes):
...


Und das ist genau richtig so. Allerdings ist diese mißverständliche "Fehlermeldung" wahrscheinlich der Grund, warum in vielen Tuts das -D steht, obwohl falsch. Weil die Leute nicht wissen, wie Flash funktioniert.

Flash-Speicher ist im "unprogrammierten" Zustand immer $FFFF oder 0b1111 1111 1111 1111. Also alle Bits gesetzt. Dem ist kein Opcode zugeordnet (invalid instruction) und es wird wie ein nop behandelt. Denn: Setzt man einen fabrikneuen AVR aufs Board und unter Spannung, rennt der sofort los, denn er weiss nicht, ob er schon programmiert wurde. Er findet aber als Befehl immer nur $FFFF, was nichts bewirkt und rattert so den ganzen Flash durch.

Beim "Programmieren" können im Flash nur Bits gelöscht werden, also von 1 auf 0 wechseln, nicht umgekehrt. Aus einem brge mit Opcode 0b1111 01... kann ein breq mit Opcode 0b1111 00... werden durch ersetzen der 1 mit 0, aber nicht umgekehrt.

Will man Einsen setzen, muss man vorher ein "Chip erase" machen, dann werden alle Zellen im Flash wieder auf $FFFF gesetzt, und dann kann man sie durch Löschen wieder programmieren.

Dummerweise funktioniert es auch manchmal ohne Chip erase. Wird zum Beispiel nur ein Befehl brge auf breq geändert, oder eine Konstante von $FF auf $F0, also Bits gelöscht, dann funktioniert die Programmierung und das Verify stimmt auch. Wird allerdings die Konstante von $F0 auf $FF geändert, - es können ohne Erase keine 1en programmiert werden - steht danach immer noch $F0 drin, und das Verify bringt einen Fehler. Komplett schief geht es natürlich, wenn Befehle eingefügt werden und sich damit die Stellung der Befehle im Flash verschiebt.

Deswegen macht man vorm Programmieren immer ein Erase. Der Avrdude weiss das und fügt beim Befehl "Programmieren" automatisch ein "Erase" voran, wenn man das nicht explizit unterdrückt. Und genau das teilt er Dir dann mit.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Welche AVR werden von FPC unterstützt ?

Beitrag von Mathias »

Vielen Dank für die Info.
Man lernt nie aus. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten