# Freeing memory before the system reset

**URL:** <https://forums.freertos.org/t/freeing-memory-before-the-system-reset/5540>\
**Category:** Kernel\
**Created:** [December 6, 2013, 9:18am UTC](https://forums.freertos.org/t/freeing-memory-before-the-system-reset/5540 "2013-12-06T09:18:08Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![system](https://d2v6vdsk2p900z.cloudfront.net/original/1X/7fc8fdb729c645aab5b20282bbe34e57cb407be6.jpeg) [@system](https://forums.freertos.org/u/system)\
**Post date:** [December 6, 2013, 9:18am UTC](https://forums.freertos.org/t/freeing-memory-before-the-system-reset/5540/1 "2013-12-06T09:18:08Z")

</div>

**[ankumarank](https://sourceforge.net/u/ankumarank/)** wrote on [Friday, December 06, 2013](https://sourceforge.net/p/freertos/discussion/382005/thread/f62843e4/#386b):

Hi,

I am trying to use FreeRTOS on one of our boards which has Microblaze on it. We also have a watchdog in our board, to protect from software hang scenarios.

I observed that, when watchdog issues reset, all the tasks are getting killed. However, the stack that got created for these tasks, is not getting freed/ the malloc pointer is not coming back to the beginning of the heap region. This I confirmed by checking the pointer “pvReturn” in heap\_3.c file.

When the tasks get deleted, does the FreeRTOS free the associated memories of a task? If not, what is best way to free the memory?

Any help in this regard would be of great help. Thanks in Advance,

-Naveen.

---

<div class="post-metadata">

**Author:** ![rtel](https://d3iykfbgfh8zhg.cloudfront.net/user_avatar/forums.freertos.org/rtel/32/31_2.png) [@rtel](https://forums.freertos.org/u/rtel)\
**Post date:** [December 6, 2013, 10:08am UTC](https://forums.freertos.org/t/freeing-memory-before-the-system-reset/5540/2 "2013-12-06T10:08:41Z")

</div>

**[rtel](https://sourceforge.net/u/rtel/)** wrote on [Friday, December 06, 2013](https://sourceforge.net/p/freertos/discussion/382005/thread/f62843e4/#25f7):

What is the watchdog exactly? If it is a hardware watchdog that is hard resetting the hardware then the C start up code should execute again and re-initialise all your memory just as if you turned the system on the first time.

If it is a soft reset that is just restarting the program from main() then you will have to re-initialise the memory yourself. That would be true for all your application code, not just FreeRTOS.

If your watchdog is a pure software routine that is deleting the tasks then the memory allocated to the tasks is freed by the idle task so you must let the idle task run for a bit before restarting.

Be careful of your heap\_3 implementation too - it may result in memory fragmentation, and that could be the route of the problem. If that is the case then using heap\_4.c in its place should fix it.

Regards.
