roboforum.ru

Технический форум по робототехнике.


Хранение в флеш (Си)

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Хранение в флеш (Си)

Сообщение executer » 11 июл 2009, 21:52

Всем здравствовать!

Назрел вопрос сохранения нескольких параметров программы между включениями МК. Как писать в флеш на асме знаю, а что на Си делать? просто обьявить переменную
flash uint8_t var;
достаточно? как задать исходное значение параметра (которое сразу после перепрошивки будет)?
if(var==0) var=33;
Чтото может красивше есть?
Писать в эту переменную также как и в обычную, значение автоматически в память прошьется и восстановится после рестарта?
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Хранение в флеш (Си)

Сообщение ALHIMIK » 11 июл 2009, 22:13

эта переменная будет константой...
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

Re: Хранение в флеш (Си)

Сообщение MiBBiM » 11 июл 2009, 22:15

ну теоретически её можно будет обновлять при каждом старте из бутлодера...но на время выполнения основной проги да, константа.
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

Re: Хранение в флеш (Си)

Сообщение avr123.nm.ru » 11 июл 2009, 22:18

executer писал(а): как задать исходное значение параметра (которое сразу после перепрошивки будет)?

flash uint8_t var = 33;

executer писал(а): Писать в эту переменную также как и в обычную


Эта var будет константой и будет в памяти программ лежать.

Переменные можно в EEPROM хранить. в CVAVR модификатор

eeprom

"Язык Си для микроконтроллеров" - http://avr123.nm.ru/05.htm
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Хранение в флеш (Си)

Сообщение ALHIMIK » 11 июл 2009, 22:19

если нужно изменять можно использовать EEPROM
блин авр апередил
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

Re: Хранение в флеш (Си)

Сообщение executer » 11 июл 2009, 22:44

Спасибо за советы. Я думал что flash и eeprom - одно и тоже :pardon: . Теперь есть что искать.
А для WinAVR не подскажете?
Последний раз редактировалось executer 11 июл 2009, 22:59, всего редактировалось 1 раз.
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Хранение в флеш (Си)

Сообщение avr123.nm.ru » 11 июл 2009, 22:49

Я думал что flash и eeprom - одно и тоже


На самом деле обе эти памяти являются EEPROM - просто есть некоторые нюансы и потому так называют, т.е. в МК это разные памяти.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Хранение в флеш (Си)

Сообщение ALHIMIK » 11 июл 2009, 23:12

если хочется можно и flah оставить только придётся использовать функцию самопрограмирования...
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

Re: Хранение в флеш (Си)

Сообщение executer » 11 июл 2009, 23:15

вот тут нашел решение. всем сэнкс :good:
http://www.scienceprog.com/easy-start-w ... ng-winavr/

Добавлено спустя 1 минуту 8 секунд:
ALHIMIK писал(а):если хочется можно и flah оставить только придётся использовать функцию самопрограмирования...


Это типа как бутлоадер сам инфу с COM порта в память шьет?
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Хранение в флеш (Си)

Сообщение MiBBiM » 11 июл 2009, 23:24

угу. 3-е сообщение темы :D
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

Re: Хранение в флеш (Си)

Сообщение Duhas » 12 июл 2009, 08:40

avr123.nm.ru писал(а):
Я думал что flash и eeprom - одно и тоже

На самом деле обе эти памяти являются EEPROM - просто есть некоторые нюансы


подобные нюансы разделают человека и обезъяну (утрированно)

флеша может и родом с того же семейства но вперед шагнула...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Хранение в флеш (Си)

Сообщение avr123.nm.ru » 12 июл 2009, 12:37

Кудаб она ни шагнула она EEPROM и есть. Т.е. дословно - электрически стираемая перманентная ( не забывающая без питания ) ROM.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Хранение в флеш (Си)

Сообщение contr » 12 июл 2009, 14:09

однако обе памяти действительно одинаковы и могут считаться EEPROM. Просто кусочек именуемый "EEPROM" спецом предназначен для длительного хранения констант и чтения/записи их из другой части - flash, где находится сама программа.
как задать исходное значение параметра (которое сразу после перепрошивки будет)?

просто
var=33;
это пропишется в flash и будет стартовым значением переменной. А если это значение изменилось и его нужно сохранить и использовать при новом старте программы, то понадобится хранение в EEPROM.
contr
 
Сообщения: 987
Зарегистрирован: 17 апр 2009, 15:09
Откуда: Rostov-Don
Предупреждения: -1

Re: Хранение в флеш (Си)

Сообщение executer » 12 июл 2009, 14:31

Для потомков:
(код из статьи по ссылке)
Код: Выделить всёРазвернуть
#include <inttypes.h>
#include <avr/io.h>
#include <avr/eeprom.h>

//store initial byte to eeprom
uint8_t EEMEM eeprombyte=0x10;
//store initial word to eeprom
uint16_t EEMEM eepromword=0x5555;
//store string to eeprom
uint8_t EEMEM eepromstring[5]={"Test\0"};
int main(void)
{
   
//RAM byte variable
uint8_t RAMbyte;
//RAM word variable
uint16_t RAMword;
//RAM array of bytes
uint8_t RAMstring[5];
//read byte from EEPROm and store to RAM
RAMbyte = eeprom_read_byte(&eeprombyte); // обратная функция - запись eeprom_write_byte (uint8_t *__p, uint8_t __value)
//read word from EEPROM and store to RAM
RAMword = eeprom_read_word(&eepromword); // подробная инфа в хелпе к ВинАВР "file://localhost/C:/Program%20Files/WinAVR/doc/avr-libc/avr-libc-user-manual/group__avr__eeprom.html" (без кавычек)
//copy string fro mEEPROM to RAM
eeprom_read_block ((void *)&RAMstring, (const void *)&eepromstring,5);
return (0);
}
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Хранение в флеш (Си)

Сообщение avr123.nm.ru » 12 июл 2009, 14:48

contr писал(а):однако обе памяти действительно одинаковы


тому кто читал обложку даташит очевидно что эти памяти далеко не одинаковы.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

След.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron