STM32 HardFaultException After certain period

irvind wrote on Thursday, January 20, 2011:


Currently I am using STM32 Cortex M3, compiler IAR 4.x & FreeRTOS v6.1.0.

I have a firmware that send some data through GSM module to PC.

Before I start implement FreeRTOS, everything worked properly.

After I implement FreeRTOS to my code, I facing HardFaultException problem after sending certain bytes of string. I try debug and narrow down the posibility so I have only 1 task running.

I found that if I send a long string which mean more bytes in 1 message, then it crash earlier. If I reduce the string size that I am sending per message, then it take longer time to crash.

Could anyone please guide me on this? If I need to clear any buffer etc? But this firmware running without RTOS and it work properly. I also tried to put enter critical before I do and strcpy or memcpy, I thought interrupt might causing this problem but still the same problem. I really run out of idea. So please give me a hand on this.

Thank you so much.

edwards3 wrote on Thursday, January 20, 2011:

To save Richard the trouble. Have you read number three of this faq?

irvind wrote on Friday, January 21, 2011:

yes. I read the FAQ before and also I bought their e-bbok. But I can’t find my problem related to any of the FAQ.

By the way, I found that it not caused by create string etc. It caused by the stack size I assigned to the task, before I post the previous thread. I set my task stack as 2048. Then today I tried to increase higher stack size to 3072 just in case overflow check failed to trigger. But it go worst, it crashed  faster than before. So I reduced my stack size to 1024, and it could run longer than before. But it still enter hardfaultexception at the end. Anyone have any idea that could solve this?


irvind wrote on Friday, January 21, 2011:

Problem solved.

Just in case anyone having this problem, I wrote down my problem and solution here hope it could help other.

When using FreeRTOS, instead of using malloc, we are using pvPortMalloc(). But I forgot to use vPortFree to free all memory which I am still using free function. So it crash when memory only alloc but not freed.