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,
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 heap3 implementation too - it may result in memory fragmentation, and that could be the route of the problem. If that is the case then using heap4.c in its place should fix it.