Difference between revisions of "AVR Programming/de"

From Lazarus wiki
Jump to navigationJump to search
m
Line 18: Line 18:
 
==String==
 
==String==
 
AVR unterstützen nur '''ShortString''', dies muss mit folgendem Compilerschalter eingestellt werden.
 
AVR unterstützen nur '''ShortString''', dies muss mit folgendem Compilerschalter eingestellt werden.
<syntaxhighlight lang="pascal">
+
<syntaxhighlight>
 
{$H-}
 
{$H-}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Oder man deklariert den String so:
 
Oder man deklariert den String so:
<syntaxhighlight lang="pascal">
+
<syntaxhighlight>
 
var
 
var
 
   s : String[100]; // Stringlänge 100 Zeichen.
 
   s : String[100]; // Stringlänge 100 Zeichen.
Line 32: Line 32:
  
 
===Assemblerblock:===
 
===Assemblerblock:===
<syntaxhighlight lang="pascal">
+
<syntaxhighlight>
 
procedure MyAsmProc;
 
procedure MyAsmProc;
 
begin
 
begin
Line 44: Line 44:
  
 
===Komplette Assembler Procedure:===
 
===Komplette Assembler Procedure:===
<syntaxhighlight lang="pascal">
+
<syntaxhighlight>
 
procedure MyAsmProc; assembler;
 
procedure MyAsmProc; assembler;
 
asm
 
asm
Line 55: Line 55:
 
===Ungültiges Label===
 
===Ungültiges Label===
 
Falsche Bezeichnung, das es nicht mit '''.L''' beginnt.
 
Falsche Bezeichnung, das es nicht mit '''.L''' beginnt.
<syntaxhighlight lang="pascal">
+
<syntaxhighlight>
 
asm
 
asm
 
   .ABC:  //  Syntax-Fehler !
 
   .ABC:  //  Syntax-Fehler !
Line 63: Line 63:
  
 
===Einfacher Blinker in Assembler:===
 
===Einfacher Blinker in Assembler:===
<syntaxhighlight lang="pascal">
+
<syntaxhighlight>
 
program Project1;
 
program Project1;
 
begin
 
begin

Revision as of 00:13, 12 March 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

Fliesskommazahlen sollten wen möglich vermieden werden, da der AVR dies Hardwaremässig nicht unterstützt.

String

AVR unterstützen nur ShortString, dies muss mit folgendem Compilerschalter eingestellt werden.

{$H-}

Oder man deklariert den String so:

var
  s : String[100]; // Stringlänge 100 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

Autor: Mathias