Hi Dave
The @ "FLASH" is only used for volatile consts.
The IAR (default) behavior is to put consts (both global and static) into Flash, although strictly the const keyword means that the variable has read-only attributes and not that it is located in a certain memory area (although embedded systems would normally work as if it were sicn eit makes sense).
Eg.
static const unsigned char usb_language_string[] = {4, DESCRIPTOR_TYPE_STRING, LITTLE_SHORT_WORD_BYTES(UNICODE_LANGUAGE_INDEX)};
static const unsigned char manufacturer_str[] = {10, DESCRIPTOR_TYPE_STRING, 'M',0, 'a',0, 'n',0, 'u',0};
static const unsigned char product_str[] = {16, DESCRIPTOR_TYPE_STRING, 'M',0, 'y',0, ' ',0, 'P',0, 'r',0, 'o',0, 'd',0};
static const unsigned char serial_number_str[] = {10, DESCRIPTOR_TYPE_STRING, '0',0, '0',0, '0',0, '1',0};
static const unsigned char config_str[] = {10, DESCRIPTOR_TYPE_STRING, 'C',0, 'o',0, 'n',0, 'f',0};
static const unsigned char interface_str[] = {8, DESCRIPTOR_TYPE_STRING, 'I',0, 'n',0, 't',0};
static const unsigned char *ucStringTable[] = {usb_language_string, manufacturer_str, product_str, serial_number_str, config_str, interface_str};
Here the map shows:
usb_language_string 0x00003d24
manufacturer_str 0x00003d28
product_str 0x00003d34
serial_number_str 0x00003d44
config_str 0x00003d50
interface_str 0x00003d5c
ucStringTable 0x1ffff11c
Notice that the arrays are all put into flash apart from the final one. I can't explain why there are some exeptions to the rule, whereby your particular case may be such an exception, for whatever reason.
It is probably best to contact IAR directly since I have also not been able to find a method to control the final few remaining exceptions. Fortunately it only affects very few such things as far as I have been able to see.
Regards
Mark
Kinetis: µTasker Kinetis support
KE: µTasker FRDM-KE02Z support / µTasker FRDM-KE02Z40M support / µTasker FRDM-KE06Z support
For the complete "out-of-the-box" Kinetis experience and faster time to market