【发布时间】:2015-03-18 10:14:50
【问题描述】:
我目前正在研究嵌入式系统,并且我在板上有一个组件,它出现了两次。我想为组件创建一个 .c 和一个 .h 文件。
我有以下代码:
typedef struct {
uint32_t pin_reset;
uint32_t pin_drdy;
uint32_t pin_start;
volatile avr32_spi_t *spi_module;
uint8_t cs_id;
} ads1248_options_t;
这些都是硬件设置。我创建了这个结构的两个实例(每个部分一个)。
现在我需要在后台保留一组值。例如。我可以每秒从该设备读取值,并且我想保留最后 100 个值。我希望这些数据不能从我的组件的“外部”访问(只能通过我的组件中的特殊功能)。
我不确定如何在此处继续。我真的需要将数组作为结构的一部分吗?我想到的是做以下事情:
int32_t *adc_values; // <-- Add this to struct
int32_t *adc_value_buffer = malloc(sizeof(int32_t) * 100); // <-- Call in initialize function, this will never be freed on purpose
然而,我将能够从我不喜欢的代码中的任何地方(也从我的组件外部)访问我的 int32_t 指针。
这是唯一的方法吗?你知道更好的方法吗?
谢谢。
【问题讨论】:
-
标准警告:请do not cast
malloc()和C中的家人的返回值。 -
@JoachimPileborg 为什么无效?为什么不是不完整的结构类型?
-
如果你使结构不透明,那么只需使用特殊函数来设置结构中的字段。
-
使用不透明的指针来封装你的
struct,比如explained here -
@TomL。那你为什么不总是为 4 个 IC 预留空间,因为你的程序必须始终能够处理最坏的情况?