Los datos de la estructura se almacenan en Flash y el análisis del problema del desplazamiento de la posición del elemento

Antecedentes del problema : hoy depuré el almacenamiento Flash, donde los datos almacenados son una variable de estructura, ¡y descubrí que algunos elementos de la variable de estructura están desplazados hacia atrás!
Razón específica : Por ejemplo, la siguiente prueba de variable de estructura se almacena en flash y ocupa 6 bytes en lugar de 5 bytes; la razón es que la estructura tiene el concepto de alineación de bytes, es decir, en el miembro de estructura El número de bytes ocupado por el tipo de datos que ocupa la mayor parte de la memoria es el estándar, y todos los miembros deben estar alineados con esta longitud al asignar memoria. Tome la siguiente prueba de variable de estructura como ejemplo. En sus elementos, ayc son dos bytes. Si b debe alinearse con él, se agregará automáticamente un byte nulo;

typedef struct{
	uint16_t a;
	uint8_t  b;
	uint16_t c;
}TEST_T;
TEST_T test ;

No importa cuán compleja sea la estructura, la alineación de bytes no se discutirá. Hay muchos ejemplos. Este registro describe este sentido común básico, que puede conducir a efectos inconsistentes con los pensamientos anteriores;

Solución : si desea evitar el desperdicio de espacio Flash, solo necesita agregar la función __attribute__ al definir la variable de estructura; por ejemplo, lo siguiente

typedef struct{
	uint16_t a;
	uint8_t  b;
	uint16_t c;
}__attribute__ ((__packed__))TEST_T;
TEST_T test ;

Supongo que te gusta

Origin blog.csdn.net/weixin_43704402/article/details/113847071
Recomendado
Clasificación