Difference between revisions of "AVR Programming/de"
Line 17: | Line 17: | ||
AVR unterstützt Fliesskommazahlen Hardwaremässig '''nicht'''.<br>Mit Arduino/AVR C++, kann man mit '''float''' rechnen, aber dies wird Softwaremässig emuliert. Ein '''double''' ist dort gleich wie ein '''float'''. | AVR unterstützt Fliesskommazahlen Hardwaremässig '''nicht'''.<br>Mit Arduino/AVR C++, kann man mit '''float''' rechnen, aber dies wird Softwaremässig emuliert. Ein '''double''' ist dort gleich wie ein '''float'''. | ||
+ | |||
+ | ==Rechnen mit Operatoren== | ||
+ | Der AVR ist ein schlechter Rechenknecht. Rechnen kann er nur mit Ganzzahlen.<br> | ||
+ | Die folgende Tabelle zeigt, was der AVR Hardwaremässig kann, alles andere muss der Compiler auf Softwarebasis emulieren.<br> | ||
+ | Als Beispiel '''3 * 4''' setzt der Compiler beim ATtiny etwa so um '''4 + 4 + 4'''. Bei gösseren Zahlen wird dies sehr langsam ! | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | !Operator !! ATtiny !! ATmega | ||
+ | |- | ||
+ | |style="text-align:center"|+ || Hardware || Hardware | ||
+ | |- | ||
+ | |style="text-align:center"|- || Hardware || Hardware | ||
+ | |- | ||
+ | |style="text-align:center"|* || Software || Hardware | ||
+ | |- | ||
+ | |style="text-align:center"|/ || Software || Software | ||
+ | |- | ||
+ | |} | ||
+ | Shift-Operatoren, wie '''shl''' und '''shr''' werden hervorragend unterstützt. | ||
==String== | ==String== |
Revision as of 17:38, 21 May 2018
│
Deutsch (de) │
English (en) │
Wichtige Hinweise zu AVR-Programmierung
Generell geht alles nicht, was dynamisch ist, zB. Classen, dynamische Arrays, dynamische Strings.
Integer
Der Standard-Integer ist nur 16Bit gross, somit wird nur ein Bereich von -32'768 bis +32'767 abgedeckt. Ansonsten muss man einen LongInt oder int32 nehmen.
Array
Es ist keine dynamische Array erlaubt.
Classen
Classen gehen nicht auf einem AVR, alternativ Object nehmen.
Fliesskommazahlen
Werden von FPC nicht unterstützt. Stand: 21.05.2018
AVR unterstützt Fliesskommazahlen Hardwaremässig nicht.
Mit Arduino/AVR C++, kann man mit float rechnen, aber dies wird Softwaremässig emuliert. Ein double ist dort gleich wie ein float.
Rechnen mit Operatoren
Der AVR ist ein schlechter Rechenknecht. Rechnen kann er nur mit Ganzzahlen.
Die folgende Tabelle zeigt, was der AVR Hardwaremässig kann, alles andere muss der Compiler auf Softwarebasis emulieren.
Als Beispiel 3 * 4 setzt der Compiler beim ATtiny etwa so um 4 + 4 + 4. Bei gösseren Zahlen wird dies sehr langsam !
Operator | ATtiny | ATmega |
---|---|---|
+ | Hardware | Hardware |
- | Hardware | Hardware |
* | Software | Hardware |
/ | Software | Software |
Shift-Operatoren, wie shl und shr werden hervorragend unterstützt.
String
AVR unterstützen nur ShortString, dies muss mit folgendem Compilerschalter eingestellt werden.
{$H-} // String = ShortString
Oder man deklariert den String so:
var
s0: String[100]; // Stringlänge 100 Zeichen.
s2: ShortString; // Stringlänge 255 Zeichen.
Assembler
Bei AVR ist auch Inline-Assembler möglich, dies funktioniert gleich, wie auf dem PC, der grosse Unterschied ist, das man AVR-Assembler verwenden muss.
In diesem Beispielen sieht man, das die Label anders als bei Intel deklariert werden. Der Labelbezeichner muss mit .Lxxx beginnen.
Assemblerblock:
procedure MyAsmProc;
begin
asm
.L2:
nop
jmp .L2
end;
end;
Komplette Assembler Procedure:
procedure MyAsmProc; assembler;
asm
.L2:
nop
jmp .L2
end;
Ungültiges Label
Falsche Bezeichnung, das es nicht mit .L beginnt.
asm
.ABC: // Syntax-Fehler !
...
end,
Einfacher Blinker in Assembler:
program Project1;
begin
asm
sbi 4, 5 // DDRD, Pin5 --> Output
// --- Hauptschleife
.Lloop:
sbi 5, 5 // PORTD, Pin5 --> On
ldi r20, 50 // 50ms
call .LDelay // Delay
cbi 5, 5 // PORTD, Pin5 --> Off
ldi r20, 250 // 250ms
call .LDelay // Delay
jmp .Lloop
// --- Delay
.LDelay:
.L1:
ldi r21, 16 // 16MHz
.L2:
ldi r22, 250
.L3:
nop
dec r22
brne .L3
dec r21
brne .L2
dec r20
brne .L1
ret
end;
end.
Siehe auch
- Übersichtseite AVR Embedded Tutorial
Autor: Mathias