AVR Embedded - avr.inc

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

AVR Embedded - avr.inc

Beitragvon jayway » 21. Jun 2019, 21:58 AVR Embedded - avr.inc

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
jayway
 
Beiträge: 15
Registriert: 13. Feb 2018, 10:38
Wohnort: Dresden
OS, Lazarus, FPC: Windows (L 2.0.3 FPC 3.2.0) | 
CPU-Target: 64Bit
Nach oben

Beitragvon af0815 » 21. Jun 2019, 22:22 Re: AVR Embedded - avr.inc

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).
af0815
 
Beiträge: 3686
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Timm Thaler » 21. Jun 2019, 22:33 Re: AVR Embedded - avr.inc

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.
Timm Thaler
 
Beiträge: 938
Registriert: 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
Nach oben

Beitragvon jayway » 21. Jun 2019, 23:25 Re: AVR Embedded - avr.inc

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
jayway
 
Beiträge: 15
Registriert: 13. Feb 2018, 10:38
Wohnort: Dresden
OS, Lazarus, FPC: Windows (L 2.0.3 FPC 3.2.0) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 22. Jun 2019, 00:08 Re: AVR Embedded - avr.inc

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...
Timm Thaler
 
Beiträge: 938
Registriert: 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
Nach oben

Beitragvon jayway » 22. Jun 2019, 08:48 Re: AVR Embedded - avr.inc

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
jayway
 
Beiträge: 15
Registriert: 13. Feb 2018, 10:38
Wohnort: Dresden
OS, Lazarus, FPC: Windows (L 2.0.3 FPC 3.2.0) | 
CPU-Target: 64Bit
Nach oben

Beitragvon af0815 » 22. Jun 2019, 15:29 Re: AVR Embedded - avr.inc

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).
af0815
 
Beiträge: 3686
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon af0815 » 7. Jul 2019, 14:32 Re: AVR Embedded - avr.inc

Ist im Trunk gefixt worden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3686
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried