Вопрос любителям и профессионалам MSPGCC. Решил перейти с asm на C, но груз старых привычек тянет вниз или назад?
Нужно разместить во флеш памяти программ строку, в конкретном случае строки дескрипторов USB.
На asm делается просто:
rseg CODE
Prod_id: db Dev_Desc-Prod_id
db 03 ; bDescriptorType
dw 'U','S','B','-','E','P','P',' '
dw 'C','o','n','v','e','r','t','e','r'
отлично компилируется и работает.
Нашел пример скачанный из сайта Philips
В начале обьявляют структуру:
typedef struct _USB_STRING_PRODUCT_DESCRIPTOR {
INT8 bLength;
INT8 bDescriptorType;
INT8 Product[30];
} USB_STRING_PRODUCT_DESCRIPTOR,*PUSB_STRING_PRODUCT_DESCRIPTOR;
За тем собственно наполняют ее:
code USB_STRING_PRODUCT_DESCRIPTOR strProduct =
{
sizeof(USB_STRING_PRODUCT_DESCRIPTOR),
USB_STRING_DESCRIPTOR_TYPE,
{
'U', 0,
'S', 0,
'B', 0,
'-', 0,
'I', 0,
'D', 0,
'E', 0,
' ', 0,
'A', 0,
'd', 0,
'a', 0,
'p', 0,
't', 0,
'e', 0,
'r', 0}
};
Заменил "code" на "const" , компилируется, но вместо обьявленных
ранее INT8 резервирует 2 байта под каждый символ.
Пришлось принудительно объявить приведение типов:
const USB_STRING_PRODUCT_DESCRIPTOR strProduct =
{
(INT8)sizeof(USB_STRING_PRODUCT_DESCRIPTOR),
(INT8)USB_STRING_DESCRIPTOR_TYPE,
{
(INT16) 'U','S','B','-','I','D','E',' ', \
'A','d','a','p', \'t','e','r'
}
};
Но в листинге нет этих строк, только в сгенерированом HEX и BIN.
Собственно вопрос:
Как "красиво" объявить строки в памяти программ и увидеть их в листинге в среде MSP GCC?
Спасибо за поддержку и отсутствие флейма :-)))