Я хочу, чтобы порт проекта с использованием gcc для компилятора IAR, но IAR жалуется на несколько функций, используя void * как формальный параметр.Почему IAR бросает ошибку на void *
struct
{
uint16_t ConnectionHandle;
uint8_t Reason;
}DisconnectParams;
прототип функции
bool Bluetooth_HCI_SendControlPacket(BT_StackConfig_t* const StackState,
const uint16_t OpCode,
const uint8_t Length,
const void* Data);
и использования является:
Bluetooth_HCI_SendControlPacket(StackState, (OGF_LINK_CONTROL | OCF_LINK_CONTROL_DISCONNECT), sizeof(DisconnectParams), &DisconnectParams);
Здесь жалуются ошибки [Pe167]: аргумент типа "STRUCT *" несовместима с параметром тип "void const *"
И еще одно место
static inline void SDP_WriteData8(void** BufferPos,const uint8_t Data)
{
*((uint8_t*)*BufferPos) = Data;
*BufferPos += sizeof(uint8_t);
}
Ошибка [Pe852]: выражение должно быть указателем на полный тип объекта. Как я знаю, void * может принимать любой указатель, Как изменить код, чтобы удалить эти ошибки? Благодаря!
Крис
Можете ли вы предоставить более подробную информацию о версии IAR и настройках проекта? Я не могу воспроизвести первую проблему с помощью IAR 5.40. – tinman
My IAR - EWARM 6.30.1, настройка C99 и разрешение VLA (массив переменной длины), но значение -vla кажется неэффективным, поскольку оно все еще жалуется, что выражение должно иметь постоянное значение, когда я определяю массив переменных uint8_t Data [ DataLen]; – user1308274
Что такое целевое устройство? –