Hallo,
ich verwende einen ATMega168 mit einem C-Projekt (Atmel Studio 6).
In meinem Quellcode verwende ich eine Variable
1 | static volatile uint8_t *buf = NULL;
|
Diese wird zuerst mit
auf einen Speicherbereich mit 35 Byte Größe festgelegt, und anschließend
mit
wieder freigegeben. Der Zeiger muss volatil sein, da einzelne Werte in
einem Interrupthandler verwendet werden. Das Casten im free-Aufruf
verhindert einen Compilerfehler.
Beim nächsten malloc() Aufruf
1 | wdt_enable(WDTO_250MS);
|
2 | buf = malloc(4);
|
3 | wdt_disable();
|
blockiert jedoch der malloc() Aufruf scheinbar, auch wenn der Parameter
viel kleiner ist, und die 35 Byte ja wieder freigegeben sein müssten.
Beim Blockieren mittels DebugWire bleibt die Ausführung auf der malloc()
Zeile stehen. Durch Hinzufügen der Watchdog Parameter zeigt sich, dass
der Aufruf auch ohne Debugging blockiert, denn der uC führt einen Reset
durch.
Habt ihr eine Idee was das Problem sein kann?
Danke im Voraus!