This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

uLink2 initialization file - map command?

Hi

I am using a cortex m3 arm from microsemi and I am trying to get the uLink2 debugger to load and debug my code. I have the standard on board 64K of nvm (addr 0) which is only good for start up really and 2GB of DDR RAM memory (0xA0000000) where my application will run.

I have tried to tell the debugger about this RAM memory that starts at 0xA0000000 with the following debugger initialization file but it seems to be totally ignoring it and giving me a error 129: MapMem - map size truncated to 128MB. If i try to load the symbols after this completes whatever it is doing, the uVision/uLink2 IDE hangs and I have to kill it.

RESET MAP
MAP  0xA0000000, 0xA07FFFFF  READ WRITE EXEC
MAP  0xA0800000, 0xA0FFFFFF  READ WRITE EXEC
MAP  0xA1000000, 0xA17FFFFF  READ WRITE EXEC
MAP  0xA1800000, 0xA1FFFFFF  READ WRITE EXEC

Does anyone ideas as to what I have done wrong or what I can do to allow my code to be loaded?

  • Maybe ask Keil support what to do when they complain about 128MB limits and real-world systems has more than 128MB of memory.

  • Hi

    Yes, I did actually try that for the past 2+ weeks and I still do not have answer from them which is why I am reaching out to the community. I've gone back and forth with them (slowly) but no explanation why this is happening or how to fix it. They says that the MAP command is what to do but it is not working.

    I don't know why I am not getting a answer to this question. Its there product. They created it and should know how it works.

    So my development is stopped until I get make this work.

  • I really can't help out here.

    I only work with small ARM processors using with the Keil tools.

    For more powerful ARM chips, I instead run Linux and use gcc to build everything.

    So I have never been even close to any 128MB limit with MDKARM.

  • I appreciate your at least looking at my issue. I see that you help a lot of people on the forum and to me that shows what I great guy/engineer you are because I know it takes time to do. I hope you keep doing it because I am learning a lot from your posts.

    This is my first experience with a ARM processor so I have had to try to how it works quickly because of the crazy delivery schedule. It doesn't help when the tools don't work right. :-(

    The size is not due to my code being HUGE but that there are a lot of very big data structures to hold MBs of data as well as ZI data.

    This is why my memory map that is creating this 128MB truncation. The MAP directive is suppose to tell the debugger about he extra memory past 128MB but its not working

     Load Region FLASH_LOAD (Base: 0x00000000, Size: 0x00025848, Max: 0x00080000, ABSOLUTE, COMPRESSED[0x00025124])
    
        Execution Region ER_RO (Base: 0x00000000, Size: 0x00000908, Max: 0x00008000, ABSOLUTE)
    
        Base Addr    Size         Type   Attr      Idx    E Section Name        Object
    
        0x00000000   0x00000188   Data   RO         2881    RESET               M2S050T_MSS_CM3_hw_platform.lib(startup_m2sxxx.o)
        0x00000188   0x00000008   Code   RO         3102  * !!!main             c_w.l(__main.o)
        0x00000190   0x00000034   Code   RO         3741    !!!scatter          c_w.l(__scatter.o)
        0x000001c4   0x0000005a   Code   RO         3739    !!dczerorl2         c_w.l(__dczerorl2.o)
        0x0000021e   0x00000002   PAD
        0x00000220   0x0000001a   Code   RO         3743    !!handler_copy      c_w.l(__scatter_copy.o)
        0x0000023a   0x00000002   PAD
        0x0000023c   0x0000001c   Code   RO         3745    !!handler_zi        c_w.l(__scatter_zi.o)
        0x00000258   0x000002fc   Code   RO         2611    .text               M2S050T_MSS_CM3_hw_platform.lib(system_m2sxxx.o)
        0x00000554   0x000000e8   Code   RO         2882    .text               M2S050T_MSS_CM3_hw_platform.lib(startup_m2sxxx.o)
        0x0000063c   0x00000038   Code   RO         2951    .text               M2S050T_MSS_CM3_hw_platform.lib(low_level_init.o)
        0x00000674   0x0000010c   Code   RO         3420    .text               M2S050T_MSS_CM3_hw_platform.lib(retarget.o)
        0x00000780   0x0000000a   Ven    RO         3747    Veneer$$Code        anon$$obj.o
        0x0000078a   0x0000000a   Ven    RO         3748    Veneer$$Code        anon$$obj.o
        0x00000794   0x0000010e   Data   RO         1544    .constdata          sys_config.o
        0x000008a2   0x00000014   Data   RO         3422    .constdata          M2S050T_MSS_CM3_hw_platform.lib(retarget.o)
        0x000008b6   0x00000002   PAD
        0x000008b8   0x00000050   Data   RO         3737    Region$$Table       anon$$obj.o
    
    
        Execution Region ARM_LIB_HEAP (Base: 0x0af00000, Size: 0x00080000, Max: 0x00080000, ABSOLUTE)
    
        Base Addr    Size         Type   Attr      Idx    E Section Name        Object
    
        0x0af00000   0x00080000   Zero   RW            2    ARM_LIB_HEAP.bss    anon$$obj.o
    
    
        Execution Region ER_RW (Base: 0x20000000, Size: 0x00000060, Max: 0x00008000, ABSOLUTE)
    
        Base Addr    Size         Type   Attr      Idx    E Section Name        Object
    
        0x20000000   0x0000001c   Data   RW         2612    .data              M2S050T_MSS_CM3_hw_platform.lib(system_m2sxxx.o)
        0x2000001c   0x00000004   Data   RW         3423    .data               M2S050T_MSS_CM3_hw_platform.lib(retarget.o)
        0x20000020   0x00000040   Zero   RW         3421    .bss                M2S050T_MSS_CM3_hw_platform.lib(retarget.o)
    
    
        Execution Region STACKS (Base: 0x20001000, Size: 0x00003800, Max: 0xffffffff, ABSOLUTE, UNINIT)
    
        Base Addr    Size         Type   Attr      Idx    E Section Name        Object
    
        0x20001000   0x00003800   Zero   RW         2879    STACK               M2S050T_MSS_CM3_hw_platform.lib(startup_m2sxxx.o)
    
    
        Execution Region ER_DDR (Base: 0xa0000000, Size: 0x0cc3fde8, Max: 0x20000000, ABSOLUTE, COMPRESSED[0x000005a8])
    
        0xa0000000   0x00000000   Code   RO         3050    .ARM.Collect$$_printf_percent$$00000000  c_w.l(_printf_percent.o)
    .
    .
    .
    .
        0xacc3fde8   0x00000000   Zero   RW         2880    HEAP                M2S050T_MSS_CM3_hw_platform.lib(startup_m2sxxx.o)
    
    

  • I'm confused, you mean 2 Gbit, 256 MByte, because 2GB isn't going to fit at 0xA0000000, and 256MB is 0x10000000

    The 128MB is a HARD limit Keil has used, only they can provide an answer to why that number was chosen.

    RESET MAP
    MAP  0xA0000000, 0xA7FFFFFF  READ WRITE EXEC
    MAP  0xA8000000, 0xAFFFFFFF  READ WRITE EXEC
    

    7FFFFF -> 8MB-1
    7FFFFFF -> 128MB-1

  • Yes you are correct. Keil tech support told me that I only needed/should MAP the memory I was actually using and not all of the available memory which is what I tried to do in 128MB chunks.

    I had tried this first and it didn't make any difference.

    RESET MAP
    MAP 0xA0000000, 0xA7FFFFFF READ WRITE EXEC
    MAP 0xA8000000, 0xAFFFFFFF READ WRITE EXEC

    What I posted was not correct. It was another desperate attempt to get this to work with a smaller build I made. Sorry about the confusion.

    Does Kiel monitor this forum at all? I am not getting much help from tech support on this

    I have a case open for past 2 or 3 weeks but still have not gotten an answer as to why MAP is not working.

  • This is not an official support venue, staff have been known to post here, and lurk.