我在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