Скомпилировал проект исходный USB-HID на GCC , прошил работает.
Перевел в IAR без ошибок, только с варнингами.
Работает не корректно.
Нашел участок кода который по моему мнению ответсвенен за это.
В "h" файле упреждающее объявление структуры
typedef struct _S_usb 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 *pSetup; //!< \brief Pointer to the last
//!< received SETUP packet
volatile unsigned int* const pState; //!< Current state of the device
} S_usb;
При компиляции на упреждающее такое сообщение:
Warning[Pe301]: typedef name has already been declared (with same type) D:\HID\usb.h 935
А при обращении к членам структурам, уже вторичный/"наследственный"
return &pUsb->pEndpoints[bEndpoint];
Warning[Pa039]: use of address of unaligned structure member D:\HID\usb.h 983
Ссылки в структурах перекрестные, поэтому без упреждающего объявления не обойтись.
Как разрулить ситуацию?
Спасибо.