Speicherbelegung anzeigen auf Adafruit Feather M0 (Zero)

Hallo zusammen,

versuche erfolglos die Speicherbelegung zu bestimmen. Nutze den Adafruit Feather M0 mit ATSAMD21G18 ARM Cortex M0 processor (gleicher wie im Arduino Zero).

Habe bisher:

→ Error compiling

Hat jemand n Idee woran es liegen kann? Abhilfe?
Besten Dank! :slight_smile:

Fehlermedung:
Arduino: 1.8.5 (Windows 7), Board: “Adafruit Feather M0”

libraries\MemoryFree-master\MemoryFree.cpp.o: In function `freeListSize()’:

C:\Users\BenutzerEliteBook\Documents\Arduino\libraries\MemoryFree-master/MemoryFree.cpp:37: undefined reference to `__flp’

libraries\MemoryFree-master\MemoryFree.cpp.o: In function `freeMemory’:

C:\Users\BenutzerEliteBook\Documents\Arduino\libraries\MemoryFree-master/MemoryFree.cpp:52: undefined reference to `__brkval’

C:\Users\BenutzerEliteBook\Documents\Arduino\libraries\MemoryFree-master/MemoryFree.cpp:52: undefined reference to `__heap_start’

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Adafruit Feather M0.

This report would have more information with
“Show verbose output during compilation”
option enabled in File → Preferences.

Hier de Code:

 #include <MemoryFree.h>

// On Arduino Duemilanove with ATmega328:
//
// Reported free memory with str commented out:
// 1824 bytes
//
// Reported free memory with str and Serial.println(str) uncommented:
// 1810
//
// Difference: 14 bytes (13 ascii chars + null terminator)

// 14-bytes string
//char str[] = "Hello, world!";

void setup() {
    Serial.begin(115200);
}

void loop() {
    //Serial.println(str);

    Serial.print("freeMemory()=");
    Serial.println(freeMemory());

    delay(1000);
}

MemoryFree ist offensichtlich nicht für diesen board Typ vorgesehen.

Im playground gibt auch eine andere Funktion (availableMemory), die nur auf der Existenz der Funktion malloc basiert. Musst du evtl. mit größerem Anfangswert starten.

Hi

Kann man nicht mit malloc (nahezu beliebig) große Happen 'beantragen', wenn's funktioniert hat, wieder frei geben und den Wert anzeigen, sonst den Happen verkleinern?

Wobei Da ggf. Interrupts gesperrt sein sollten, damit Niemand sonst Speicher 'beantragt', Den Er dann ggf. nicht bekommen kann. (sofern der Arduino sich zu Laufzeiten mit so Was rumschlägt - wenn's der Compiler tut, ist's während des Lauf eh zu spät)

MfG

@postmaster : gute Idee. Schau mal in meinem Link die Funktion availableMemory an. Die verkleinert einen Anfangswert so lange, bis malloc damit Erfolg hat, und gibt dieses größtmögliche Stück natürlich auch wieder frei.

Hi

Verdammt - hätte wohl früher bei Arduino anfangen sollen ;) Die dort erwähnten Stabilitäts-Probleme sollten sich mit CLI und STI erschlagen lassen * denk *.

MfG