在C中初始化包含宏内数组的结构

时间:2015-04-18 14:11:03

标签: c arrays struct c-preprocessor

我正在为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%确定这是一个很好的编码实践。谢谢!

0 个答案:

没有答案