Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100 Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва
Сообщение
AaNnDdRrEeYy » Пн мар 19, 2012 12:21:29
Есть простенькая программка для ATmega8 при старте она должна считать данные из EEPROM а в процессе работы если нужно обновить эти данные.
вот так я считываю
Код: Выделить всё
EEMEM unsigned char abc_;
int main()
{
unsigned char abc =0;
abc = eeprom_read_byte(&abc_);
//а так записываю
eeprom_update_byte(&abc_,abc);
}
проблема в том, как мне прошить в МК первоначальное значение переменной abc_, которое прочитается первый раз при запуске программы?
korsaj
Потрогал лапой паяльник
Сообщения: 330 Зарегистрирован: Чт июн 23, 2011 07:55:51
Сообщение
korsaj » Пн мар 19, 2012 12:34:15
У кажи начальный адрес епрома и забивай данные! После компилирования в прошивке все будет.
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100 Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва
Сообщение
AaNnDdRrEeYy » Пн мар 19, 2012 13:10:42
а как его указать? я прошиваю программкой khazama в ней отдельно кнопки прошить флеш и прошить eeprom. какой файл выбрать для прошивки eeprom?
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995 Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:
Сообщение
Мастер Ломастер » Пн мар 19, 2012 13:45:08
AaNnDdRrEeYy писал(а): какой файл выбрать для прошивки eeprom?
с расширением
eep обычно. по формату - обычный hex
битва с дураками проиграна, победители торжествуют. слава победителям!
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100 Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва
Сообщение
AaNnDdRrEeYy » Пн мар 19, 2012 13:53:07
когда нажимаю на загрузить eeprom программа не позволяет выбрать eep. там фильтр по расширению hex.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995 Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:
Сообщение
Мастер Ломастер » Пн мар 19, 2012 13:58:29
ну переименуйте... проблему нашли
битва с дураками проиграна, победители торжествуют. слава победителям!
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100 Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва
Сообщение
AaNnDdRrEeYy » Пн мар 19, 2012 14:30:54
конечно проблема, ведь в этот файл сначала надо данные записать а как это сделать нигде не написано, всюду только как с ними работать.
Engineer_Keen
Друг Кота
Сообщения: 3872 Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва
Сообщение
Engineer_Keen » Пн мар 19, 2012 14:36:35
Данные в файл для EEPROM записываются во время компиляции проекта.
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100 Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва
Сообщение
AaNnDdRrEeYy » Пн мар 19, 2012 14:39:37
если у меня в коде будет написано так
EEMEM unsigned char abc_ = 5;
в файл eep. запишется число 5?
Engineer_Keen
Друг Кота
Сообщения: 3872 Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва
Сообщение
Engineer_Keen » Пн мар 19, 2012 14:44:38
Почти так... Число 5 будет где-то посередине одной из строчек.
формат HEX-файла
Примерно вот так будет выглядеть .eep:
Не знаю только верно ли вы переменную объявили.
Кстати, гугль как всегда рулит, вот первая ссылка по запросу
winavr eeprom ...
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100 Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва
Сообщение
AaNnDdRrEeYy » Пн мар 19, 2012 15:21:12
Вообщем почему то портяться данные при записи, при чтении данных там вместо 5 цифра 255.
сделал так
убрал код чтения данных оставил только код записи. Запустил мк, данные в память записались. считал программатором epprom и сохранил на комп., исправил программу (вставил блок чтения, откомпилировал), залил новую прошивку и залил сохраненные данные из eeprom.
получил ту же фигню вместо цифры 5 читается 255.
я так думаю что при второй компиляции (когда блок чтения вставил) компилятор все по другим адресам раскидал.
Engineer_Keen
Друг Кота
Сообщения: 3872 Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва
Сообщение
Engineer_Keen » Пн мар 19, 2012 15:32:02
Ничего он не раскидывает, если ему не указать. Адреса переменных идут в порядке их объявления в программе. Если стоит одно объявление переменной в EEPROM, оно всегда будет по адресу 0x0000. А почему у вас портятся данные может быть уйма причин, начиная от ошибок в программе (приводите код целиком, чтобы участники форума не гадали) и кончая фьюзами и настройками оболочки программатора.
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100 Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва
Сообщение
AaNnDdRrEeYy » Пн мар 19, 2012 15:40:23
вот весь код. около 1000 строк, остальные подключаемые файлы это файлы драйверов usb.
контроллер atmega8535 частота 12 Мг
в EEPROM сохраняются настройки канала по команде с компа, читаются при старте программы.
Вложения
main.c
(24.42 КБ) 228 скачиваний
Engineer_Keen
Друг Кота
Сообщения: 3872 Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва
Сообщение
Engineer_Keen » Пн мар 19, 2012 15:51:21
AaNnDdRrEeYy писал(а): остальные подключаемые файлы это файлы драйверов usb.
Которые по умолчанию есть у всех кто работает с AVR, ага