AVR Embedded - avr.inc

Antworten
jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

AVR Embedded - avr.inc

Beitrag von jayway »

Ich habe heute, nach einem Jahr Pause, meine Entwicklungsumgebung für Atmega-Controller wieder in Betrieb zu nehmen versucht. Ich habe also fpcupdeluxe benutzt und eine Version vom fpc und Lazarus aus dem trunk-zweig erzeugt. (Alles gemäß der Anleitung im Wiki --> https://wiki.freepascal.org/AVR_Embedde ... Arduino/de) Danach wollte ich den Crosscompiler erzeugen und scheiterte regelmäßig daran, dass ich einen Syntaxfehler in der system.S hatte. Angemeckert wurde die Zeile:

Code: Alles auswählen

sbiw Z, 1

Nach etwas Recherche habe ich herausgefunden, dass die richtige Syntax

Code: Alles auswählen

sbiw ZL, 1

lauten muss.
Als blutigem Anfänger wurde mir nach mehreren erfolglosen Versuchen bewußt, dass die system.S immer neu erzeugt wird, also habe ich mich auf die Suche gemacht und die ...\fpcsrc\rtl\avr\avr.inc als Schuldigen ausgemacht.
Nach der Korrektur der Zeilen 59 und 66 lief die Installation durch und an meinem atmega328p blinken jetzt, auch dank LazPackageEmbeddedAVR, die ersten LED.

Kann das jemand bitte verifizieren.

Vor einem Jahr lief die Installation nach Wiki-Anleitung noch problemlos, nun habe ich einen ganzen Abend zur Einrichtung gebraucht.
Ich würde das ja gern korrigieren oder melden, aber ich bin bezüglich Lazarus und Freepascal ein blutiger Anfänger. Ich habe zwar mit TurboPascal gearbeitet, aber das ist 30 Jahre her und sehe in den ganzen Abhängigkeiten, Paketen, Compilern, Tools und SVN/Git und ehrlich gesagt noch kein Land.
Die letzten Jahre habe ich halt meistens µC in C programmiert.
Gibt es hier erfahrene AVR-embedded Programmierer mit denen ich mich auseinandersetzen kann, oder vielleicht gut Quellen für Dokumente (gern auch Englisch...).
Ich würde wahnsinnig gern auf Freepascal umsteigen, natürlich auch, weil man damit letztlich schnell auch mal ein PC-Programm entwickeln kann. :D

Gruß Jay

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR Embedded - avr.inc

Beitrag von af0815 »

Ich habe mir eine FPC3.2 fixes mit Lazarus 2.0 fixes gebaut und bin am Programmieren, habe aber kein Problem gehabt (mit atmega328p) bisher.

Da ist allerding zwischen der fixes und dem trunk einiges passiert. Da ist viel von pascal auf assembler umgestellt worden. Ev. einen Bugreport dazu schreiben. Ist am 1.6.2019 17:39:09 in Version 42155 von laksen geändert worden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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: AVR Embedded - avr.inc

Beitrag von Timm Thaler »

Hm, das sollte eigenlich auch mit Z gehen, weil es zumindest im Assembler egal ist, ob man sbwi Z oder ZL - was ja nur die Registeradresse 30 ist - übergibt.

Allerdings kann ich Deine Zeilen in der avr.inc nicht zuordnen.

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR Embedded - avr.inc

Beitrag von jayway »

Mit den Einstellungen von af0815 wird der Crosscompiler anstandslos gebaut. (fpc Fixes 3.2 und Lazarus Fixes 2.0)
Allerdings habe ich jetzt beschlossen, die trunk-Version + Avr-Crosscompiler erst später am heutigen Tag noch einmal zu testen. Zumindest scheint es schon mal nicht am avr-gcc oder avr-as zu liegen, denn die sind in beiden Fällen identisch.
Vielen Dank schon mal für die Rückmeldungen, ich bleibe am Ball.

Achso, System ist ein Thinkpad mit Windows 10 - 1903.

Gute Nacht.

Jay

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: AVR Embedded - avr.inc

Beitrag von Timm Thaler »

Auch wenn ich die letzten Wochen nichts für AVR embedded programmiert habe - das wird sich aber die nächsten Tage ändern ;-) - empfiehlt sich immer der aktuelle Trunk, eventuell mit einem Fallback auf Fixes. Für AVR wird recht viel gemacht und auch Bugfixes erfolgen sehr schnell - mitunter innerhalb von Stunden.

