Hallo zusammen,
ich bin gerade dabei in meinem AVR-Basic-Interpreter
(http://www.mikrocontroller.net/articles/AVR_BASIC) die
Verwendungsmöglichkeit von Arrays zu implementieren. Dabei bin ich auf
eine kleine Merkwürdigkeit gestoßen, die ich mir nicht erklären kann:
Die Geschichte mit Arrays habe ich so implentiert, dass bei Auftreten
eines DIM-Befehls (Basic) via malloc() ein entsprechender
Speicherbereich geholt wird. Nach Beendigung des Basic-Programms wird
dieser via free() wieder freigegen. Funktioniert auch, aber...
Zur Überprüfung des Speicherverbrauchs habe ich in meinen Testprogrammen
ein paar Routinen eingebaut, die wie folgt funktionieren:
Beim Start des MC (nach Reset) wird der SRAM (von Heap-Start bis
RAM-Ende) mit einem festgelegten Muster initialisiert. Später zur
Laufzeit prüfe ich mit einer Funktion wieviel von dem Muster noch da
ist:
1 | unsigned short get_mem_unused (void)
|
2 | {
|
3 | unsigned short unused = 0;
|
4 | unsigned char *p = &__heap_start;
|
5 | do
|
6 | {
|
7 | if (*p++ != MASK) break;
|
8 | unused++;
|
9 | } while (p <= (unsigned char*) RAMEND);
|
10 | return unused;
|
11 | }
|
Nach der Verwendung von malloc()/free() ergibt diese Funktion 0 zurück.
Das kann ich mir nicht erklären. Kann mir jemand sagen warum das so ist?
Wenn malloc()/free() nicht verwendet werden, gibt obige Funktion
erwartete Werte zurück...
Grüße & Danke Uwe