1

我有一个连续的内存区域,包含 320 位,分为 10 个独立的“寄存器”。

一旦我创建了内存区域,我就会得到第一个寄存器元素的地址。

此时,我想在逻辑上映射一个包含 32 位数字的高位和低位部分的 32 位结构数组,然后遍历该数组并分别写入高低段。

我已经有一个函数,可以使用位旋转方案将 32 位数字拆分并输入两个 16 位部分。

我的问题是,将结构数组覆盖在连续区域上的最佳方法是什么。

我需要这样做的原因是我正在使用外部库与嵌入式设备通信,而该库没有 32 位的概念,甚至底层设备都将数据存储在 32 位寄存器中。

4

1 回答 1

1

首先,确保您的结构是编译器表示的 32 位。检查 sizeof(struct xxx) == 4 并使用编译器打包选项直到它是(技术上这确保 struct 是 4 个字符,但它应该足够好)..

其次是创建一个指向结构类型对象的指针,然后为其分配内存块的地址。您将需要一个老式的类型转换操作来做到这一点。

类似的东西(注意高低的顺序以及其中的字节将因硬件而异)。

typedef struct {
   short high;
   short low;
} hilo;

hilo *registers = (hilo *) memPtr;
于 2012-12-01T21:23:46.943 回答