我正在为MSP430项目编写一些代码,并且在宏中初始化结构时遇到了一些麻烦。结构是缓冲结构:
struct Buffer{
unsigned int size;
unsigned int start;
unsigned int end;
unsigned int count;
unsigned char *data;
};
void buffer_init(struct Buffer *buffer, unsigned char *buffer_data, unsigned int size)
{
buffer->size = size;
buffer->start = 0;
buffer->end = 0;
buffer->count = 0;
buffer->data = buffer_data;
}
我一直很好地创建和初始化一个数组,如下所示(数组放在内存中的某个部分):
struct Buffer stream1_buffer;
#pragma DATA_SECTION(stream1_buffer_data, ".fram_vars")
static unsigned char stream1_buffer_data[512];
void init(void) {
buffer_init(&stream1_buffer,stream1_buffer_data,sizeof(stream1_buffer_data));
}
但是,我现在需要创建一个可变大小的缓冲区数组,这些缓冲区具有更多信息,例如通道编号和采样率。所以我希望能够在宏中初始化一个缓冲区,这样我就可以轻松地创建一个名为Stream的新结构数组,其中包含一个缓冲区。
我尝试过以下操作,但是测试代码没有提供与正常初始化缓冲区结构时相同的结果。
#define def_Buffer(name,length) \
static unsigned char name##_buffer_data[length]; \
static struct Buffer name##_buffer = { \
.size=length, \
.start=0, \
.end=0, \
.count=0, \
.data=(unsigned char *) name##_buffer_data \
}
有关如何进行的任何建议?我甚至不能100%确定这是一个很好的编码实践。谢谢!