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.

Variable memory allocation

Other Parts Discussed in Thread: MSP430F5510, TM4C1237H6PZ

Hi

Im doing an almighty battle with the compiler at the minute, having all sorts of issues but heres my most pressing issue.

Im using an MSP430F5510 and have the data sheet showing RAM at addresses 0x1C00 - 0x5BFF and Pheripherals at 0x0000 - 0x0FFF however im seeing global variables (static and non-static) been allocated in the address range 0x0000 - 0x00FF which the data sheet shows as reserved for extension.

Iv already had issues with the lack of auto-init of variables but all my fixes are broken as i expect to see variables allocated within the RAM map. I have tried forcing the allocation with

#pragma SET_DATA_SECTION(".RAM")

but this just seems to shift them into 0x0100 - 0x0FEF range which is the peripheral range. I have included my compiler and linker args as i suspect this is the problem as i have seen very strange behaviour with optimization with this compiler.

Compiler flags

-vmspx --abi=eabi -g --include_path="C:/ti/ccsv5/ccs_base/msp430/include" --include_path="C:/ti/ccsv5/tools/compiler/msp430/include" --define=__MSP430F5510__ --diag_warning=225 --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --no_high_level_opt --printf_support=minimal

LInker flags

-vmspx --abi=eabi -g --define=__MSP430F5510__ --diag_warning=225 --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --no_high_level_opt --printf_support=minimal -z -m"chEng.map" --stack_size=512 --heap_size=160 --use_hw_mpy=F5 -i"C:/ti/ccsv5/ccs_base/msp430/include" -i"C:/ti/ccsv5/tools/compiler/msp430/lib" -i"C:/ti/ccsv5/tools/compiler/msp430/include" --reread_libs --warn_sections --rom_model

  • Does your project have a linker command file (.cmd) included which gets used during the link step? It is this file that specifies the device memory map and also specifies where the different sections (code, data etc) get allocated. When you create a new project in CCS for MSP430F5510, a linker command file named lnk_msp430f5510.cmd should be automatically added. Can you check if this is the case for your project?

  • Thanks for the reply,

    I tracked the problem down to the output format, with it set to eabi it doesnt work, but does with legacy COFF.

    I have now seen somthing i didnt expect and thats if i declare a global variable i have to force the type def in the init or the who type is not set, e.g.

    static u16 aIndex         =  0x0000u;

    static u16 bIndex         = (u16) 0x0000u;

    aIndex will initilise to a random value normally 0x0200, bIndex inits to 0x0000. This occurs for all datatypes greater than a single byte.

  • The output format really shouldn't affect the allocation as long as there is a linker command file that specifies where the code and data need to go. If you have a test case that demonstrates a problem in EABI mode but not in COFF mode could you please attach it here so we can investigate it.

    Also for the variable typedef issue, if you can provide an example project that would be very helpful for us to look into it.

  • Hi JHough,

    I am using TM4C1237h6pz uc  I have to assign some structures a particular RAM address in CCS 5.2. How to do so and crosscheck it.

    Hope u can help me out