Plutos-AVR
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
Du hast sogar mehrere Fehler eingebaut. Einer ist, deine for Schleifen überlaufen.
Das ^ hast du ingnoriert. Was es in C ist weis ich auch nicht auswendig, aber auf keinen Fall ein Pointer.
Das ^ hast du ingnoriert. Was es in C ist weis ich auch nicht auswendig, aber auf keinen Fall ein Pointer.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- 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: Plutos-AVR
^= ist XOR-Zuweisung.Mathias hat geschrieben:Das ^ hast du ingnoriert. Was es in C ist weis ich auch nicht auswendig, aber auf keinen Fall ein Pointer.
crc ist eine Checksumme, die über jedes Bit (shift) gebildet wird. Bescheuert, weil zeitaufwendig durch das Shift. Wenn möglich würde ich die weglassen.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
Ich habe es dir richtig übersetzt, so verstehst du vielleicht eher was dort passiert.
Es geht sogar mit dem Pointer wie im original Code.
Das hat den Vorteil, du kannst ziemlich alles der Funktion übergeben, egal ob String, Array, Record oder eine einfache Variable.
Es geht sogar mit dem Pointer wie im original Code.
Das hat den Vorteil, du kannst ziemlich alles der Funktion übergeben, egal ob String, Array, Record oder eine einfache Variable.
Code: Alles auswählen
function Adafruit_AM2320(buffer: PByte; nbytes: byte): UInt16;
var
crc: UInt16 = $FFFF;
b: UInt8;
i, x: byte;
begin
for i := 0 to nbytes - 1 do begin
b := buffer[i];
crc := crc xor b;
for x := 0 to 7 do begin
if crc and $0001 <> 0 then begin
crc := crc shr 1;
crc := crc xor $A001;
end else begin
crc := crc shr 1;
end;
end;
end;
Result := crc;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
buf:ShortString;
begin
buf:='Hello World';
WriteLn(Adafruit_AM2320(@buf[1], Length(buf)));
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Bei den For schleifen war ich mir nicht ganz sicher. Im C Code heißt es:Du hast sogar mehrere Fehler eingebaut. Einer ist, deine for Schleifen überlaufen.
"for (int x=0; x<8; x++) {"
Also müsste es in Pascal wohl:
Code: Alles auswählen
for x:=0 to 7 do begin
Ich habe das für ein Pointer gehalten... In Pascal würde das dann wohl so aussehen:^= ist XOR-Zuweisung.
Code: Alles auswählen
crc =crc xor $A001;
Code: Alles auswählen
crc ist eine Checksumme, die über jedes Bit (shift) gebildet wird. Bescheuert, weil zeitaufwendig durch das Shift. Wenn möglich würde ich die weglassen.
Du bisst da wohl andere Meinung?
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Danke, habe ich erst später gelesen....Ich habe es dir richtig übersetzt, so verstehst du vielleicht eher was dort passiert.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Code: Alles auswählen
...
the_crc:=buffer[5];
the_crc:=the_crc shl 8;
the_crc:=the_crc or buffer[4];
calc_crc:=crc16(@buffer,4);
if the_crc <> calc_crc then begin
result:=0;
Error:=true;
exit;
end;
...
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
In C kann man For-Schleifen auf mehrere Arten schreiben. Gebräuchlich sind dabei 2 Stück.Bei den For schleifen war ich mir nicht ganz sicher. Im C Code heißt es:
Beide Beispiele laufen von 0 bis 7 durch.
Code: Alles auswählen
for (int i = 0; i < 8; i++)....
for (int i = 0; i <= 7; i++)....
Es gehen sogar Fliesskommazahlen.
Ein kleines Beispiel:
Code: Alles auswählen
#include <iostream>
using namespace std;
int main()
{
for (int i = 0; i <= 8; i += 2) {
cout << i << ' ';
}
cout << endl;
for (float i = 1.2; i <= 8.0; i += 0.3) {
cout << i << ' ';
}
return 0;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
Dies musst du selbst entscheiden.Ist die Funktion "crc16" Sinnvoll oder nicht?
Wen du möglichst viele Messungen pro Sekunde machen willst, dann weglassen.
Aber wen du genügend Zeit hast, würde ich sie einbauen, vorausgesetzt du hast noch vorigen Platz in deinem AVR.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Gut, dann werde ich es mir überlegen.... Es ist ja nicht nur für mich, sondern auch für die Allgemeinheit.Dies musst du selbst entscheiden.
Vielleicht werde ich es über ein Kompilierschalter machen:
Der im Normalfall aktiv ist, aber man kann ihn dann auch ausschalten um Zeit und Speicherplatz zu sparen, wenn Sicherheit nicht so wichtig ist.....
Wäre das eine Art Kompromiss?
Aufjedenfall habe ich eine Menge über C++ Gelernt....
Da das jetzt soweit läuft, werde ich wohl beim BME 280 weiter machen...
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Ersten Beitrag bearbeitet und ein neues Archiv hochgeladen....
Probleme habe ich noch mit den Timern, die verstehe ich derzeit noch nicht.
Ich möchte z.b. das jede Mikrosekunde eine Variable hochgezählt wird.
Probleme habe ich noch mit den Timern, die verstehe ich derzeit noch nicht.
Ich möchte z.b. das jede Mikrosekunde eine Variable hochgezählt wird.
MFG
Michael Springwald
Michael Springwald
-
- 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: Plutos-AVR
Ach komm, das hast Du hier abgeschrieben: https://de.wikipedia.org/wiki/Zyklische ... zw._Delphi => CRC-16Mathias hat geschrieben:Ich habe es dir richtig übersetzt, so verstehst du vielleicht eher was dort passiert.

Da steht auch was zur Theorie, was da passiert und warum man das macht.