【发布时间】:2018-11-15 09:03:46
【问题描述】:
我知道如何使用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,那么您可以。
-
我想为每个声明的
MyChannel_t设置大小。 -
你可以,如果你按照我的建议在不同的源文件中声明它们。否则是不可能的。
-
旁注:您的
MyBuffer_t实际上应该命名为My2Buffers_t。我建议在结构中只使用单个缓冲区、头部和尾部,然后创建相同类型的不同 RX 和 TX 实例。