Hello,
In the project im involved in, we're using nxp product that runs FreeRTOS as os. As our application does not allocate dynamic memory using the ordinary mallocs, I want to remove the heap allocation that the linker puts in the binary.
The method for this is to put the relevant ldt file in the linkscripts folder, which I did- specifically by overriding the heap size to be zero. this works.
How ever, it will be better for me if I could just discard the symbol of the heap from the binary (heap_symbol which is set to _pvHeapStart) because otherwise this symbol gets its address, and it is possible to override memory using its address. My problem is that when im just discarding it I get references errors of gcc files (_cr_sbrk.c) expecting this reference.
I would like to ask for a help reaching my goal which is safely remove the heap allocation from the linker.
Thanks
已解决! 转到解答。
I just want to update that I found a good enough solution, based on this post: https://stackoverflow.com/questions/40130374/gcc-how-to-disable-heap-usage-entirely-on-an-mcu
(idea is to redirect dynamic memory allocation methods to unimplemented method, which leads to linker errors if one uses them)
I just want to update that I found a good enough solution, based on this post: https://stackoverflow.com/questions/40130374/gcc-how-to-disable-heap-usage-entirely-on-an-mcu
(idea is to redirect dynamic memory allocation methods to unimplemented method, which leads to linker errors if one uses them)
Hi @eaad ,
In case you want use FreeMarker Scripts or in general check if malloc() is still used, maybe this helps: https://mcuoneclipse.com/2022/11/06/how-to-make-sure-no-dynamic-memory-is-used/
Erich
If __sbrk is still referenced, it means that your application is still possibly calling malloc() or any other dynamic memory allocator.
I suggest you link with the heap in the linker script enabled and then use the Image Info to find out who is calling/using malloc and sbrk. Most likely it is a printf() somewhere in your code?