Цитата(Gantz @ Feb 18 2009, 17:04)

Можно глянуть вашь пример. У меня такой же вопрос. А примера под CW нету. Покаместь мучаюсь.
Сложновато. Уже воткнул в проект и под фриртос. Вообщем ничего сложного.
Главное в выравниванием разобраться (у меня это функции USB_WriteEP и USB_ReadEP) и поправить некоторые непереносимые вещи на которые ругается компилятор.
Вообщем по большому счету это модули usbhw.cpp и модуль usbcore.cpp.
Основную загвоздку исправил так:
Код
DWORD USB_WriteEP (DWORD EPNum, BYTE *pData, DWORD cnt) {
DWORD n;
unsigned char masiv[4] __attribute__ ((aligned (32)));
USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_WR_EN;
TX_PLENGTH = cnt;
unsigned long i = 0;
for (n = 0; n < (cnt + 3) / 4; n++) {
masiv[i++] = *(pData+i);
masiv[i++] = *(pData+i);
masiv[i++] = *(pData+i);
masiv[i++] = *(pData+i);
TX_DATA = *((DWORD *)masiv);
i = 0;
pData += 4;
}
USB_CTRL = 0;
WrCmd(CMD_SEL_EP(EPAdr(EPNum)));
WrCmd(CMD_VALID_BUF);
return (cnt);
}
Как можно увидеть куча лишнего. Но чтобы красиво было нужно потратить время.
Если у кого-то найдется более изящное решение, просьба поделиться.