Tutorial Arduino programmieren,

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

Re: Tutorial Arduino programmieren,

Beitragvon pluto » 22. Aug 2018, 18:09 Re: Tutorial Arduino programmieren,

Es ist nicht nur der Preis, auch Power hat er mehr, immerhin ist er mit 72MHz getaktet und erst noch ist er 32Bit.
ATtiny/Atmega max 20MHz, nur 8Bit.

Das meinte ich damit... Es gibt von STM32 auch ein "Käfer" mit ähnlichen Leistungen.....
Auch die Anzahl der "Pins".... beim 303 ca um die 80 Stück und beim 103 weniger, wobei es ja von allen Cortex(en) ja auch wieder verschiedene Varianten gibt.
Beim 103 ist ja eine "kleinere" Variante gebaut, den gibt es auch größer....

Dafür ist Arduino/atMega besser Dokumentiert und auch noch in Deutscht.... man findet einfach leichter Informationen, habe ich so den Eindruck... bei STM32 ist man quasi auf das Datenblatt angewiesen.... bis du das durch hast, vergeht aber einige Zeit....
MFG
Michael Springwald
Aktuelles Projekt: ContentManager2(Ehmals NoteManager2).
pluto
Lazarusforum e. V.
 
Beiträge: 7007
Registriert: 19. Nov 2006, 13:06
Wohnort: Oldenburg(Oldenburg)
OS, Lazarus, FPC: Linux Mint 19.2 | 
CPU-Target: AMD
Nach oben

Beitragvon Mathias » 22. Aug 2018, 18:23 Re: Tutorial Arduino programmieren,

Für ein STM32 Discovery Board gibt es eine erprobte Lösung hier:
viewtopic.php?f=9&t=11264&start=35

Dein Wissen, was du mir dort weiter gegeben hat, habe ich im Wiki veröffentlicht: http://wiki.freepascal.org/ARM_Embedded_Tutorial/de
Ohne dies ginge gar nicht mit STM32.

Aber es wäre trotzdem ein Wunsch, wen es auch mit Lazarus laufen würde.

Dafür ist Arduino/atMega besser Dokumentiert und auch noch in Deutscht.... man findet einfach leichter Informationen, habe ich so den Eindruck... bei STM32 ist man quasi auf das Datenblatt angewiesen.... bis du das durch hast, vergeht aber einige Zeit....
Du hast nicht nur den Eindruck, es ist leider auch so. Beim AVR-Tutorial habe ich fast alles im Nerz gefunden. Beim STM32 findet man praktisch nichts.
Der Grund wird wohl sein, das der Arduino sehr verbreitet ist.
Beim Datenblatt vom STM32 hast du recht, dies ist ein dickes Buch.

Ich habe mal bei Amazon geguckt, für den Arduino gibt es massenweise Bücher, wovon die meisten nur für Anfänger sind.
Für den STM32 habe gar keines gefunden. :evil:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4347
Registriert: 2. Jan 2014, 18:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 22. Aug 2018, 22:05 Re: Tutorial Arduino programmieren,

Mathias hat geschrieben:So unbekannt, ist das Tutorial doch nicht.


Nicht machen!

Die Leute im µC Forum sind größtenteils C-fixiert. Um nicht zu sagen manisch C-fixiert. Lass Dich mit denen auf keine Diskussion über Lazarus oder Pascal ein, wenn Du nicht ganz sicher bist auf dem Bodensatz des Diskussionniveaus fischen zu wollen.
Zuletzt geändert von Timm Thaler am 23. Aug 2018, 21:05, insgesamt 1-mal geändert.
Timm Thaler
 
Beiträge: 970
Registriert: 20. Mär 2016, 23: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 Timm Thaler » 22. Aug 2018, 22:13 Re: Tutorial Arduino programmieren,

Socke hat geschrieben:Deswegen verwendet man bei Arrays _immer_ die Funktionen low() und high().


