【发布时间】:2016-05-03 00:29:08
【问题描述】:
我有一大堆uint16_t。
它的大多数成员是uint16_t,但有些是int16_t,有些是uint8_t。
你会怎么处理?
顺便说一下,我试过了:
-
指针:
使用 2 个指针,一个
int16_t*和另一个uint8_t*,都初始化为数组的开头,以访问数组的成员int16_t和uint8_t。(最初可行,但后来在程序中更改了指针的值时遇到了问题,所以我不相信它。)
-
带有联合的类型定义。
在文件.h中:
typedef union { uint16_t u16[NO_OF_WORDS]; // As uint16_t int16_t s16[NO_OF_WORDS]; // As int16_t uint8_t u8[2 * NO_OF_WORDS]; // As uint8_t } ram_params_t; extern ram_params_t ram_params[];在文件.c 中:
ram_params_t ram_params[] = {0};(真的被炸了。)
-
铸造。
(我并没有走得太远。)
【问题讨论】:
-
如何知道哪些元素属于哪些类型?你能给我们展示一下选角的尝试吗?如果它们真的必须是单个数组,这似乎是最明智的方法。
-
你为什么要这样做?为什么不只拥有几个其他类型的变量?这似乎很容易出错,并且无法维护?
-
> 你为什么要这样做? -- 因为阵列(在嵌入式系统中)是与外界共享的。外部系统可以访问该阵列并且只能访问该阵列。数据种类繁多。
-
> 你怎么知道哪些元素属于哪些类型? -- 按索引。我知道索引 3 处的成员是 int16_t,索引 5 处的成员是一对字节。