Anyone writing large projects with the ESP units in C (and probably in other languages without necessarily realising it) will have come across the problems of .TEXT memory. This is the RAM used to store functions.
Functions are stored in their own part of RAM called .TEXT memory and it is WAY too small. Now most of you will have made liberal use of the “ICACHE_FLASH_ATTR “ directive in your functions. This ensures that functions stay in FLASH until actually needed and this saves lots of .TEXT RAM – indeed without it, larger programs would be impossible.
Despite all of that I’ve been slowly running out, sitting at 7CFF (you can only go up to 8000) recently and when the latest API came out – that was it – over the top – dead.
So for a while I stuck with the previous SDK and eventually got onto Espressif.
They asked me for a .DUMP file – which of course I neither had nor understood and they suggested that in the project directory I type:
xtensa-lx106-elf-objdump -x -s app_0.out > app_0.dump
WELL I was convinced this was another Linux tool that would not work in Windows – but it DID and produced the English-readable file app_0.dump which tells you where all your functions are sitting.
They suggested I add the “ICACHE_FLASH_ATTR” to my EASYGPIO functions. Well of course as that was an existing library I’d not touched that – and sure enough – I got just enough memory back to be able to use the latest SDK!! I was now sitting at 7B52 on the latest SDK – not good – but better… and at least I was using the latest SDK. They then suggested I use “os_memcpy, os_memset, os_strcpy” instead of “memcpy, memset, strcpy” so I systematically went through all the code and did this.
On recompiling – I now find the .TEXT RAM sitting at 79C2, the lowest it has been for AGES – another 512 bytes back just by using their functions instead of the standard ones!
I’m making no claims about reliability as I’ve not given this a thorough test – but that is for me a very worthwhile improvement in memory. Of course that means a tiny slow-down as functions have to be pulled out of FLASH to use… What speed would we have gotten out of these devices if they’d just done the RAM differently. Still – given the price of ESP devices I suppose we can’t complain.