Probiere ich gern aus, wenn ich mal wieder an dem Projekt mit dem nRF dran bin, und würde das dann auch ins Tut übernehmen. Momentan gibts andere Projekte, aber das kommt bestimmt wieder auf den Tisch.
Timm Thaler
 
Beiträge: 970
Registriert: 20. Mär 2016, 23: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 Socke » 22. Aug 2018, 22:49 Re: Tutorial Arduino programmieren,

Mathias hat geschrieben:
Siehe FPC-Quelldate rtl/inc/dynarr.inc

So wie ich das sehe, bezieht dich dies auf dynamische Arrays, mit denen kann der AVR sowieso nicht umgehen.
Sind die Functionen Lenght, High und Low nicht nur Alias ?

Offensichtlich sind nur low() und high() bei statischen Arrays als compiler-intrinsische Funktion implementiert. In einer höheren Optimierungstufe sollte das herumgerechne aber eleminiert werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2627
Registriert: 22. Jul 2008, 19:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Mathias » 22. Aug 2018, 22:53 Re: Tutorial Arduino programmieren,

Offensichtlich sind nur low() und high() bei statischen Arrays als compiler-intrinsische Funktion implementiert.

Wen ich das so lese wird dies das optimalste sein ?
Code: Alles auswählen
for i := to 7 do ...
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4347
Registriert: 2. Jan 2014, 18:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 23. Aug 2018, 11:49 Re: Tutorial Arduino programmieren,

Mathias hat geschrieben:Wen ich das so lese wird dies das optimalste sein ?
Code: Alles auswählen
for i := to 7 do ...

Änderst du den Array, hast du sofort ein massives Problem in deinem Programm. Am besten verwendest du immer bei statischen und dynamischen Arrays low() und high():
Code: Alles auswählen
for i := low(myarray) to high(myarray) do ...
[/quote]
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2627
Registriert: 22. Jul 2008, 19:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Mathias » 23. Aug 2018, 23:05 Re: Tutorial Arduino programmieren,

Egal welche Variante ich von den dreien nehme, der Kompilierte Code ist immer gleich gross.
Code: Alles auswählen
{$O-} // Optimierung aus
var
    a:array[0..7] of Char;
begin
  for i := 0 to high(a) do UARTSendChar(a[i])
  for i := 0 to Length(a) -1  do UARTSendChar(a[i])
  for i := 0 to 7 do UARTSendChar(a[i])
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4347
Registriert: 2. Jan 2014, 18:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 24. Aug 2018, 03:40 Re: Tutorial Arduino programmieren,

Mathias hat geschrieben:Egal welche Variante ich von den dreien nehme, der Kompilierte Code ist immer gleich gross.


Was schlichtweg daran liegt, dass der Compiler natürlich in allen 3 Varianten den gleichen Endwert für die Schleife nimmt: 7

Der Unterschied liegt daran, dass bei a) die Schleife angepasst wird, wenn Du die Feldlänge änderst, bei b) ebenfalls, aber Probleme macht, wenn Du die -1 vergisst und bei c) eine Änderung nicht übernommen wird.

Bei a) denkt der Compiler am besten für Dich mit.
Timm Thaler
 
Beiträge: 970
Registriert: 20. Mär 2016, 23: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 Mathias » 24. Aug 2018, 17:50 Re: Tutorial Arduino programmieren,

Was schlichtweg daran liegt, dass der Compiler natürlich in allen 3 Varianten den gleichen Endwert für die Schleife nimmt: 7

Aber wen ich den Kommentar von Socke lese, habe ich gedacht, das dies anders aussieht.

Oder hat er damit dynamische Array gemeint, welche bei AVR sowieso nicht unterstützt sind ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4347
Registriert: 2. Jan 2014, 18:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 24. Aug 2018, 19:42 Re: Tutorial Arduino programmieren,

Mathias hat geschrieben:
Was schlichtweg daran liegt, dass der Compiler natürlich in allen 3 Varianten den gleichen Endwert für die Schleife nimmt: 7

