реклама на сайте
подробности

 
 
> Прошивка Flash и EEPROM одним файлом hex или elf
Twin_by
сообщение May 25 2015, 05:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 3-09-11
Из: Минск
Пользователь №: 66 982



Здравствуйте!
У меня такая вот ситуация. Подключаю библиотеку eeprom.h. Инициализирую переменную в eeprom памяти строчкой uint8_t var EEMEM = 15; . После сборки создается файл с расширением eep который заливается в МК отдельно. Интересен такой вопрос можно ли прошить flash и eeprom память avr используя только один файл hex или elf? Как это сделать: что добавить, что убрать? От библиотеки eeprom.h не хотелось бы отказываться (хорошая библиотека, удобная)

Сообщение отредактировал Twin_by - May 25 2015, 09:41
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
qwerty1023
сообщение May 26 2015, 07:00
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 9-04-14
Пользователь №: 81 295



Тут наверное имеется в виду что-то типа

Код
//_e_data_ok магическая константа
#define DATA_OK 0x5A

volatile __no_init __eeprom uchar EEMEM;
volatile __no_init __eeprom uchar _e_data_ok;


void main(void)
{


if (_e_data_ok != DATA_OK)
{
  EEMEM = 15;
  _e_data_ok = DATA_OK;
}


while(1)
{
....
}

}


А вообще, если это ответсвенная переменная, не помешало бы "накрыть" это все какойнить crc и уже по целостности crc судить о валидности данных в EEPROM.

Вот вам идеи для творчества. Удобно использовать объединения, тогда к блоку данных можно обращаться как к масиву байт при, например чтении его из памяти, подсчете crc и т.п. но при этом иметь структурированные данные для нормальной читаемости программы.

CODE
struct sEEPROMSet
{
...
uchar msgAllEnd2DurationSec; // длительность "пииик" x100мс
uint devSetFlags;
//uint crc16; - не участвует в стркуктуре для экономии ОЗУ но есть во флеш
};


union
{
uchar byte[sizeof(sEEPROMSet)];
sEEPROMSet;
} block;


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++

uint crc16update(uchar inData, uint inCrc)
{
uchar i;

// считаем crc
inCrc ^= inData;

for (i = 0; i < 8; i++)
{
if (inCrc & 1)
{
inCrc >>= 1;
inCrc ^= 0x1021;
}
else
{
inCrc >>= 1;
}
}
return inCrc;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++

bool GetMemBlock(ulong start, uint dataSize, uchar * data)
{
uchar tmpData;
uint s, memCrc, crc = 0xFFFF;

//Led2On();

// записываем комманду непрерывного чтения
memStart();
SPIRW(0x03); // непрерывное чтение
memSetAdr(start);

for(s = 0; s < dataSize; s++)
{
// читаем байт из флешки
tmpData = SPIRW(0);
// записываем по указателю и увеличиваем указатель
data[s] = tmpData;
// считаем crc
crc = crc16update(tmpData, crc);
}

// читаем значение CRC16
memCrc = SPIRW(0);
memCrc |= (SPIRW(0) << 8);

memStop();

//Led2Off();

// проверяем
if (crc == memCrc)
{
return true;
}
else
{
return false;
}
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++

bool LoadSettings(uchar modeNum)
{
union
{
uchar byte[sizeof(sWorkModeSetBlock)];
sWorkModeSetBlock;
} block;

// читаем таблицу размещения настроек режимов
if (!GetMemBlock((ulong)WORK_MODE_TABLE_START_ADR, (uint)sizeof(sWorkModeSetBlock), block.byte))
{
// ошибка при чтении блока, аварийный выход
LCD_send(0x0E,'r',0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0,0);
return false;
}

// блок считался без ошибок, выбираем настройки режима

// заполняем рабочую структуру настроек

//копируем тип режима
workData.soundMode = block.modeSet[modeNum].soundMode;

// копируем настройки обязательного звука 1
msgBeep1Adr = block.msgAllEnd1Adr; // адресс начала звука "пик-пик" во флешке
msgBeep1DurationSempl = block.msgAllEnd1DurationSempl; // длительность "пик-пик" в семплах
msgBeep1DurationSec = block.msgAllEnd1DurationSec; // длительность "пик-пик" x100мс


Сообщение отредактировал IgorKossak - May 26 2015, 13:04
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Twin_by   Прошивка Flash и EEPROM одним файлом hex или elf   May 25 2015, 05:26
- - demiurg_spb   Цитата(Twin_by @ May 25 2015, 08:26) Неп...   May 25 2015, 13:54
- - Twin_by   Цитата(demiurg_spb @ May 25 2015, 16:54) ...   May 25 2015, 14:50
- - alexeyv   1. На производстве используют программатор ASISP и...   May 26 2015, 03:51
- - Twin_by   Цитата(alexeyv @ May 26 2015, 06:51) 2. П...   May 26 2015, 04:44
- - alexeyv   Выбираешь один из неиспользуемых адресов в EEPROM ...   May 26 2015, 08:05
|- - Twin_by   Цитата(alexeyv @ May 26 2015, 11:05) Напр...   May 28 2015, 11:09
- - alexeyv   ЦитатаЕсли я правильно понял ваш код, то вы в нем ...   May 29 2015, 02:19
|- - demiurg_spb   Цитата(alexeyv @ May 29 2015, 05:19) Кодv...   May 29 2015, 08:07
|- - qwerty1023   Цитата(demiurg_spb @ May 29 2015, 11:07) ...   May 29 2015, 08:47
|- - demiurg_spb   Цитата(qwerty1023 @ May 29 2015, 11:47) А...   May 29 2015, 08:52
|- - Twin_by   Цитата(demiurg_spb @ May 29 2015, 11:52) ...   May 29 2015, 09:09
- - zltigo   1) Все данные ЕЕPROМ в структуру, это святое и не ...   May 29 2015, 09:10
|- - VladislavS   Цитата(zltigo @ May 29 2015, 12:10) Все. ...   May 31 2015, 11:31
- - alexeyv   to demiurg_spb Цитата1. Во всех ваших примерах над...   Jun 1 2015, 03:53
|- - demiurg_spb   Цитата(alexeyv @ Jun 1 2015, 06:53) Но в ...   Jun 1 2015, 07:06
|- - Twin_by   Цитата(demiurg_spb @ May 29 2015, 11:07) ...   Jun 1 2015, 07:57
- - alexeyv   ЦитатаЯ уже об этом писал и объяснил зачем это нуж...   Jun 3 2015, 02:39
- - Сергей Борщ   Цитата(alexeyv @ Jun 3 2015, 05:39) У мен...   Jun 3 2015, 04:47


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 04:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016