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

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

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

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

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

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

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

 
Опции темы
Непрочитано 28.04.2017, 13:14  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,771 раз(а) в 5,896 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Сообщение от mike-y-k Посмотреть сообщение
Задача, поставленная ТС, сильно зависит от контекста и ресурсов проекта. Отсюда избыточная многовариантность обсуждени. При более точных данных можно было и предметно разобрать и взвесить проект, подобрать оптимальную систему обработки,… пока только поток вариантов, без возможности оценки их применимости/оптимальности/…
А если так?
Сообщение от MisterDi Посмотреть сообщение
Процессор НИОС-2 операционной систем нет, в файл пишется содержимое регистров периферийных устройств. Данные пишутся на SD-карту. Собственно это привинчивание внешней памяти к моему DSO
Но тут
Сообщение от MisterDi Посмотреть сообщение
порядок следования - произвольный
он, видимо, несколько погорячился, излишне усложнив задачу.
Реклама:
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 29.04.2017, 00:11  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Для NIOS II как раз оптимальнее не развлекаться с лишним текстовым геморроем, а сделать нужное именно на ПК.
Речь в данном случае идёт больше наверное о пресетах для DSO и громоздить их обработку может стать себе дороже. В свободную память лучше анализаторы протоколов и FFT поместить .
А для настройки/корректировки/клонирования создать простенькую программу для ПК.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 29.04.2017, 11:04  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Попробуйте так, как делаю я:

Нажмите, чтобы открыть спойлер

Код:
#define INI_STR_TYPE_UNKNOWN	0x00
#define INI_STR_TYPE_COMMENT	0x01
#define INI_STR_TYPE_SECTION	0x02
#define INI_STR_TYPE_CONF_LINE	0x03
#define INI_STR_TYPE_ERROR	0x04
#define INI_STR_TYPE_EMPTY	0x05

void StrToTokens(char *text, uint8_t StrLen, uint8_t *tokens, uint8_t *tokensCount, uint8_t *strtype) {
	uint8_t i, j;
	j = 0;
	i = 0;
	*strtype = INI_STR_TYPE_UNKNOWN;
	*tokensCount = 0;
	if (StrLen ‹= 1) {
		// Слишком короткая строка - Скорее всего, она пустая.
		*strtype = INI_STR_TYPE_EMPTY;
		return;
	};
	// Поиск символа отличного от пробела
	while ((text[i] ‹= ' ') && (i‹=StrLen)) { i++; };
	// Комментарий. Обработка не нужна.
	if ((text[i] == ';') || (text[i] == '#')) { *strtype = INI_STR_TYPE_COMMENT; return; };
	// Секция.
	if (text[i] == '[') { *strtype = INI_STR_TYPE_SECTION; i++; };
	tokens[0] = i;
	if (*strtype == INI_STR_TYPE_SECTION) {
		while((text[i] != ']') && (i‹StrLen)) { i++; };
		if (i›=StrLen) {
			// Ошибка! Уехали за конец строки, а окончание названия секции так и не нашли. =(
			*strtype = INI_STR_TYPE_ERROR;
			return;
		} else {
			// Проверка на пустую секцию - []
			if (i == tokens[0]) {
				*strtype = INI_STR_TYPE_ERROR;
				return;
			};
			text[i] = 0;		// Конец токена.
		};
	} else {
		// Если добрались до сюда - вероятно, это линия с конфигурацией.
		*strtype = INI_STR_TYPE_CONF_LINE;
		// Теперь самое интересное.
		j = 0;
		i = tokens[j];
		// Ищем что-то из символов [ ;:=#] или конец строки
		while (i ‹ StrLen) {
			if (j ‹ 4) {
				tokens[j] = i;
				while ((text[i] != ' ') && (text[i] != '=') && (text[i] != ':') && (text[i] != ';') && (text[i] != '#') && (i ‹ StrLen)) {
					i++;
				};
				// Если пробелы и/или равно - пропускаем. Этим я, конечно, сильно отступаю от правил работы с INI, но не столь фатально для себя.
				// В моём случае любая запись из нижеприведёных будет действовать:
				// Field = Value
				// Field=Value
				// Field:Value
				// Field Value ‹-- Даже эта! Но всем пофиг! (с)
				while ((text[i] == ' ') || (text[i] == '=') || (text[i] == ':')) {
					text[i] = 0;
					i++;
				};
				if ((text[i] == ';') || (text[i] == '#')) {
					// Дальше комментарии.
					*tokensCount = j+1;
					return;
				};
				j++;
			} else {
				break;
			};
		};
		*tokensCount = j;
	};
};


