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 trapped by ILLEGAL_ISR when doing malloc()

Other Parts Discussed in Thread: TMS320F28335, CCSTUDIO

Hello

I'm implementing EtherCAT on DSP, with following setting:

  • CCS: v 3.3
  • Code Generation Tool: Slave Stack Code Tool v5.10
  • Development Chip: TMS320F28335

I'm having a problem when using malloc() to get some memory space for receiving data. When my program execute malloc(128), it will fall into ILLEGAL_ISR.

I think I give enough size to .esysmem. How can I fix this problem?

Following is how my linker being set

MEMORY
{
PAGE 0 :
   /* BEGIN is used for the "boot to SARAM" bootloader mode      */
   /* 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              */
   
   BEGIN      : origin = 0x000000, length = 0x000002     /* Boot to M0 will go here                      */
   BOOT_RSVD  : origin = 0x000002, length = 0x00004E     /* Part of M0, BOOT rom will use this for stack */               
   RAMM0      : origin = 0x000050, length = 0x0003B0

   RAML0      : origin = 0x008000, length = 0x001000    
   RAML1      : origin = 0x009000, length = 0x004000  //please aware the mapping overlap between PAGE0 and PAGE1
   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 : 
   RAMM1      : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
   RAML4      : origin = 0x00D000, length = 0x000C00    
   RAML5      : origin = 0x00DC00, length = 0x000C00    
   RAML6      : origin = 0x00E800, length = 0x000C00    
   RAML7      : origin = 0x00F400, length = 0x000C00

   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
   .cinit           : > RAML0,     PAGE = 0
   .pinit           : > RAML0,     PAGE = 0
   .switch          : > RAML0,     PAGE = 0

   xintffuncs       : LOAD = RAML1, 
                      RUN = ZONE7A, 
                      LOAD_START(_XintffuncsLoadStart),
                      LOAD_END(_XintffuncsLoadEnd),
                      RUN_START(_XintffuncsRunStart),
                      PAGE = 0
   
   .stack           : > RAMM1,     PAGE = 1
   .ebss            : > RAML4,     PAGE = 1
   .econst          : > RAML5,     PAGE = 1      
   .esysmem         : > RAMM1,     PAGE = 1

   IQmath           : > RAML1,     PAGE = 0
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD 
   IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD 
   FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD 
      
   DMARAML4         : > RAML4,     PAGE = 1
   DMARAML5         : > RAML5,     PAGE = 1
   DMARAML6         : > RAML6,     PAGE = 1
   DMARAML7         : > RAML7,     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
     
}

Your help would be much appreciated. 

Thanks a lot

Yi-Lin

  • Hi Yi-Lin,

    Check these links: www.google.co.in

    Regards,
    Gautam
  • Yi-Lin,

    Are you seeing any errors or warnings when building? Have you tried adjusting the esysmem size to something larger?

    As Gautam mentioned, there is several posts regarding malloc on the C2000 forum that may be useful to look at.

    Additional information on linkers: processors.wiki.ti.com/.../C28x_Compiler_-_Understanding_Linking

    Best Regards,
    Chris
  • Thanks for replying

    When I build my project, I will get a warning message:

    warning: creating ".sysmem" section with default size of 0x400; use the -heap

                           option to change the default size.

    And I meet an embarrassing problem that I can't open my CCS3.3 now.
    When I open CCS, it will get stuck at the splash after long time waiting, the icon of CCStudio Monitor will gray out.


    I installed the CCS on WinXP SP3 on VMware Player v6.0.4.
    Is there any suggestion to fix this?

  • Thanks for replying

    When I build my project, I will get a warning message:

    warning: creating ".sysmem" section with default size of 0x400; use the -heap

                          option to change the default size.

    And I meet an embarrassing problem that I can't open my CCS3.3 now.

    When I open CCS, it will get stuck at the splash after long time waiting, the icon of CCStudio Monitor will gray out.

    I installed the CCS on WinXP SP3 on VMware Player v6.0.4.

    Is there any suggestion to fix this?

  • Yes, you need to increase the heap size.
    As for your Splash screen issue check: e2e.ti.com/.../50284

    Regards,
    Gautam
  • Hello Gautam 

    Thanks for your replying.

    I succeed to open CCS by disconnecting my ICE(BH-USB-560v2) from my computer. Looks strange but it works...

    As suggested by Christopher, the illegal_ISR problem is solved after I give more space to .esysmem. 

    PAGE 1 : 
       RAMM1      : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
       RAMM2      : origin = 0x00D000, length = 0x000B60
       RAML4      : origin = 0x00DB60, length = 0x001000    
       RAML5      : origin = 0x00EB60, length = 0x001000    
       RAML6      : origin = 0x00FB60, length = 0x000250    
       RAML7      : origin = 0x00FDB0, length = 0x000250

    And refer to 

    http://e2e.ti.com/support/microcontrollers/c2000/f/171/p/438147/1570672

    I allocate same space for both .sysmem and .esysmem section

    .esysmem         : > RAMM1|RAMM2,     PAGE = 1
    .sysmem	         : > RAMM1|RAMM2,     PAGE = 1

    But the "creating ".sysmem" section with default size of 0x400;" warining still exist until I set a value to the Heap size in Build options.

    Since there is no error or warning occur and program works fine, do I need to set the Heap size in Build options same as .sysmem?

    Thanks a lot

  • user4467769 said:
    Since there is no error or warning occur and program works fine, do I need to set the Heap size in Build options same as .sysmem?

    Not required then!