gpt4 book ai didi

c - 在 C typedef 结构中声明具有不同大小的数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:48 25 4
gpt4 key购买 nike

我知道如何使用malloc 动态分配一个新数组。我想知道在这种情况下是否有办法避免这种情况:

#define RX_BUFFER_SIZE    256
#define TX_BUFFER_SIZE 128

typedef struct MyBuffer
{
volatile uint8_t RX[RX_BUFFER_SIZE];
volatile uint8_t TX[TX_BUFFER_SIZE];
volatile uint16_t RX_Head;
volatile uint16_t RX_Tail;
volatile uint16_t TX_Head;
volatile uint16_t TX_Tail;
} MyBuffer_t;

typedef struct MyChannel
{
// other stuff
MyBuffer_t buffer;
} MyChannel_t;

然后在我的代码中我创建了几个这样的变量:

MyChannel_t ch1;
MyChannel_t ch2;
MyChannel_t ch3;

但我想为每个变量设置不同大小的数组。在一个小集合中选择是可以的,即:

#define RX_BUFFER_SIZE_S    32
#define TX_BUFFER_SIZE_S 16

#define RX_BUFFER_SIZE_M 128
#define TX_BUFFER_SIZE_M 64

#define RX_BUFFER_SIZE_L 256
#define TX_BUFFER_SIZE_L 128

有没有办法使用malloc实现这个?

最佳答案

将您的缓冲区声明为指针:

typedef struct MyBuffer 
{
volatile uint8_t * RX;
volatile uint8_t * TX;
size_t rxSize;
size_t txSize;
volatile uint16_t RX_Head;
...

然后为缓冲区使用单独的静态分配,并使用它们来初始化您的对象。

volatile uint8_t ch1_rx_buffer[RX_BUFFER_SIZE_S];
volatile uint8_t ch1_tx_buffer[TX_BUFFER_SIZE_S];
MyChannel_t ch1 = {
.buffer = {
ch1_rx_buffer,
ch1_tx_buffer,
sizeof ch1_rx_buffer,
sizeof ch1_tx_buffer,
...
}
}

关于c - 在 C typedef 结构中声明具有不同大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53315755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com