|
Запись в EEPROM, пишу структуру, а попадает содержимое flash'a |
|
|
|
Mar 1 2010, 20:19
|

Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 12-01-09
Из: Minsk (BY)
Пользователь №: 43 259

|
Подскажите пожалуйста, что я делаю неправильно? Имеется структура, определенная как массив из 51 элемента для хранения в eeprom. Пытаюсь записать данные в один из элементов массива, однако в итоге получаю кусок flash'a в eeprom. Почему? CODE typedef struct _chInMem { uint32_t returnValue; } chInMem; chInMem channelMem[] EEMEM = { {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {107900000} }; ... chInMem channelInMem; eeprom_busy_wait(); channelInMem.returnValue = channel_freq; eeprom_write_block(&channelInMem, &channelMem, sizeof(channelMem)); ...
|
|
|
|
|
 |
Ответов
|
Mar 4 2010, 10:52
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(GoodNews @ Mar 4 2010, 11:43)  Я так понимаю, что next_free_channel = channel_number; вобще лишняя операция, так как присвоение произойдёт при выполнении макроса eeprom_write_block? Да. она не только лишняя, она вредная, поскольку портит ОЗУ. Цитата(GoodNews @ Mar 4 2010, 11:43)  Я изначально хотел включить данную переменную в структуру, но немного не понял что в итоге получится, так как структура фактически представляет собой массив полей. Массив тоже может быть членом структуры. Код typedef struct { uint32_t Channel[50]; uint8_t Next_free_channel; } settings_t;
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 4 2010, 11:20
|

Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 12-01-09
Из: Minsk (BY)
Пользователь №: 43 259

|
Цитата(Сергей Борщ @ Mar 4 2010, 12:52)  Да. она не только лишняя, она вредная, поскольку портит ОЗУ. Массив тоже может быть членом структуры. Код typedef struct { uint32_t Channel[50]; uint8_t Next_free_channel; } settings_t; Теперь понятно. Там в итоге ещё одна строка лишняя оказалась. А вот по поводу массива в структуре - потом просто взять определить массив отдельно как и в моём случае, только работать уже с полем? Т.е settings_t chan.Channel[] EEMEM = {...};и соответственно settings_t nchan.Next_free_channel = {...};Кстати, *_t разве не зарезервировано под формат данных?
|
|
|
|
|
Mar 4 2010, 11:44
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(GoodNews @ Mar 4 2010, 13:20)  А вот по поводу массива в структуре - потом просто взять определить массив отдельно как и в моём случае, только работать уже с полем? Т.е settings_t chan.Channel[] EEMEM = {...}; и соответственно settings_t nchan.Next_free_channel = {...}; Нет, определяете сразу всю структуру: Код settings_t EEMEM chan = { // структура { // массив 0, // Channel[0] 0, // Channel[1] 0, // Channel[2] ... 0, // Channel[49] }, 12345; // Free channel }; Кстати, если можно не указывать явно последние нулевые элементы массива: Код settings_t EEMEM chan = { // структура { // массив 123, // Channel[0] // все остальные элементы - нули }, 12345; // Free channel }; Цитата(GoodNews @ Mar 4 2010, 13:20)  Кстати, *_t разве не зарезервировано под формат данных? Нет. Просто один из многих стилей кодирования предполагает, что на _t оканчиваются названия новых (невстроенных) типов.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
GoodNews Запись в EEPROM Mar 1 2010, 20:19 Сергей Борщ Цитата(GoodNews @ Mar 1 2010, 22:19) Поче... Mar 2 2010, 08:33 GoodNews Цитата(Сергей Борщ @ Mar 2 2010, 10:33) П... Mar 2 2010, 08:53  Сергей Борщ Цитата(GoodNews @ Mar 2 2010, 10:53) Прос... Mar 2 2010, 11:12   GoodNews Цитата(Сергей Борщ @ Mar 2 2010, 13:12) К... Mar 2 2010, 21:37    Сергей Борщ Цитата(GoodNews @ Mar 2 2010, 23:37) Когд... Mar 2 2010, 23:08 Yaumen Задача несколько туманная, тем более что начинаете... Mar 2 2010, 12:22 Сергей Борщ Цитата(Yaumen @ Mar 2 2010, 14:22) Задача... Mar 2 2010, 12:43 GoodNews Я посмотрел вывод. Там как ни странно всё нормальн... Mar 3 2010, 13:58 Сергей Борщ Полагаю, ошибка здесь:Код NEXT_FREE_CHANNEL = ... Mar 3 2010, 16:16 GoodNews Большое спасибо за помощь! Я поправки внёс сог... Mar 4 2010, 07:32 Сергей Борщ Цитата(GoodNews @ Mar 4 2010, 09:32) По п... Mar 4 2010, 09:00 GoodNews В общем что-то получилось (всмысле компилятор пока... Mar 4 2010, 13:09 Сергей Борщ Цитата(GoodNews @ Mar 4 2010, 15:09) P.S.... Mar 4 2010, 13:37  Сергей Борщ Цитата(Сергей Борщ @ Mar 4 2010, 16:37) П... May 19 2010, 14:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|