我正在使用esp8266,非操作系统SDK。
我试图理解softap_config结构如何存储在内存中。这样做的原因是我计划在UDP上实现配置espressif,我宁愿发送它应该是的整个结构,然后只是memcpy它。
来自user_interface.h:
struct softap_config {
uint8 ssid[32];
uint8 password[64];
uint8 ssid_len; // Note: Recommend to set it according to your ssid
uint8 channel; // Note: support 1 ~ 13
AUTH_MODE authmode; // Note: Don't support AUTH_WEP in softAP mode.
uint8 ssid_hidden; // Note: default 0
uint8 max_connection; // Note: default 4, max 4
uint16 beacon_interval; // Note: support 100 ~ 60000 ms, default 100
};
typedef enum _auth_mode {
AUTH_OPEN = 0,
AUTH_WEP,
AUTH_WPA_PSK,
AUTH_WPA2_PSK,
AUTH_WPA_WPA2_PSK,
AUTH_MAX
} AUTH_MODE;
所以,我做的第一件事就是:
os_printf("size in mem: %d\n", sizeof(struct softap_config));
我得到 108 预期 103 。
然后我继续打印十六进制值:
我发现的是:
完全适合有五个额外的字节,这解释了尺寸。就我测试而言,这些字节与struct字段值保持一致。
但为什么会那样?这些价值观意味着什么? 我想这与 AUTH_MODE ?
有关答案 0 :(得分:2)
您的错误有两方面:
-fshort-enums
,因此在您的情况下4可以自由使用“自然”大小,如int
。同时,对齐也是4而不是1。uint16
可能已经有2的对齐,所以即使枚举的大小和对齐为1,除非你使用a compiler-specific extension to pack that struct而不管对齐约束,否则大小至少为104。