Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Аvrstudio/c#/песочница

Непрочитано 24.12.2012, 18:33  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

0xA, то в _line[pos] yt ghjgbcsdftncz
Реклама:
Boba_spb вне форума  
Непрочитано 24.12.2012, 18:36  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Сообщение от whoim Посмотреть сообщение
\r\n уже есть
Откуда он взялся? h0A же в буфер не заносилось. Вместо него "0"

Упс, опередили.
omercury вне форума  
Непрочитано 24.12.2012, 18:39  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Оо щас сверю.. просто раньше я парсил \n, и 0x00 писал в следующий байт буфера, в итоге в конце \r\n\0
whoim вне форума  
Непрочитано 24.12.2012, 18:42  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Код:
	if(_char == '$')
	{
		gnss_flags |= PIN6_bm; //разрешаем
		_pos = 0; //обнуляем счетчик
	}		
	
	if(_char == '\n') //символ окончания строки \r, первый встречающийся
		{
			gnss_flags&=~PIN6_bm; //запрещаем
			_line[_pos] = 0x00; //EOF		
			//отладка
			RS485_send_str(_line);RS485_send_str("\r\n");
			_pos = 0;
			//вачдог порта
			gnss_parse_line(); //тут пока ничего нет, только вачдог-таймер
		}	
	if(gnss_flags&PIN6_bm) //если разрешено
		{
			_line[_gnss_pos] = _char;
			_pos++; //increment counter
		}
Вот так сейчас.. вывод - через одну строчку теряет байты..

Причем доходит до смешного. Комментируем вывод _line, расскоментируем вывод пришедшего байта - все хорошо. Расскоментируем вывод _line - бред начинает творится и в выводе побайтно, и в выводе _line

Как только настроишь приемник на выкидывание одной строки (например GPRMC) - все отлично.

Последний раз редактировалось whoim; 24.12.2012 в 18:45.
whoim вне форума  
Непрочитано 24.12.2012, 19:03  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Сообщение от whoim Посмотреть сообщение
Вот так сейчас.. вывод - через одну строчку теряет байты..
Причем доходит до смешного. Комментируем вывод _line, расскоментируем вывод пришедшего байта - все хорошо. Расскоментируем вывод _line - бред начинает творится и в выводе побайтно, и в выводе _line
Как только настроишь приемник на выкидывание одной строки (например GPRMC) - все отлично.
Не парьтесь. Перейдите полностью на работу по прерываниям. Организуйте несколько буферов. Организуйте несколько независимых потоков. "Махайте семафорами" и "перещелкивайте буфера". Поставьте скорость вывода больше скорости приема.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 24.12.2012, 20:05  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Аvrstudio/c#/песочница

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

Последний раз редактировалось whoim; 24.12.2012 в 20:26.
whoim вне форума  
Непрочитано 24.12.2012, 20:13  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Аvrstudio/c#/песочница

А вообще то,для чего все это?

Может так и оставить все раз работает;
unsigned char _line[256];
int pos=0;
uint8_t _char;
while(1)
{
_char = _read_byte();
_line[pos++]=_char;
if (_char != 0xA )
{
continue;
}
_line[pos++]=0;
pos=0;
RS485_send_str(_line);
}

Вот токо если RS485_send_str() не на прерываниях работает, то пока она не передаст все, все прижедшие байты в приемник пропадут - получите только кончик посылки на приемнике.

Длины _line то хватает для сообщения ?
Boba_spb вне форума  
Непрочитано 24.12.2012, 20:23  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Аvrstudio/c#/песочница

Длинны хватает с большим запасом.
Примерно так работает (прием в прерывании RX) если приемник выкидывает однотипные строки. Как только настраиваешь его на выкидыш двух строк подряд, вторая строка теряется.

Отключаешь все в прерывании и делаешь только прием байта и тут же выкидывание в терминал через второй уарт - все замечательно.

Пытаешься собрать в буфер и по \n выкинуть во второй уарт весь буфер - трабла. При этом любой другой текст и массивы выкидываются без проблем..

Я писал, до смешного доходит.

Принимаем байт
Выводим байт во второй уарт

Парсим, кидаем в буфер, а если конец строки \n то //показываем буфер и
обнуляем счетчик индекса "массива"

Вот так - показывает верно, а если расскоментировать показ буфера - начинает врать на четных строках и в выводе БАЙТА, и в выводе буфера. То есть как будто перестает принимать байты исключительно из за расскоментирования вывода буфера!

Но, повторюсь, только если приемник шлет две строки подряд
$типпротокола1,данные,данны е,данные*КС\r\n
$типпротокола2,данные,данны е,данные*КС\r\n
..задержка..
по новой

Если же оставить один тип протокола - все работает сцкнх...

Пытался ставить флаг "занято" и проверку, чтобы если прерывание РХ не успело завершиться - я увидел сообщение отладочное.. не увидел!

Попробую скорости уменьшить.. Уарта..
whoim вне форума  
Непрочитано 24.12.2012, 20:26  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Аvrstudio/c#/песочница

завтра.. на работе..
whoim вне форума  
Непрочитано 24.12.2012, 21:57  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Аvrstudio/c#/песочница

Ну так все просто как мычание. Два сообщения идут один за другим каждую секунду. Пэтому пока Вы передаете первое сообщение, второе тереятся - приемник то стоит. Подпрограмму передачи строки в студию !!
Глянем как она работает, Прерывания ей ведомы иль "детский сад" ?
Boba_spb вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Песочница по С RY723 Электроника - это просто 0 27.02.2011 14:05


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.