This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28335 Limited RAM?

I am calculating some FFTs with the F28335 using single precision floating point. The problem is, the F28335 should have enough RAM (68KB) to calculate up to a 8192 point FFT (easily). Just testing the compiler, I globally declared a float array and it fails the build (not enough ram error) at around 2000 elements in the array. Can I dynamically allocate the ram and it'll be OK? Do I have some compiler settings or link files configured wrong? I appreciate the help, thanks!

Mike

  • are u using spectrum digital ezDSP kit? why don't just use external SDRAM to do it.

  • Without seeing your command file I am guessing slightly but your problem is likely to do with how the RAM is allocated.  The 68KB on the F28335 is grouped up into a number of smaller blocks which are mainly 8KB long (why you are getting the problem at 2k (4bytes*2k = 8k) ).  However if you use the command file well you can expand these blocks.

    Here is some example code below:

    For example you will likely see in your linker command file something like this:

       RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L1 */
       RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L1 */

    You can edit this to turn that one line into

    RAML6L7 : origin = 0x00E000, length = 0x002000 /* double the length */

    You can combine multiple blocks.  You may need to combine 4 of them to do your array.

    However you will also have to do a couple more things.  In your C code add this following line (this assumes your buffer is called FFTBuffer - replace with your name):

    #pragma DATA_SECTION(FFTBuffer, "buffers");

    This will tell the linker that you want a section called buffers.  In your command line add the following line:

     buffers         : > RAML6L7,     PAGE = 1

    These lines basically allocate your buffer to a longer piece of RAM.  If you want a very long piece of (slower) external RAM (im not sure if this needs additional setup as well) use this instead:

     buffers        : > ZONE7B,     PAGE = 1

    However you might have to increase the size of ZONE7B.

     

    Hopefully this helps.  If you are confused just ask me and I will try and clarify!

    Thanks

     

    Tim

  • Thank you, this has been very informative :) I appreciate the help!

     

    Mike