问题描述
目前希望通过SDK库中的FDS进行存储一包数据,对一个结构体有点迷惑,如下:
/**@brief A record to be written to flash. */
typedef struct
{
uint16_t file_id; //!< The ID of the file that the record belongs to.
uint16_t key; //!< The record key.
struct
{
void const * p_data;
uint32_t length_words;
} data;
} fds_record_t;
length_words 的计算方式如下:(官方提供的)
/* Dummy configuration data. */
static configuration_t m_dummy_cfg =
{
.config1_on = false,
.config2_on = true,
.boot_count = 0x0,
.device_name = "dummy",
};
/* A record containing dummy configuration data. */
static fds_record_t const m_dummy_record =
{
.file_id = CONFIG_FILE,
.key = CONFIG_REC_KEY,
.data.p_data = &m_dummy_cfg,
/* The length of a record is always expressed in 4-byte units (words). */
.data.length_words = (sizeof(m_dummy_cfg) + 3) / sizeof(uint32_t),
};
问题1: + 3 是什么道理?
问题2:如果我仅仅想保存0x01这样的数据,那么,length_words 应该为几?(按照上面的计算方案,应该桑1)
问题3: 如果我想保存一个数据为0x01 0x02两个字节,那么,length_words 应该为几?按照上面的计算方案,2 + 3 再除以4,取整的话,还是1啊?阿西吧。