Ich möchte ein Projekt mit GCC zu IAR-Compiler portieren, aber IAR beschwert sich auf mehrere Funktionen mit void * als formaler Parameter.Warum IAR-Fehler auf void *
struct
{
uint16_t ConnectionHandle;
uint8_t Reason;
}DisconnectParams;
der Funktionsprototyp ist
bool Bluetooth_HCI_SendControlPacket(BT_StackConfig_t* const StackState,
const uint16_t OpCode,
const uint8_t Length,
const void* Data);
und die Verwendung ist:
Bluetooth_HCI_SendControlPacket(StackState, (OGF_LINK_CONTROL | OCF_LINK_CONTROL_DISCONNECT), sizeof(DisconnectParams), &DisconnectParams);
beschweren Hier Fehler [Pe167]: Argument vom Typ "struct *" ist nicht kompatibel mit dem Parameter von Typ "void const *"
Und ein anderer Ort
static inline void SDP_WriteData8(void** BufferPos,const uint8_t Data)
{
*((uint8_t*)*BufferPos) = Data;
*BufferPos += sizeof(uint8_t);
}
Fehler [Pe852]: Ausdruck muss ein Zeiger auf einen vollständigen Objekttyp sein. Wie ich weiß, kann void * jeden Zeiger annehmen, Wie man den Code ändert, um diese Fehler zu entfernen? Vielen Dank!
Chris
Können Sie weitere Details zu IAR-Version und Projekteinstellungen angeben? Ich kann Ihr erstes Problem mit IAR 5.40 nicht replizieren. – tinman
Mein IAR ist EWARM 6.30.1, Einstellung ist C99 und erlauben VLA (variable Länge Array), aber die - vla scheint keine Wirkung, weil es immer noch beschweren, dass Ausdruck muss einen konstanten Wert haben, wenn ich eine variable Array definieren uint8_t Data DataLen]; – user1308274
Was ist das Zielgerät? –