我有一个包含 320 位的连续内存区域,分为 10 个独立的“寄存器”。
创建内存区域后,我会取回第一个寄存器元素的地址。
此时,我想逻辑映射一个包含32位数字的高位和低位的32位结构数组,然后遍历数组,分别写入高位和低位。
我已经有一个函数可以使用位旋转方案将 32 位数字拆分并输入到两个 16 位部分。
我的问题是,将结构数组覆盖在连续区域上的最佳方法是什么。
我需要这样做的原因是我正在使用外部库与嵌入式设备通信,而该库没有 32 位的概念,即使底层设备将数据存储在 32 位寄存器中。
最佳答案
首先,确保您的结构是编译器表示的 32 位。检查 sizeof(struct xxx) == 4 并使用编译器打包选项直到它是(从技术上讲这确保 struct 是 4 个字符,但它应该足够好)。
第二种是只创建一个指向结构类型对象的指针,然后将内存块的地址分配给它。您将需要一个老式的类型转换操作来执行此操作。
类似的东西(注意高低顺序以及其中哪些字节因硬件而异)。
typedef struct {
short high;
short low;
} hilo;
hilo *registers = (hilo *) memPtr;
关于c++ - 如何访问一个 32 位寄存器数组和读/写 16 位高段和低段作为一个单独的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663814/