fork download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. typedef struct {
  5. char f1[30]; // строка - 30 байт, т.е. до 29 символов.
  6. uint32_t f2; // число, 4 байта.
  7. uint16_t f3; // число, 2 байта.
  8. } example_TypeDef;
  9.  
  10. void print_st(example_TypeDef *st) {
  11. printf("%s %hu %u \n", st->f1, st->f2, st->f3);
  12. }
  13.  
  14. int main(void) {
  15. // Две переменные - структуры. Для примера заполняем их чем-нибудь.
  16. example_TypeDef a = {"Asdf1", 11, 22};
  17. example_TypeDef b = {"Zxxvc", 33, 44};
  18. // Два указателя.
  19. uint8_t *a_mem;
  20. uint8_t *b_mem;
  21. // Массив, котрый имитирует флешку.
  22. uint8_t flash_mem[100];
  23.  
  24. // Выводим количество байт в структуре.
  25. // Получилось 40 байт из-за выравнивания.
  26. printf("sizeof: %ld\n", sizeof(example_TypeDef));
  27. // Выводим содержимое структур, должно совпасть с тем что записали в них ранее.
  28. printf("a = "); print_st(&a);
  29. printf("b = "); print_st(&b);
  30.  
  31. printf("copy b <- a\n");
  32. // Тут получаем адреса структур в виде указателя на uint8_t (можно на char).
  33. a_mem = (uint8_t *)(&a);
  34. b_mem = (uint8_t *)(&b);
  35. // Записываем на флешку кусочек памяти, занимаемый структурой "a".
  36. for (int i = 0; i < sizeof(example_TypeDef); i++) {
  37. flash_mem[i] = a_mem[i];
  38. }
  39.  
  40. // Читаем из флешки байты и пишем их в структуру "b".
  41. for (int i = 0; i < sizeof(example_TypeDef); i++) {
  42. b_mem[i] = flash_mem[i];
  43. }
  44.  
  45. // В результате содержимое структуры "a" должно скопироваться в структуру "b".
  46. // Выводим содержимое структур для того чтобы убедиться что все скопировалось.
  47. printf("a = "); print_st(&a);
  48. printf("b = "); print_st(&b);
  49.  
  50. return 0;
  51. }
  52.  
Success #stdin #stdout 0s 4956KB
stdin
Standard input is empty
stdout
sizeof: 40
a = Asdf1 11 22 
b = Zxxvc 33 44 
copy b <- a
a = Asdf1 11 22 
b = Asdf1 11 22