Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.04.2017, 07:48  
anton26ru
Вид на жительство
 
Аватар для anton26ru
 
Регистрация: 21.07.2009
Сообщений: 350
Сказал спасибо: 47
Сказали Спасибо 98 раз(а) в 58 сообщении(ях)
anton26ru на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Сообщение от H4LF Посмотреть сообщение
акты какие-нибудь составляются, чтобы легче было найти виновных в случае чего, или только ТЗ?
Когда проектом занимаются несколько человек, очень интересно бывает комментарии читать. Некоторые даже общаются через них.
Реклама:
anton26ru вне форума  
Непрочитано 27.04.2017, 10:15  
hacker7
Вид на жительство
 
Регистрация: 07.01.2007
Адрес: Ленинградская обл
Сообщений: 428
Сказал спасибо: 147
Сказали Спасибо 71 раз(а) в 56 сообщении(ях)
hacker7 на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Сообщение от mike-y-k Посмотреть сообщение
hacker7, так опыт использования есть тут у всех. Просто ради просмотра в привычном виде придётся городить целую систему с правилами. К ТЗ на основную функцию прибавляется ТЗ на формат представления. К программированию основной функции добавляются формирование+запись и чтение+разбор текстового представления. А бинарный вариант - просто чтение/запись файла.

Если грамотно спроектировать используемую структуру данных, то больше никаких операций в программе не нужно.
......

PS вариант позиционного вывода значений без имён будет ещё сложней в сопровождении и кроме текстового представления двоичных данных не даёт никакого улучшения, только ещё один поиск по таблице "значение параметра X находится в 3761 строке файла, а параметра Y - в 131" .
Благодарю за интересную методу.
Предлагал именно вариант позиционного вывода значений в человеко-читаемом виде без имён.
2.56 7.32 0000.8 Миша7\\\9999.07
Уж если имеется такой C, где стабильно работают структуры и т п - ну тогда в такой С можно засунуть и готовый пакетик разборки ключевых слов
Defekt=2.56 cena=7.32 name="Миша"
И то, printf-scanf не особо доверяю. Это если только они работают на данных форматах 200%
И структурам не доверяю...
И ссылочным данным...

О ТЗ речь не шла. На выходе д б работающая система, а не ТЗ.
Валидация входных данных осуществляется по совокупности их значений. Дополнительная формальная валидация формата?
Сопровождение по такой документации, которая нацелена на сопровождение (в отсутствие автора). Ключевые параметры здсь вряд ли заменят грамотное описание и минимальный printf переменных, имеющих внятные идентификаторы. Cинтаксис printf-то должен понимать сопровождающий, если уж речь зашла о просмотре файла...
Оптимально, конечно - просто вывод в файл (можно с наложением на char-данные, если наложенние позволяет компилятор - чтоб без всяких преобразований). Можно даже приформировать контрольную сумму или даже закодировать char-запись исправляющим кодом. Но топик-стартеру же захотелось какого-то серединного пути, и вот ищем его...
Перечитал запись топик-стартера.
Другое нужно - нужен ключевой формат во встраиваемой системе.
Ну тогда альтернатив всего две:
1) имитация разбора ключевых слов - то есть контекстный поиск ключа, потом .. sscanf (!!!!!!)
Это только для ТЗ и годится
2) написание КАК ПОЛОЖЕНО "взрослого" лексич и синтаксич анализатора. В принципе, можно на совр микрухах... Можно дерзать. От 50 до 200 строк кода. Готового униврс реш нту, но фрагменты (разборки разных числовых форматов) могу выдернуть и выслать.
Однако здесь важно, что и для (1) и (в меньшей степени) для(2) нужен адекватный С на целевой машине...

Последний раз редактировалось hacker7; 27.04.2017 в 10:24.
hacker7 вне форума  
Непрочитано 27.04.2017, 14:04  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,853 раз(а) в 2,924 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

На тему сложности валидации/аутентификации/… Сейчас модуль шифрования в МК уже чаще данность, чем экзотика . Посему MD5/SHA256 при необходимости не вызовут никаких проблем. Можно даже шифровать. Тут уже по потребности.

