C 指针指向不同大小的arr的结构
学习ANSI C(嵌入式,因此malloc已退出)。我无法理解如何使用不同大小的N个缓冲区(共享同一个结构),至少在没有编译器警告的情况下:C 指针指向不同大小的arr的结构,c,embedded,C,Embedded,学习ANSI C(嵌入式,因此malloc已退出)。我无法理解如何使用不同大小的N个缓冲区(共享同一个结构),至少在没有编译器警告的情况下: typedef struct Ringbuffer { uint8_t wrIdx; uint8_t lag; //obvious, but with fixed size: char buffer[32]; //what I'd like uint8_t buffLength; char *buffer; } Ringbuff
typedef struct Ringbuffer {
uint8_t wrIdx;
uint8_t lag;
//obvious, but with fixed size:
char buffer[32];
//what I'd like
uint8_t buffLength;
char *buffer;
} Ringbuffer;
//By concept...
Ringbuffer myRBs[3];
char rs485out[64];
char rs485in[16];
myRBs[0].buffLength=64;
myRBs[0].buffer = &rs485out;
myRBs[1].buffLength=16;
myRBs[1].buffer = &rs485in;
调试时,代码似乎正常工作,但我收到GCC编译器警告:
# warning: assignment from incompatible pointer type at ( .. = &rs485out)
我做错了吗?警告可修复吗?您不需要
&
。当数组用作右值时,它将成为指向其第一个元素的指针。我们也要这样做:
myRBs[0].buffer = rs485out;
您不需要
&
。当数组用作右值时,它将成为指向其第一个元素的指针。我们也要这样做:
myRBs[0].buffer = rs485out;
此外,如果您担心在嵌入式环境中做一些“不好”的事情,您也不会担心。在这里,为指针分配固定大小的缓冲区的方法正是嵌入式环境中的想法。此外,如果您担心在嵌入式环境中做一些“不好”的事情,您也不会担心。您在这里为指针分配固定大小缓冲区的方法正是嵌入式环境中的想法。您最好这样分配缓冲区长度:
myRBs[0]。buffLength=sizeof(rs485out)代码>。嵌入式==无malloc不是给定的-它完全取决于平台和应用程序需求;这需要更多的关注和对可能后果的理解。嗨,克利福德,你说得对。然而,还有DO-178B。在avrfreaks处的CU,;-)DO-178B法规遵从性将是我提到的应用程序要求之一,所以我想我涵盖了这一点?此外,DO-178B可能在任何情况下都会排除代码中的幻数。您最好这样分配缓冲区长度:myRBs[0]。buffLength=sizeof(rs485out)代码>。嵌入式==无malloc不是给定的-它完全取决于平台和应用程序需求;这需要更多的关注和对可能后果的理解。嗨,克利福德,你说得对。然而,还有DO-178B。在avrfreaks处的CU,;-)DO-178B法规遵从性将是我提到的应用程序要求之一,所以我想我涵盖了这一点?此外,DO-178B在任何情况下都可能排除代码中的幻数。