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

 
 
> Определение целосности данных
Pat
сообщение Oct 29 2005, 18:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Есть значение, которое очень важно для функционирования всего прибора.
Оно хранится в EEPROM и может иногда изменятся (калибровочный коэфф.). Необходимо при старте определить их правильность.
Конечно, самое простое это записать его несколько раз в EEPROM, потом, считав данные методом сравнения определить, что данные правильны. Например, 2 из 3 совпали.
Интересует, есть ли более элегантные способы хранения данных, которые на 99.9999% гарантируют их целостность?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
slabnoff
сообщение Oct 31 2005, 14:43
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 26-09-05
Пользователь №: 8 955



Самый тривиальный алгоритм подсчета контрольной суммы CRC16:

Код
WORD calc_crc16(WORD *ar,int num)
{
   WORD i,j,val,val1;

   val=ar[0];
   for(i=1;i<num;i++)
  {
      val1=ar[i];
      for(j=0;j<16;j++)
      {
           if(val&0x8000)
           {
                val=val^0x8005;
           }
           val=(val<<1);
           
           if(val1&0x8000)
           {
                 val++;
           }
           val1=(val1<<1);
       }
   }
   ar[i-1]=val;

 return(val);
}


Последний элемент массива - значение CRC16 массива при проверке (возвращается 0 при правильной CRC16), 0 - при подсчете. Оптимизируйте при необходимости - я написал в свое время за 15 минут, совершенно не думая о производительности.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th August 2025 - 01:28
Рейтинг@Mail.ru


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