При нормальном подходе к проектированию системы получение кода и сборка утилит(ы) для работы с бинарным форматом - отдельная, но не сложная задача, которая на уровне make для проекта работает автоматически и нужная(ые) утилита(в) в актуальном состоянии (и даже несколько ее версий при необходимости с конвертацией формата) собственно всегда будет доступна(в). Так что геморрой тут исключительно от лени .

Если для решения целевой задачи достаточно МК с некоторой тактовой частотой и объёмом памяти (сопоставимые по периферии варианты), то для реализации работы с текстовым представлением уже потребуется старшая модель, минимум с большей памятью. растут и стоимость системы, и стоимость владения. При бинарном формате эти параметры не изменяются. Одновременно увеличивается время жизни системы при ее модификациях на текущем МК. В итоге заметная суммарная экономия.

Уже писал про тенденцию с красивостью и рюшечками в поддержку закона Мура . Только этот путь на руку (и на карман) исключительно чужому дяде.

hacker7 Без ТТ, ТЗ, проектирования, совокупности постановок,… получение production/release конечно возможно. И даже некоторое развитие. Все от задачи зависит немного - словно некоторый ногодрыг вполне получится. Но уже более сложные проекты вызовут быстро нарастающий геморрой. Такие вопросы нужно на этапе ТТ/ТЗ уже учитывать при создании условной модели. Исправлять косяки этого этапа - чаще всего переписывать большую часть заново. Особенно это касается распределённых систем. При работе с бинарным форматом меняется только структура данных и для всего проекта достаточно одного make для перекомпиляции и сборки (в самом крайнем случае всех трёх ). Объём операций для проекта близок к 0. Для текстового представления потребуется ведение отдельного слоя/подпроекта для обслуживания этих данных, что весьма резко увеличит объём операций по сопровождению.

Выбор пути тут конечно исключительно за ТС, но и внимательное и вдумчивое чтение всего сказанного в теме должно помочь сделать окончательный (и главное правильный) выбор .
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 27.04.2017 в 14:21.
mike-y-k вне форума  
Непрочитано 27.04.2017, 15:48  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Сообщение от mike-y-k Посмотреть сообщение
На тему сложности валидации/аутентификации/… Сейчас модуль шифрования в МК уже чаще данность, чем экзотика . Посему MD5/SHA256 при необходимости не вызовут никаких проблем. Можно даже шифровать. Тут уже по потребности.
Господи, да при чём тут хеширование и шифрование? Просто проверка входящих данных на допустимость. Например максимальное и минимальное значение для какой-либо переменной числового типа. А при работе со строками - нужно ещё следить, чтобы ничего не переполнилось. Ну и чтобы в функции преобразования не попало что-нибудь, от чего они крякнут. Например - чтобы запятая, поставленная человеком вместо точки, не подвесила систему. Или вообще левый файл с подходящим названием.
H4LF вне форума  
Непрочитано 27.04.2017, 15:54  
hacker7
Вид на жительство
 
Регистрация: 07.01.2007
Адрес: Ленинградская обл
Сообщений: 428
Сказал спасибо: 147
Сказали Спасибо 71 раз(а) в 56 сообщении(ях)
hacker7 на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Сообщение от mike-y-k Посмотреть сообщение
При нормальном подходе к проектированию системы получение кода и сборка утилит(ы) для работы с бинарным форматом - отдельная, но не сложная задача, которая на уровне make для проекта работает автоматически и нужная(ые) утилита(в) в актуальном состоянии (и даже несколько ее версий при необходимости с конвертацией формата) собственно всегда будет доступна(в). Так что геморрой тут исключительно от лени .

.......

