gpt4 book ai didi

c - 将两个 C 结构打包成一个 uint8_t 指针以写入 DataFlash

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:09 25 4
gpt4 key购买 nike

我有两个 C 结构需要保存到 DataFlash (AT45) 的内存块中。我可以通过以下方式轻松保存一个这样的结构:

对于一个结构

struct_name a;
struct_name * data;
data = &a;
struct_name read_buffer;

flash_write( &write_address, (uint8_t *)data, sizeof(a) ); //pack
flash_read( &read_address, (uint8_t *)read_buffer, sizeof(a) ); //unpack

一个结构的打包和解包(没有填充)很容易。如果我要打包两个结构,我该怎么做?

对于两个结构

struct_name1 a;
struct_name2 b;
/** Pack them into one and pass reference to flash_write method */
/** Also how do I unpack */

我试图拥有一个 struct,它既有 struct_name1 又有 struct_name2。但对如何去做感到困惑。

最佳答案

如果两个结构都可以是数组的成员,那将是微不足道的:

struct_name both[2];  // both[0] is a and both[1] is b
// store data in both[0] and both[1]
...

struct_name read_buffer[2];
flash_write( &write_address, (uint8_t *)both, sizeof(both) ); //pack
flash_read( &read_address, (uint8_t *)read_buffer, sizeof(read_buffer) ); //unpack

如果它们最初不是同一个数组的成员,您可以复制它们:

struct_name both[2];
both[0] = a;
both[1] = b;

struct_name read_buffer[2];
flash_write( &write_address, (uint8_t *)both, sizeof(both) ); //pack
flash_read( &read_address, (uint8_t *)read_buffer, sizeof(read_buffer) ); //unpack

如果它们是不同的结构,只需使用一个结构作为聚合,如 notan 的回答所示。

关于c - 将两个 C 结构打包成一个 uint8_t 指针以写入 DataFlash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com