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?
If a post answers your question please mark it with the "Verify Answer" button
Search the wikis for common questions: CGT, BIOS, CCSv3, CCSv4Track a known bug with SDOWP. Enter the bug id in the "Find Record ID" box
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.