Aber wen ich den Kommentar von Socke lese, habe ich gedacht, das dies anders aussieht.

Ich hatte dies aufgrund diesen Postsvon Timm Thaler gemutmaßt; dass dem bei statischen Arrays nicht so ist, haben wir wohl herausgefunden. Da der code-Abschnitt von Timm Thaler aber unvollständig ist, kann ich das dort geschilderte Problem nicht nachvollziehen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2627
Registriert: 22. Jul 2008, 19:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Timm Thaler » 24. Aug 2018, 20:03 Re: Tutorial Arduino programmieren,

Socke hat geschrieben:
Mathias hat geschrieben:Ich hatte dies aufgrund diesen Postsvon Timm Thaler gemutmaßt; dass dem bei statischen Arrays nicht so ist, haben wir wohl herausgefunden. Da der code-Abschnitt von Timm Thaler aber unvollständig ist, kann ich das dort geschilderte Problem nicht nachvollziehen.


Das bezieht sich auf den Teil im Tutorial zum SPI: http://wiki.freepascal.org/AVR_Embedded_Tutorial_-_SPI/de#Daten_.C3.BCbertragen

Hier wird ein Array vorher nicht bekannter Länge "by reference" übergeben*. Da kann der Compiler keine Konstante für das Schleifenende einbauen, die Arraylänge muss jedesmal übergeben werden.

In Mathias Beispiel ist aber die Arraylänge bekannt, und da ist der Compiler halt so schlau, jedesmal die Konstante gleich einzubauen.

*) Ich bin mir jetzt nicht sicher, ob das schon als "dynamisches Array gilt. Ich glaube mich aber zu erinnern, dass Arrayübergabe "by reference" nur mit nullbasierten Arrays funktioniert.
Timm Thaler
 
Beiträge: 970
Registriert: 20. Mär 2016, 23: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 Mathias » 24. Aug 2018, 20:32 Re: Tutorial Arduino programmieren,

Ich glaube mich aber zu erinnern, dass Arrayübergabe "by reference" nur mit nullbasierten Arrays funktioniert.

Gehen tut es, folgender Code spuckt 0 3 aus. Wichtig ist das var bei Test.
Code: Alles auswählen
var
  ar1: array[10..13] of Byte = (1,2,3,4);
 
  procedure Test(var p: array of Byte);
  var
    s: ShortString = '';
  begin
    str(Low(p): 6, s);
    UARTSendString(s);
    str(high(p): 6, s);
    UARTSendString(s);
  end;
 
begin
  UARTInit;
  UARTSendString('Anfang' + #13#10);
  Test(ar1);
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4347
Registriert: 2. Jan 2014, 18:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 24. Aug 2018, 21:09 Re: Tutorial Arduino programmieren,

Mathias hat geschrieben:Gehen tut es, folgender Code spuckt 0 3 aus.


Ah richtig, in der Routine war das Array dann immer nullbasiert, woraufhin ich die Zeichenbuffer auch nullbasiert angelegt habe, um mich nicht zu sehr zu verwirren. Mit low() und high() wäre das auch kein Problem, kannte ich damals noch nicht.

Aber ist das Array in der Routine nun ein "dynamisches Array" in dem Sinn, den Pascal dafür verwendet (http://wiki.freepascal.org/Dynamic_array), oder kann man das so nicht sagen?
Timm Thaler
 
Beiträge: 970
Registriert: 20. Mär 2016, 23: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 Mathias » 24. Aug 2018, 21:15 Re: Tutorial Arduino programmieren,

Auf dem PC betrachtet, ist eine dynamische Array auf dem Heap und eine statische im Datenspeicher.
Anscheinend ist der Function egal, ob der Zeiger von Heap oder vom Daten speicher kommt. Aber ein Längenbyte muss interen auf jeden Fall übergeben werden, ansonsten weis die Function nicht wie lange die array ist.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4347
Registriert: 2. Jan 2014, 18:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried