我在IAR Embedded workbench IDE中編寫了c代碼。我在頭文件中有以下內容。錯誤[Pe142]:表達式必須具有指針對象類型
typedef union {
uint8_t payload;
struct UBX_NAV_POSLLH nav_posllh;
struct UBX_NAV_STATUS nav_status;
struct UBX_NAV_DOP nav_dop;
struct UBX_NAV_SOL nav_sol;
struct UBX_NAV_VELNED nav_velned;
struct UBX_NAV_TIMEUTC nav_timeutc;
struct UBX_NAV_SVINFO nav_svinfo;
} UBXPayload;
struct UBXHeader {
uint8_t class;
uint8_t id;
uint16_t len;
uint8_t ck_a;
uint8_t ck_b;
};
struct UBXPacket {
struct UBXHeader header;
UBXPayload payload;
};
這裏是我的源文件:
static char *c_buffer
void myinit()
{
c_buffer= (char*)malloc(50);
}
int myfunc(uint8_t c, char *c_buffer)
{
static uint8_t rx_count = 0;
struct UBXPacket *ubx = (struct UBXPacket *)c_buffer;
for(int i=0; i<3; i++){
ubx->payload.payload[rx_count] = c; /* Error[Pe142]: expression must have pointer- to-object type */
rx_count++;
}
}
void main()
{
char mychar = 'h';
myinit();
myfunc(mychar, c_buffer);
}
同樣工會被定義爲寫入與ARM GCC編譯器編譯另一代碼示例如下。它很好地編譯了&。
typedef union {
uint8_t payload[0]; /* here [0] is placed */
struct UBX_NAV_POSLLH nav_posllh;
struct UBX_NAV_STATUS nav_status;
struct UBX_NAV_DOP nav_dop;
struct UBX_NAV_SOL nav_sol;
struct UBX_NAV_VELNED nav_velned;
struct UBX_NAV_TIMEUTC nav_timeutc;
struct UBX_NAV_SVINFO nav_svinfo;
} UBXPayload;
但在IAR C編譯器給出錯誤。有什麼建議嗎? 我不明白以下行
struct UBXPacket *ubx = (struct UBXPacket *)c_buffer;
正如你對答案的評論所證明的,這個問題並不完全準確。看起來你已經從原始代碼修改了聯合; *原始*代碼在GCC中編譯,但是這個代碼在*任何*編譯器中都不起作用。你應該詳細說明你的改變 - 或者更好,只是詢問原來的問題,而不是你有缺陷的解決方案。 – Clifford