Аvrstudio/c#/песочница
24.12.2012, 18:33
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: avrstudio/c#/песочница
0xA, то в _line[pos] yt ghjgbcsdftncz
|
|
|
|
24.12.2012, 18:36
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: avrstudio/c#/песочница
Сообщение от whoim
|
|
\r\n уже есть
|
Откуда он взялся? h0A же в буфер не заносилось. Вместо него "0"
Упс, опередили.
|
|
|
|
24.12.2012, 18:39
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
Оо щас сверю.. просто раньше я парсил \n, и 0x00 писал в следующий байт буфера, в итоге в конце \r\n\0
|
|
|
|
24.12.2012, 18:42
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
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.
|
|
|
|
24.12.2012, 19:03
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: avrstudio/c#/песочница
Сообщение от whoim
|
Вот так сейчас.. вывод - через одну строчку теряет байты..
Причем доходит до смешного. Комментируем вывод _line, расскоментируем вывод пришедшего байта - все хорошо. Расскоментируем вывод _line - бред начинает творится и в выводе побайтно, и в выводе _line
Как только настроишь приемник на выкидывание одной строки (например GPRMC) - все отлично.
|
Не парьтесь. Перейдите полностью на работу по прерываниям. Организуйте несколько буферов. Организуйте несколько независимых потоков. "Махайте семафорами" и "перещелкивайте буфера". Поставьте скорость вывода больше скорости приема.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
24.12.2012, 20:05
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
ut1wpr, ужс какой  осилить надо еще..
вроде как у меня счас "полностью" по прерыванию и есть? зачем несколько потоков если канал получения байтиков один? зачем несколько буферов если реально нужен один? получил в него данные, пропарсил раскидав по переменным в структуре - дальше..
Последний раз редактировалось whoim; 24.12.2012 в 20:26.
|
|
|
|
24.12.2012, 20:13
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
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 то хватает для сообщения ?
|
|
|
|
24.12.2012, 20:23
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Длинны хватает с большим запасом.
Примерно так работает (прием в прерывании RX) если приемник выкидывает однотипные строки. Как только настраиваешь его на выкидыш двух строк подряд, вторая строка теряется.
Отключаешь все в прерывании и делаешь только прием байта и тут же выкидывание в терминал через второй уарт - все замечательно.
Пытаешься собрать в буфер и по \n выкинуть во второй уарт весь буфер - трабла. При этом любой другой текст и массивы выкидываются без проблем..
Я писал, до смешного доходит.
Принимаем байт
Выводим байт во второй уарт
Парсим, кидаем в буфер, а если конец строки \n то //показываем буфер и
обнуляем счетчик индекса "массива"
Вот так - показывает верно, а если расскоментировать показ буфера - начинает врать на четных строках и в выводе БАЙТА, и в выводе буфера. То есть как будто перестает принимать байты исключительно из за расскоментирования вывода буфера!
Но, повторюсь, только если приемник шлет две строки подряд
$типпротокола1,данные,данны е,данные*КС\r\n
$типпротокола2,данные,данны е,данные*КС\r\n
..задержка..
по новой
Если же оставить один тип протокола - все работает сцкнх...
Пытался ставить флаг "занято" и проверку, чтобы если прерывание РХ не успело завершиться - я увидел сообщение отладочное.. не увидел!
Попробую скорости уменьшить.. Уарта..
|
|
|
|
24.12.2012, 20:26
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
завтра.. на работе..
|
|
|
|
24.12.2012, 21:57
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Ну так все просто как мычание. Два сообщения идут один за другим каждую секунду. Пэтому пока Вы передаете первое сообщение, второе тереятся - приемник то стоит. Подпрограмму передачи строки в студию !!
Глянем как она работает, Прерывания ей ведомы иль "детский сад" ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Песочница по С
|
RY723 |
Электроника - это просто |
0 |
27.02.2011 14:05 |
Часовой пояс GMT +4, время: 23:59.
|
|