Pat
С исходником MSD вместе идет core1.02
all
Люди я попробывал скомпилить под gcc/crossworks
Слегка опешил из-за этого в файле common.h в функции copy:
Код
((char *) pDest)++;
ругаеццо
Цитата
D:/prj/oscilloscope-sam7/../lib/at91_usb-cw/core/common.h:122: error: lvalue required as increment operand

Чо ему надо? Там же приведение к указателю на char есть. Я конечно могу в наглую еденичку прибавить, только это дичь какая-то.
Второй вопрос
каким образом прокатывает такое в файле usb.h:
Код
typedef struct _S_usb S_usb;
......
//идет определение типов типа такого
typedef void (*S_usb_reset)(const S_usb *);
//ну и потом таблица колбеков из такиз типов
//далее в том же файле
typedef struct _S_usb {
const S_usb_driver *pDriver; //!< Pointer to the low-level driver
S_usb_endpoint* const pEndpoints; //!< Endpoints list
unsigned int dNumEndpoints; //!< Number of endpoints in list
const S_usb_callbacks *pCallbacks; //!< Pointer to the callbacks
S_usb_request* const pSetup; //!< \brief Pointer to the last
//!< received SETUP packet
volatile unsigned int* const pState; //!< Current state of the device
} S_usb;
Копилялка естественно ругаецца на переопределение типа. Нужна такая фича для кривого рекурсивного определения типов данных, откуда интересно ее взяли и как с этим бороться?
Второе победилось убиванием второго typedef и оставление голого struct