Для текстового представления потребуется ведение отдельного слоя/подпроекта для обслуживания этих данных, что весьма резко увеличит объём операций по сопровождению.
Согласен с Вами. Выделил эти два момента.
Топикстартеру нужны -параметры-, т е м. б. начальник где-то видел INI-файлы виндоуз и требует именно этот формат. Или он представляется естественным. В сущности, он такой и есть - в случае именно немногих параметров, которые и человеку м б надо видеть...
А насчёт слоя Вы очень правы. Потому что суррогатные решения не разберут штучки вроде пробелов между именем параметра и знаком = и т п завихрения или что хуже, разберут и поймут не то, что хотел записать параметрописатель, без сообщения об ошибке. Примеры: STEP = 0.25.7 или SteP=..3 или даже так: STEp=parm==2.5delay=0.5
Всё же прилагаю (надеюсь, приложилось) - исходник пр-ммы содержащей разбор каких-то чисел и строк, всё в формате LISP - а в нём термами м б строки и числа вроде (SET X (ADD 2.75 3) )- это X=2.75+3 Такой псевдокод советские вучоные втаскали в Автокад в качестве метафайла, и кто их туда пустил
Фрагмент в сишной пр-мме называется "сканер".
Методика разбора по БНФ там видна. Да там с гулькин нос того кода, и он минимален....
К сожалению, если разработчик хочет разбирать ключевой формат корректно, без чего-то подобного не обойдётся...
Cобственно, вот фрагмент разбора во вх потоке идентификатора, числа с точкой (но без порядка) и строки -
object * atom()
/* atom= alfa [alfa|digit ...] */
{
void error();
void nextchr();
object *atomobject;
object *newobject();
char *catom; /* atom's char representation */
int i;
void copyvch();

catom=(char*)allocmem(maxnamel*sizeof(char));
i=0;
catom[i]=curchr;

if (curlex!=alfa)error(4);
nextchr();
while( (curlex==alfa) || (curlex==digit) )
{
copyvch(&i,catom,maxnamel);
nextchr();
};
i++;
catom[i]='\000';
atomobject=whatatom(catom); /* Shook in tables , form typ & contents */
return(atomobject);
};

object *value()
/* value=[+|-] digit [digit ...] [.[digit ...]] */
{
void nextchr();
object *valueobject;
object *newobject();
char *cvalue;
float *fvalue;
int *ivalue;
int i;
int floatvalue;
void copyvch();
void error();

float *AlleyDog; /* Those 4 lines are blocking C++ 2.0 bug */
float AlleyCat;
AlleyDog=&AlleyCat;
AlleyDog=AlleyDog;

valueobject=newobject();
cvalue=(char*)allocmem(maxvaluel*sizeof(char));
i=0;
floatvalue=NO;
cvalue[i]=curchr;

switch (curlex)
{
case plus:
nextchr();
break;
case minus:
nextchr();
break;
case digit:
nextchr();
break;
};
while(curlex==digit)
{
copyvch(&i,cvalue,maxvaluel);
nextchr();
};
if (curlex==dot)
{
floatvalue=YES;
copyvch(&i,cvalue,maxvaluel);
nextchr();
while(curlex==digit)
{
copyvch(&i,cvalue,maxvaluel);
nextchr();
};
};
if ( (curchr!=space)&&(curchr!=rightpar)&&(curchr!=left par) )error(9);
i++;
cvalue[i]='\000';
if (floatvalue)
{
fvalue=(float*)allocmem(sizeof(float));
/*
*fvalue=(float)utcton(&cvalue);
*/
sscanf(cvalue,"%f",fvalue);
valueobject-›typ=floatT;
(valueobject-›contents).floatv=fvalue;
}
else
{
ivalue=(int*)allocmem(sizeof(int));
/*
*ivalue=(int)utctoi(&cvalue);
*/
sscanf(cvalue,"%d",ivalue);
valueobject-›typ=intT;
(valueobject-›contents).intv=ivalue;
};
free(cvalue);
return(valueobject);
};

object * string()
/* string=quote [each without this quote ...] samequote */
{
void error();
void nextchr();
object *stringobject;
object *newobject();
void copyvch();
char *cstring;
int i;
char q1;

stringobject=newobject();
stringobject-›typ=stringT;
cstring=(char*)allocmem(maxstringl*sizeof(char));
(stringobject-›contents).string=cstring;
i=-1;

if (curlex!=quote) error(5);
q1=curchr;
nextchr();
while( (!ineof()) && (curchr!=q1) )
{
copyvch(&i,cstring,maxstringl);
nextchr();
};
i++;
cstring[i]='\000';
if (ineof())error(6);
return(stringobject);
};
Вложения:
Тип файла: zip FREESTYLISP.ZIP (53.3 Кб, 0 просмотров)