Leider sind mit jeder zusätzlichen Installation erstmal 3 GB Plattenspeicher weg...

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR Embedded - avr.inc

Beitrag von jayway »

Moin, moin...

die 3 GB tun nicht weh. :) Der Mehraufwand ist ja auch nur temporär. Am Ende der Prozedur bleiben eine produktive und ein experimentelle Version übrig.

Heute morgen habe ich noch einmal alles ganz frisch aufgesetzt und eine Version mit fpc 3.3.1 (trunk) und Lazarus 2.1.0 (trunk) gebaut.
Das ist die Fehlermeldung bei Erstellung des Crosscompilers:

Code: Alles auswählen

C:/Lazarus4/fpcsrc/compiler/ppcrossavr.exe -Cpavr5 -Ur -Tembedded -Pavr -XPavr-embedded- -Xr -Ur -Xs -O2 -n -Fi../inc -Fi../avr -FDC:\Lazarus4\cross\bin\avr-embedded -FE. -FUC:/Lazarus4/fpcsrc/rtl/units/avr-embedded -vw-n-h-l-d-u-t-p-c- -O2 -davr -dRELEASE -XPavr-embedded- -Xd -FlC:\Lazarus4\cross\lib\avr-embedded\avr5 -Cpavr5  -Us -Sg system.pp @system.cfg 
C:\Lazarus4\fpcsrc\rtl\units\avr-embedded\system.s: Assembler messages:
C:\Lazarus4\fpcsrc\rtl\units\avr-embedded\system.s:30: Error: constant value required
C:\Lazarus4\fpcsrc\rtl\units\avr-embedded\system.s:30: Error: register r24, r26, r28 or r30 required
C:\Lazarus4\fpcsrc\rtl\units\avr-embedded\system.s:36: Error: constant value required
C:\Lazarus4\fpcsrc\rtl\units\avr-embedded\system.s:36: Error: register r24, r26, r28 or r30 required
system.pp(336) Error: Error while assembling exitcode 1
system.pp(336) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
make.exe[1]: *** [embedded_all] Error 2


In der benannten system.S stehen auf Zeile 27-37:

Code: Alles auswählen

 
.Lj9:
   ld   r18,-x
   st   -y,r18
   sbiw   z,1
   brne   .Lj9
   rjmp   .Lj7
.Lj8:
   ld   r18,x+
   st   y+,r18
   sbiw   z,1
   brne   .Lj8
 

 
Erzeugt wird sie (vermutlich) aus der benannten avr.inc. Dort steht folgender Quelltext in den Zeilen 51-68

Code: Alles auswählen

 
  // Add count to both pointers
  add r26, r30
  adc r27, r31
  add r28, r30
  adc r29, r31
.LBackwardMove:
  ld r18, -X
  st -Y, r18
  sbiw Z, 1
  brne .LBackwardMove
  rjmp .Lexit
 
.LForwardMove:
  ld r18, X+
  st Y+, r18
  sbiw Z, 1
  brne .LForwardMove
.Lexit:
 

 
Nach Änderung der beiden Zeilen in der ..\fpcsrc\rtl\avr\avr.inc von

Code: Alles auswählen

sbiw Z, 1
in

Code: Alles auswählen

sbiw ZL, 1
, läuft der Build-Vorgang fehlerlos durch.

Gruß Jay

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR Embedded - avr.inc

Beitrag von af0815 »

Kann ich jetzt nachvollziehen, nachdem ich vorgestern nicht mal den Trunk kompilieren konnte.

Ist nachvollziehbar. Komisch ist nur das die Syntax laut offiziellen Manual https://www.microchip.com/webdoc/avrass ... _SBIW.html die auf sbiw ZH:ZL, 1 lautet nicht funktioniert, da dürfte der gnu cross assembler eine leicht abweichende Syntax vorziehen.

Edit: Ich habe dazu einen Bugreport gemacht
https://bugs.freepascal.org/view.php?id=35752
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR Embedded - avr.inc

Beitrag von af0815 »

Ist im Trunk gefixt worden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten