AVR und dynamischer Speicher

Antworten
Mathias
Beiträge: 6710
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

AVR und dynamischer Speicher

Beitrag von Mathias »

Ich habe gerade folgendes Programm auf einem Arduino Mega getestet. Der Mega hat ein AVR.
Dieses Programm läuft.

Code: Alles auswählen

void setup() {
  Serial.begin(9600);

  int *array;
  int size = 10;

  array = (int *)malloc(size * sizeof(int));

  for (int i = 0; i < size; i++) {
    array[i] = i;
  }

  for (int i = 0; i < size; i++) {
    Serial.println(array[i]);
  }

  free(array);
}

void loop() {
}
Da habe ich dies in Lazarus ausprobiert.
Dies alles lässt sich kompilieren.

Code: Alles auswählen

var
  a: array of byte;
  pi: PInteger;
  s: ansistring;

begin
  SetLength(a, 123);
  New(pi);
  Dispose(pi);
  getmem(pi, 4);
  freemem(pi);
  s := '123456'; 
  PORTB:=byte(s[2]);;
Habe ich das falsch in Erinnerung, das der AVR keine dynamische Speicherverwaltung kann ?
Oder wurde da etwas an den Compilern angepasst ?

So wie es scheint gehen jetzt auch Ansistringm, musste man da früher nicht zwingend einen shortstring nehmen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 904
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: AVR und dynamischer Speicher

Beitrag von PascalDragon »

Mathias hat geschrieben: Mi 4. Dez 2024, 15:00 Habe ich das falsch in Erinnerung, das der AVR keine dynamische Speicherverwaltung kann ?
Der RTL für AVR kann dynamische Speicherverwaltung, du musst aber auch einen Heap registrieren und ihm Speicher zuweisen, damit du auch darauf zugreifen kannst. Siehe auch hier.
FPC Compiler Entwickler

Antworten