Последний раз редактировалось hacker7; 27.04.2017 в 16:12.
hacker7 вне форума  
Сказали "Спасибо" hacker7
MisterDi (27.04.2017)
Непрочитано 27.04.2017, 20:46  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Синтаксический анализатор это конечно хорошо, но у меня задача все-таки по-проще. Тупой набор цифр с названиями. Названия фиксированы и вписываются автоматически. Предложения по поводу валидации и надежности хранения дают дополнительную пищу для размышлений.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 27.04.2017, 21:14  
hacker7
Вид на жительство
 
Регистрация: 07.01.2007
Адрес: Ленинградская обл
Сообщений: 428
Сказал спасибо: 147
Сказали Спасибо 71 раз(а) в 56 сообщении(ях)
hacker7 на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Тогда вообще не понятно. Тогда изложите подробнее, кто\что формирует этот файл и что в нём. Если имена фиксированы, и порядок размещения фиксирован, и позиции тоже(?) - в чём проблема. Или допустима нек. свобода, но тогда в какой мере.
Вышеопис синт анализатор тоже лишь анализатор: цитирую:
/*
*fvalue=(float)utcton(&cvalue);
*/
sscanf(cvalue,"%f",fvalue);
Но по кр. мере мы можем (и должны) ожидать, что эти функции не зависнут и не выдадут неправильное, т к формат данных на их входе уже проверен.
Конечно, в идеале хотелось бы иметь такой пакет, к-рый и сами числа бы вычислял без опоры на внешние ф-ции и экзотику вроде sscanf, и конечно, желательно без фокусов вроде
n=(int)(c)-(int)('0');
где с - уже точно известно, что оно цифра
и конечно, без классов и без XML

А другой подход - сообщите, на чём оно должно работать, и м б найдётся соотв C и соотв б-ка программ.
Потому что в 8К ПЗУ никакой разбор чисел на С не влезет

Допустим, нужна имитация разбора ключ. формата вроде
ДЛИНА=0005.75
и никаких лишних пробелов
1) ищем подстроку ДЛИНА
2) прибавляем 1
3) с этого места ищем пробел или конец строки
4) то, что между ними - число, его на вход sscanfа
Для удовлетворения ТЗ это пойдёт. Это Вам любой пионер запрограммирует в 1-2 строки.
Но если подадут
Длина =0,7ВЫСОТА=.5
то оно рухнет
Имитатор если найдёте готовый, он наверняка будет под конкретный С

"Предложения по поводу валидации и надежности хранения дают дополнительную пищу для размышлений. "
Валидация или есть, или её нет (см. примеры выше и соотв пост от H4LF)
А как влияет надёжность хранения?
Храненя чего?
Этого INI-файла с ключевыми параметрами?
Или Вы опасаетесь, что исказится бинарный формат (чего не видно глазами), а если в текстовом "выбьет" символ, так это кто-то заметит и сообщит? Хотите ввести избыточность для надёжности? Параметры в динамике что ли через этот файл передаются сто раз в секунду, подвержены помехам? - тогда применять нормальные методы кодирования защищ. от ошибок а не эту самодеятельность с ключ пар-рами
Непонятна задача

"по-проще. Тупой набор цифр с названиями."
Тупо и попроще не получится. Только имитация заткнуть отчёт

Последний раз редактировалось hacker7; 27.04.2017 в 22:04.
hacker7 вне форума  
Непрочитано 28.04.2017, 05:32  
anton26ru
Вид на жительство
 
Аватар для anton26ru
 
Регистрация: 21.07.2009
Сообщений: 350
Сказал спасибо: 47
Сказали Спасибо 98 раз(а) в 58 сообщении(ях)
anton26ru на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

