Where is all the memory of my RCM 4300 gone?


I`m using a Rabbit 4300 board with a little webserver running on it.

Now my programm is growing a bit and I get errors compiling:

Out of Root Code Space and Out of Variable Data Space.

But for me it is not believable!
There should be as much as 1Mb of Ram + (512kB of BBRam) and 2Mb of Flash.
In the Information window of Dynamic C the total code size is 293400 Bytes and the total data size is 21510 Bytes.

So from my Point of view there should be lots of Memory left!

I have already tryed to enable seperate instruction and data spaces, but my Software is not working with this Option enabled.

So I’m a bit at a loss how to use all of the Memory and I hope anybody has a good hint for me.

Best Regards

Hello, In digi website there is a technical note " Rabbit Memory Usage Tips", that explains , how to use memory efficiently on Rabbit modules, pls go through this manual.
It will be helpful.


all your files such as image files , html… program… must
run from flash memory 512k. when you download your dynamic c code you will not see the true size of the data. The only way I could determine the size was by trial and error. The additional memory in your rabbit seems to me to be useless storage space since it can’t be loaded into flash.
Anyway I could never get any direction from Digi.

Some things to be aware of:

The .org file will provide lots of information on the code and data sizes
and can be a big help in seeing where the allocations are.

Setting separate I and D spaces usually improves root memory usage.

Adjusting ROOT_SIZE_4K can help with some root allocation issues particularly if you run out of root constant space.

The amount of root code and data can be adjusted by judicious use of the root qualifier.

The default code vs data allocation is usually about 50/50 but in many instances this is not the most efficient. Adjust XMEMCODE_SIZE define a memory layout tailored to your mix of code and data.

The extra memory in the FLASH above 512K can be used for storage, see the lib\rabbit4000\serialflash folder for associated libraries.

Forcing large data structures into BBRAM with the bbram qualifier can help if you have bbram to spare but does carry a small performance penalty as BBRAM is usually slower to access.

Getting the most out of the available memory can be a bit tricky as your programs grow but this is true of most embedded systems…