ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
6191
misyachniy (02.02.2004 14:27, просмотров: 860)
Вопрос любителям и профессионалам 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? Спасибо за поддержку и отсутствие флейма :-)))