#include <stdio.h>
#include <stdint.h>
typedef struct {
char f1[30]; // строка - 30 байт, т.е. до 29 символов.
uint32_t f2; // число, 4 байта.
uint16_t f3; // число, 2 байта.
} example_TypeDef;
void print_st(example_TypeDef *st) {
printf("%s %hu %u \n", st
->f1
, st
->f2
, st
->f3
); }
int main(void) {
// Две переменные - структуры. Для примера заполняем их чем-нибудь.
example_TypeDef a = {"Asdf1", 11, 22};
example_TypeDef b = {"Zxxvc", 33, 44};
// Два указателя.
uint8_t *a_mem;
uint8_t *b_mem;
// Массив, котрый имитирует флешку.
uint8_t flash_mem[100];
// Выводим количество байт в структуре.
// Получилось 40 байт из-за выравнивания.
printf("sizeof: %ld\n", sizeof(example_TypeDef
)); // Выводим содержимое структур, должно совпасть с тем что записали в них ранее.
// Тут получаем адреса структур в виде указателя на uint8_t (можно на char).
a_mem = (uint8_t *)(&a);
b_mem = (uint8_t *)(&b);
// Записываем на флешку кусочек памяти, занимаемый структурой "a".
for (int i = 0; i < sizeof(example_TypeDef); i++) {
flash_mem[i] = a_mem[i];
}
// Читаем из флешки байты и пишем их в структуру "b".
for (int i = 0; i < sizeof(example_TypeDef); i++) {
b_mem[i] = flash_mem[i];
}
// В результате содержимое структуры "a" должно скопироваться в структуру "b".
// Выводим содержимое структур для того чтобы убедиться что все скопировалось.
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnR5cGVkZWYgc3RydWN0IHsKCWNoYXIgZjFbMzBdOyAvLyDRgdGC0YDQvtC60LAgLSAzMCDQsdCw0LnRgiwg0YIu0LUuINC00L4gMjkg0YHQuNC80LLQvtC70L7Qsi4KCXVpbnQzMl90IGYyOyAvLyDRh9C40YHQu9C+LCA0INCx0LDQudGC0LAuCgl1aW50MTZfdCBmMzsgLy8g0YfQuNGB0LvQviwgMiDQsdCw0LnRgtCwLgp9IGV4YW1wbGVfVHlwZURlZjsKCnZvaWQgcHJpbnRfc3QoZXhhbXBsZV9UeXBlRGVmICpzdCkgewoJcHJpbnRmKCIlcyAlaHUgJXUgXG4iLCBzdC0+ZjEsIHN0LT5mMiwgc3QtPmYzKTsKfQoKaW50IG1haW4odm9pZCkgewoJLy8g0JTQstC1INC/0LXRgNC10LzQtdC90L3Ri9C1IC0g0YHRgtGA0YPQutGC0YPRgNGLLiDQlNC70Y8g0L/RgNC40LzQtdGA0LAg0LfQsNC/0L7Qu9C90Y/QtdC8INC40YUg0YfQtdC8LdC90LjQsdGD0LTRjC4KCWV4YW1wbGVfVHlwZURlZiBhID0geyJBc2RmMSIsIDExLCAyMn07CglleGFtcGxlX1R5cGVEZWYgYiA9IHsiWnh4dmMiLCAzMywgNDR9OwoJLy8g0JTQstCwINGD0LrQsNC30LDRgtC10LvRjy4KCXVpbnQ4X3QgKmFfbWVtOwoJdWludDhfdCAqYl9tZW07CgkvLyDQnNCw0YHRgdC40LIsINC60L7RgtGA0YvQuSDQuNC80LjRgtC40YDRg9C10YIg0YTQu9C10YjQutGDLgoJdWludDhfdCBmbGFzaF9tZW1bMTAwXTsKCQoJLy8g0JLRi9Cy0L7QtNC40Lwg0LrQvtC70LjRh9C10YHRgtCy0L4g0LHQsNC50YIg0LIg0YHRgtGA0YPQutGC0YPRgNC1LgoJLy8g0J/QvtC70YPRh9C40LvQvtGB0YwgNDAg0LHQsNC50YIg0LjQty3Qt9CwINCy0YvRgNCw0LLQvdC40LLQsNC90LjRjy4KCXByaW50Zigic2l6ZW9mOiAlbGRcbiIsIHNpemVvZihleGFtcGxlX1R5cGVEZWYpKTsKCS8vINCS0YvQstC+0LTQuNC8INGB0L7QtNC10YDQttC40LzQvtC1INGB0YLRgNGD0LrRgtGD0YAsINC00L7Qu9C20L3QviDRgdC+0LLQv9Cw0YHRgtGMINGBINGC0LXQvCDRh9GC0L4g0LfQsNC/0LjRgdCw0LvQuCDQsiDQvdC40YUg0YDQsNC90LXQtS4KCXByaW50ZigiYSA9ICIpOyBwcmludF9zdCgmYSk7CglwcmludGYoImIgPSAiKTsgcHJpbnRfc3QoJmIpOwoJCglwcmludGYoImNvcHkgYiA8LSBhXG4iKTsKCS8vINCi0YPRgiDQv9C+0LvRg9GH0LDQtdC8INCw0LTRgNC10YHQsCDRgdGC0YDRg9C60YLRg9GAINCyINCy0LjQtNC1INGD0LrQsNC30LDRgtC10LvRjyDQvdCwIHVpbnQ4X3QgKNC80L7QttC90L4g0L3QsCBjaGFyKS4KCWFfbWVtID0gKHVpbnQ4X3QgKikoJmEpOwoJYl9tZW0gPSAodWludDhfdCAqKSgmYik7CgkvLyDQl9Cw0L/QuNGB0YvQstCw0LXQvCDQvdCwINGE0LvQtdGI0LrRgyDQutGD0YHQvtGH0LXQuiDQv9Cw0LzRj9GC0LgsINC30LDQvdC40LzQsNC10LzRi9C5INGB0YLRgNGD0LrRgtGD0YDQvtC5ICJhIi4KCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGV4YW1wbGVfVHlwZURlZik7IGkrKykgewoJCWZsYXNoX21lbVtpXSA9IGFfbWVtW2ldOwoJfQoJCgkvLyDQp9C40YLQsNC10Lwg0LjQtyDRhNC70LXRiNC60Lgg0LHQsNC50YLRiyDQuCDQv9C40YjQtdC8INC40YUg0LIg0YHRgtGA0YPQutGC0YPRgNGDICJiIi4KCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGV4YW1wbGVfVHlwZURlZik7IGkrKykgewoJCWJfbWVtW2ldID0gZmxhc2hfbWVtW2ldOwoJfQoJCgkvLyDQkiDRgNC10LfRg9C70YzRgtCw0YLQtSDRgdC+0LTQtdGA0LbQuNC80L7QtSDRgdGC0YDRg9C60YLRg9GA0YsgImEiINC00L7Qu9C20L3QviDRgdC60L7Qv9C40YDQvtCy0LDRgtGM0YHRjyDQsiDRgdGC0YDRg9C60YLRg9GA0YMgImIiLgoJLy8g0JLRi9Cy0L7QtNC40Lwg0YHQvtC00LXRgNC20LjQvNC+0LUg0YHRgtGA0YPQutGC0YPRgCDQtNC70Y8g0YLQvtCz0L4g0YfRgtC+0LHRiyDRg9Cx0LXQtNC40YLRjNGB0Y8g0YfRgtC+INCy0YHQtSDRgdC60L7Qv9C40YDQvtCy0LDQu9C+0YHRjC4KCXByaW50ZigiYSA9ICIpOyBwcmludF9zdCgmYSk7CglwcmludGYoImIgPSAiKTsgcHJpbnRfc3QoJmIpOwoJCglyZXR1cm4gMDsKfQo=