hacker7, как в анекдоте:
Нажмите, чтобы открыть спойлер
Идет мужик по улице, смотрит новый магазин. Дай, думает, зайду. Заходит, его встречает улыбающийся продавец и говорит: Здравствуйте, мы очень Вам рады, что бы Вы хотели приобрести?
Мужик подумал и говорит: — Ну, перчатки нужны.
Продавец: — Пройдите, пожалуйста в тот отдел.
Мужик подходит: — Здравствуйте, мне нужны перчатки.
Ему в ответ: — Вам какие летние или зимние?
М: Зимние.
П: Тогда пройдите в вон тот отдел.
М. пошел, спрашивает в очередном отделе: Здравствуйте, мне нужны перчатки.
П: Вам кожаные или нет?
М: Кожаные.
П: Тогда Вам в вон тот отдел.
М: не понял, но ладно, пошел.
Здравствуйте, мне нужны Зимние кожаные перчатки.
П: Вам с натуральным мехом или нет?
М.: С натуральным, конечно.
П: Вам надо в отдел напротив.
М. напрягается, но идет. В новом отделе повышенным голосом говорит:
«Мне нужны перчатки ЗИМНИЕ КОЖАНЫЕ С НАТУРАЛЬНЫМ МЕХОМ».
П: Вам с застежкой или без?
М: С застежкой!
П: Вытяните руку, растопырьте пальчики.
М: Пожалуйста.
П: Вам надо в соседний отдел.
М. (гневно): что это такое, Вы что надо мной издеваетесь?! Дайте мне перчатки, и я уйду.
П: Не волнуйтесь, мы просто хотим продать Вам именно то что Вы хотите, чтобы
Вы получили максимум удовольствия от покупки. Вы перчатки подбираете под это пальто?
М. в раздражении: Да! и идет дальше по отделам.
Подходит к следующему продавцу и с надрывом: — Мне нужные зимние кожаные с натуральным мехом и застежкой на эти руки к этому пальто перчатки!!!
П: Вам застежка нужна на кнопочке или молния?
М (на грани истерики): На кнопочке!!!
П: Вам надо вон к тому продавцу…
В этот момент распахиваются входные двери, в магазин заходит мужик, который
держит на вытянутых руках вырванный с корнем унитаз, по краям которого осталась еще плитка.
Подходит к прилавку и кричит:
Вот такой у меня унитаз, вот такая плитка, жопу я вам вчера показывал, дайте мне, наконец, туалетную бумагу!!!

Ну спросил человек совета, ну дали совет. В душу-то лезть зачем?
anton26ru вне форума  
Непрочитано 28.04.2017, 06:46  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,759
Сказал спасибо: 2,529
Сказали Спасибо 11,747 раз(а) в 5,885 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Человек спросил как попроще сохранить параметры в ТЕКСТОВОМ виде, тут же навернули проблем и всякаких сложностей, страстей господних и необходимость шифрования и применения искусственного интеллекта для исправления ошибок(?) и додумывания "а что же там должно быть вместо того, что есть на самом деле".

Если не дают покоя мысли об ошибках, можно выводить по одному параметру в строку (для упрощения разбора, в том числе, человеком). Человек вполне в состоянии найти и устранить ошибки в текстовом файле.

Ну а ежели кому неймется позаниматься ананизмом и подрочить мозги, можно завести аналогичную тему в "Отвлекитесь...", типа, "Ерундиция и смекакалка при сохранении параметров".
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 28.04.2017, 13:09  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,853 раз(а) в 2,924 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

На тему разбора строк - есть такая вещь как регулярные выражения (awk, perl). На cpan есть все исходники библиотек для C. Но нет никакого смысла запихивать их в МК.

Хеширование даёт ещё и контрольную сумму. Находится для всего файла без длины хеша и проверяется на соответствие записанному в хвосте файла. Примитивная борьба с подделкой данных.

Шифрование позволяет исключить (сильно снизить вероятность) эту подделку уже на более высоком уровне.

В 8k памяти запись/чтение для накопителя вместе с целевой задачей вместе уже не влезут. Там не до текста будет

Анализ данных на допустимость по значению и в комбинации с другими данными отдельная задача при разработке. Целесообразность, объём реализации тут сильно зависят ещё и от сферы применения продукта. Внешней утилитой такое в любом случае проще делать - там как минимум ресурсов значительно больше.

Задача, поставленная ТС, сильно зависит от контекста и ресурсов проекта. Отсюда избыточная многовариантность обсуждени. При более точных данных можно было и предметно разобрать и взвесить проект, подобрать оптимальную систему обработки,… пока только поток вариантов, без возможности оценки их применимости/оптимальности/…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создаем ПЛК на базе IEC 61131 kos_ua Микроконтроллеры, АЦП, память и т.д 330 29.01.2024 09:50
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27


Часовой пояс GMT +4, время: 18:01.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot