Прием и обработка строк в CVAVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

kupriyanov писал(а):А в вашем случае прога не висит в месте:

Код: Выделить всё

.
ch1 = getchar();
.
в случае, если на вход ничего не поступало????
виснет, и я об этом честно предупредил. в моем случае это совершенно не мешает, все реально нужные процессы выполняются в фоне.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре

Сообщение kupriyanov »

2 ARV

А ну да.... только щас заметил....
я этот момент решил проверкой

Код: Выделить всё

if(rx_counter){тут работа с getchar}
                      else return 0;

Так должно прокатить???
Any Problems????
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

kupriyanov, я вообще смутно представляю, как все будет работать, если прием в циклический буфер будет вестись параллельно с извлечением из буфера и обработкой... тут надо, как минимум, анализировать еще состояние "переполнения" буфера, а не только его пустоту... и потом, пока не дождались строки целиком - нельзя возвращать "негативный" результат... в общем, морока какая-то...

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

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре

Сообщение kupriyanov »

Видители, ARV

Разница в наших проектах в том, что я жду не команды,а ответы на "вопросы" и подтверждение выполнение команд.... То есть я знаю когда ждать ответ, и переполнить буффер вряд ли получиться. Мне не очень удобно чтобы основная прграмма висела в ожидании реакции телефона на команду
Any Problems????
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре

Сообщение kupriyanov »

Я, например пишу телефону команда, жду 500мс а потом

Код: Выделить всё

char get_string(char *str)
{ char ch1, ch;
int cntr=0;
if(rx_counter==0) return 0;
  do{ ch1 = getchar();				// получаем символ из потока ввода
		if((ch1 == '\n')||((ch1 == '\r')&&(!cntr))) continue;		// если это перевод строки - игнорируем
		if(ch1 == '\r') 				// если это возврат каретки,
		ch=0;   						// то это значит конец ввода,
		else   {ch = ch1; cntr++;}				// иначе символ надо сохранить
			*str++ = ch;				// сохраняем введенный символ

	} while (ch1 != '\r');				// если в потоке конец строки - выходим
 return cntr;
 }
Чуть переработанный под себя ваш код

Прграмма еще игнорирует первый возврат коретки (если он произошел перед появлением нужных символов)
Последний раз редактировалось kupriyanov Вс июн 28, 2009 16:31:24, всего редактировалось 1 раз.
Any Problems????
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

дело ваше, но ведь все равно: пока телефон не ответит, вы результат не знаете и никаких мер не предпринимаете, не так ли? то есть все равно получается - ожидаете...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре

Сообщение kupriyanov »

Почему же, если функция возвращает ноль - значит телефон затупил, выключился, или оторвался.....нужно попытаться его включить или лапки кверху..... орать что нет связи, а прождать ответа можео долго... :) по крайней мере до гав гав :)
Any Problems????
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

"Используй то, что под рукою и не ищи себе другое" (С) Дети капитана Гранта.
Что Вам нужно ? Прерывание по приему байта и прерывание по таймауту. И то, и другое кодевижин делает.
В прерывании по приему очередного байта Вы сбрасываете таймер таймаута. здесь же заполняете буфер приема, по его переполнению - ставите флаг - окончание приема и пишете условие выхода. Если переполнения нет, но вы нашли символ конца строки и строка имеет приемлемый вид - ок, еррор - установка флага конца приема с соответствующим условием. по переполнению таймера - тоже - флаг конца приема и условие - выход по таймауту. В основном цикле анализируем наличие флага конца приема - сбрасываем его, анализируем условие выхода и адекватно реагируем - от перезапуска питания на мобилке до продолжения обмена. Не ?
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»