(Внутри другой процедуры, открывшей конфигурационный файл)

wr_pos = 0;
while (fp.fsize › fp.fptr) {
	result = f_read(&fp, &s, 1, &ReadBytes);
	if (ReadBytes) {
		EOL = 0;
		if (s == '\r') {
			EOL = 1;
		};
		if (s == '\n') {
			EOL = 1;
		};
		if (!(EOL)) {
			txt_string[wr_pos] = s;
			wr_pos++;
		} else {
			txt_string[wr_pos] = 0;
			StrToUpper(txt_string);
			StrToTokens(txt_string, wr_pos, (uint8_t*)&(Tokens[0]), &nTokens, &StrType);
			if (!(strcmp("ADDRESS", (char*)&(txt_string[Tokens[0]])))) {
				SYS_IP = StrToIP((char*)&(txt_string[Tokens[1]]));
			};
			if (!(strcmp("NETMASK", (char*)&(txt_string[Tokens[0]])))) {
				SYS_NET_MASK = StrToIP((char*)&(txt_string[Tokens[1]]));
			};
			if (!(strcmp("GATEWAY", (char*)&(txt_string[Tokens[0]])))) {
				SYS_GW = StrToIP((char*)&(txt_string[Tokens[1]]));
			};
			if (!(strcmp("HWADDRESS", (char*)&(txt_string[Tokens[0]])))) {
				SetMac((char*)&(txt_string[Tokens[1]]));
			};
			if (!(strcmp("SERVERIP", (char*)&(txt_string[Tokens[0]])))) {
				SYS_SERVER_IP = StrToIP((char*)&(txt_string[Tokens[1]]));
			};
			if (!(strcmp("SERVERPORT", (char*)&(txt_string[Tokens[0]])))) {
				SYS_SERVER_PORT = StrToInt((char*)&(txt_string[Tokens[1]]));
			};
			if (!(strcmp("NTPSERVER", (char*)&(txt_string[Tokens[0]])))) {
				SYS_NTP_SERVER = StrToIP((char*)&(txt_string[Tokens[1]]));
			};
			if (!(strcmp("TIMEZONE", (char*)&(txt_string[Tokens[0]])))) {
				i = 0;
				m = 1;
				v = 0;
				while ((s = txt_string[Tokens[1]+i])) {
					if ((s ›= '0') && (s ‹= '9')) {
						v = v*10 + (s - '0');
					} else {
						if (s == '-') {
							m = -1;
						};
					};
					i++;
				};
				v = v * m;
				SYS_TIME_ZONE = v;
			};
			wr_pos = 0;
		};
	};
};


Суть сего кода:
Открывается файл конфигурации, читается по байту (встроенное чтение файла читает не всегда корректно), находится конец строки (можно регулировать в коде), преобразовывается в верхний регистр, разбивается на токены, производится сравнение, затем полученый от функции ответ анализируется и преобразовывается из токенов в пары "Параметр" / "Значение". А последний уже анализируется и пишется куда нужно.
Функции преобразования - самописные.
-Alan- вне форума  
Эти 3 пользователя(ей) сказали Спасибо -Alan- за это сообщение:
H4LF (29.04.2017), hacker7 (29.04.2017), MisterDi (01.05.2017)
Непрочитано 29.04.2017, 18:46  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Собственно по .h со структурой того пресета разбор с выводом на лету и редактированием пишется на том же perl и никаких проблем. Текстовый файл даже не нужен. Самое удобное (не страдать с выводом на экран) - cgi скрипт. Но есть и оконные библиотеки.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 02.05.2017, 21:41  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

-Alan-, вот в этой строчке:
PHP код:
while((text[i] != ']') && (i=StrLen) { 
форум съел вот это:
PHP код:
StrLen)) { i++; };
        if (
i› 
Из-за знаков "меньше" и "больше". Чудятся ему злобные XSS что-ли... и даже тег [код] не помог. Видимо, надёжнее всего прикреплять файл *.c или *.txt
Ну и небольшой вопрос заодно - зачем тут:
Код:
strcmp("ADDRESS", (char*)&(txt_string[Tokens[0]]))
нужно приведение типа указателя txt_string к типу char? Разве txt_string и так не char?
H4LF вне форума  
Непрочитано 05.05.2017, 14:23  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Сохранение и загрузка настроек в текством файле

Действительно.
Прикрепил файл с нарезкой кода.
code.txt
-Alan- вне форума  
Сказали "Спасибо" -Alan-
MisterDi (08.05.2017)
 

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

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

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

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

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


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


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