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.

program will not fit into available memory. "IQmathTables" (TMS320F28335)

Other Parts Discussed in Thread: TMS320F28335, CONTROLSUITE

I am trying to write the Park transformation with using _IQsin function from IQmath for motor control with PWM.

I have the TMS320F28335 processor with board eZdsp F2812 and example Example_2833xEPwm3UpAQ.c

And when I add the _IQsin command in my programm I have the error:

Available memory ranges:
   IQTABLES     size: 0xb50        unused: 0xb50        max hole: 0xb50     
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD
warning: entry-point symbol other than "_c_int00" specified:  "code_start"
error: errors encountered during linking; "Example_2833xEPwmUpAQ.out" not
   built

As far as i understand i should to change the file 28335_RAM_lnk.cmd.
But unfortunatelly I am a not good specialist in programmig. Please help me, what should i write to 28335_RAM_lnk.cmd file that the IQTABLES have enough space for calculate _IQsin and _IQcos functions?


I am also trying to use 28335_IQmath_lnk.cmd but I have the same problem.

  • Hi,

    you can use the linker command file in controlsuite: C:\ti\controlSUITE\device_support\f2833x\v140\DSP2833x_common\cmd\28335_RAM_lnk.cmd

    I believe the IQtables are already in ROM on the 28335.
  • Yes, the IQtables in this file are in ROM memory.. I have already tried to use this file, but have the same problem.

    When I add for example this code:

    rx = _IQsin(_IQmpy(TWO_PI, Qk));

    I have the error :

    program will not fit into available memory.  placement with
       alignment/blocking fails for section "IQmathTables" size 0xf50 page 0.
       Available memory ranges:
       IQTABLES     size: 0xb50        unused: 0xb50        max hole: 0xb50     
       IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD

    Plese help, becose it's very difficult to find error without a good skills in programming. May be there are some examples with using _IQsin and _IQcos function?

    I am also tried to use example from sprc990:

    #include<IQmathLib.h>
    #define PI 3.14159
    _iq input, sin_out;
    void main(void )
    {
    /* 0.25 x PI radians represented in Q29 format */
    input=_IQ29(0.25*PI);
    sin_out =_IQ29sin(input);
    }

    but have the same problem.

    Add the linker file:

    MEMORY
    {
    PAGE 0 :
       /* BEGIN is used for the "boot to SARAM" bootloader mode      */
    
       BEGIN      : origin = 0x000000, length = 0x000002     /* Boot to M0 will go here                      */
       RAMM0      : origin = 0x000050, length = 0x0003B0
       RAML0      : origin = 0x008000, length = 0x004000
    /*   RAML1      : origin = 0x009000, length = 0x001000
       RAML2      : origin = 0x00A000, length = 0x001000
       RAML3      : origin = 0x00B000, length = 0x001000
    */
       ZONE7A     : origin = 0x200000, length = 0x00FC00    /* XINTF zone 7 - program space */
       CSM_RSVD   : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
       CSM_PWL    : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA            */
       ADC_CAL    : origin = 0x380080, length = 0x000009
       RESET      : origin = 0x3FFFC0, length = 0x000002
       IQTABLES   : origin = 0x3FE000, length = 0x000b50
       IQTABLES2  : origin = 0x3FEB50, length = 0x00008c
       FPUTABLES  : origin = 0x3FEBDC, length = 0x0006A0
       BOOTROM    : origin = 0x3FF27C, length = 0x000D44
    
    
    PAGE 1 :
       /* BOOT_RSVD is used by the boot ROM for stack.               */
       /* This section is only reserved to keep the BOOT ROM from    */
       /* corrupting this area during the debug process              */
    
       BOOT_RSVD  : origin = 0x000002, length = 0x00004E     /* Part of M0, BOOT rom will use this for stack */
       RAMM1      : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
       RAML4      : origin = 0x00C000, length = 0x004000
    /*   RAML5      : origin = 0x00D000, length = 0x001000
       RAML6      : origin = 0x00E000, length = 0x001000
       RAML7      : origin = 0x00F000, length = 0x001000
    */
       ZONE7B     : origin = 0x20FC00, length = 0x000400     /* XINTF zone 7 - data space */
    }
    
    
    SECTIONS
    {
       /* Setup for "boot to SARAM" mode:
          The codestart section (found in DSP28_CodeStartBranch.asm)
          re-directs execution to the start of user code.  */
       codestart        : > BEGIN,     PAGE = 0
       ramfuncs         : > RAML0,     PAGE = 0
    /*   .text            : > RAML1,     PAGE = 0  */
       .text            : > RAML0,     PAGE = 0
       .cinit           : > RAML0,     PAGE = 0
       .pinit           : > RAML0,     PAGE = 0
       .switch          : > RAML0,     PAGE = 0
    
       .stack           : > RAMM1,     PAGE = 1
       .ebss            : > RAML4,     PAGE = 1
    /*   .econst          : > RAML5,     PAGE = 1 */
          .econst          : > RAML4,     PAGE = 1
       .esysmem         : > RAMM1,     PAGE = 1
    
    /*   IQmath           : > RAML1,     PAGE = 0  */
         IQmath           : > RAML0,     PAGE = 0
       IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD
    
       /* Uncomment the section below if calling the IQNexp() or IQexp()
          functions from the IQMath.lib library in order to utilize the
          relevant IQ Math table in Boot ROM (This saves space and Boot ROM
          is 1 wait-state). If this section is not uncommented, IQmathTables2
          will be loaded into other memory (SARAM, Flash, etc.) and will take
          up space, but 0 wait-state is possible.
       */
       /*
       IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
       {
    
                  IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)
    
       }
       */
    
       FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
    
       DMARAML4         : > RAML4,     PAGE = 1
       DMARAML5         : > RAML4,     PAGE = 1
       DMARAML6         : > RAML4,     PAGE = 1
       DMARAML7         : > RAML4,     PAGE = 1
    
       ZONE7DATA        : > ZONE7B,    PAGE = 1
    
       .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used                    */
       csm_rsvd         : > CSM_RSVD   PAGE = 0, TYPE = DSECT /* not used for SARAM examples */
       csmpasswds       : > CSM_PWL    PAGE = 0, TYPE = DSECT /* not used for SARAM examples */
    
       /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
       .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD
    
    }