我想將一個使用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]:的類型 「結構*」 的說法是與參數不相容鍵入「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 2012-04-02 15:00:21
我的IAR是EWARM 6.30.1,設置爲C99並允許VLA(可變長度數組),但-vla似乎沒有效果,因爲它仍然抱怨當我定義一個變量數組時,表達式必須有一個常量值uint8_t Data [ DATALEN]; – user1308274 2012-04-02 15:11:53
什麼是目標設備? – 2012-04-02 15:57:15