Аvrstudio/c#/песочница
25.12.2012, 09:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от whoim
|
|
Получается, я, пока у меня идет вывод - теряю байтики в регистре data потому что не забрал их?
|
Ну типа того.
|
PHP код:
|
//отладка
RS485_send_str(_gnss_line);RS485_send_str("\r\n");
_gnss_pos = 0;
|
Пока в прерывании приёма данных работает передача, байтики и теряются.
Тут надо просто копировать буфер приёмника в буфер передатчика, ставить флаг разрешения передачи из буфера передатчика и выносить процедуру передачи наружу из текущего прерывания. Буферы приёмника и передатчика, естественно, раздельные. Либо, как тонко подметил ut1wpr, переключать буферы приёмника и передатчика.
|
|
|
|
25.12.2012, 10:48
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Лучше всего передачу посадить на прерывания. На худой конец - разрешить прерывания перед началом передачи, что б работал прием на фоне передачи.
|
|
|
|
25.12.2012, 11:04
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
ага, примерно понял.. не хочется заводить кучу буферов для разных usart, но видимо придется..
Итак, логика работы..
в прерывании по приходу байтиков в usart мы загоняем пришедшее в буфер, а если встретим \r\n (ну видимо \r) то копируем текущий буфер во временный (передача в другой уарт мне нужна только для отладки, потом там будет обработка) и ставим какой нить свой флаг, который мониторим в прерывании таймера (есть таймер 1миллсек), там первым делом снимаем этот флаг и передаем второй буфер на передачу или парсинг. Так?
|
|
|
|
25.12.2012, 11:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Ставим флаг разрешения передачи и запускаем передачу.
В прерывании по опустошению регистра данных USART загружаем следующий байт и так до опустошения буфера. На последнем байте сбрасываем флаг разрешения передачи (а он вообще нужен?  ).
И никаких таймеров.
|
|
|
|
25.12.2012, 11:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от omercury
|
Ставим флаг разрешения передачи и запускаем передачу.
В прерывании по опустошению регистра данных USART загружаем следующий байт и так до опустошения буфера. На последнем байте сбрасываем флаг разрешения передачи (а он вообще нужен? ).
И никаких таймеров.
|
Да мне передача нужна пока только как отладка, потом кучу других вещей взамен делать. Думаю, надо иметь промежуточных механизм, а там уже хоть передача в другой уарт, хоть что. передача в этот уарт (C1) нужна только при старте для конфигурации модуля
|
|
|
|
25.12.2012, 11:24
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Ну, что значит "не хочется" в лексике программера?  Рядышком должны быть и аргументы.
А работать с двумя асинхронными потоками по каким-то там вотчпсам - моветон. Вы имеете два события. Они и должны вызывать действия-реакцию. Не надо пытаться их синхронизировать собаками. Первое событие - приперся байт. Надо с ним что-то делать. Делаем. Второе событие - готово содержимое буфера для передачи. Надо передавать.
Проведите аналогию с бассейном и трубами. Ваши буфера - это бассейн.
Количество буферов будет зависеть от скорости входного потока и от скорости выходного. Полная аналогия с диаметрами труб. Если вы не сбалансируете дебет и кредит - бассейн начнет выплескивать лишнее.
Детали не буду расписывать. Вам гораздо важнее понять общую концепцию. Да и полезнее самому понять-написать-отладить, чем ждать готового решения. Готовое может быть только у вас. Никто, кроме вас не знает тонкостей ваших задач в совокупности. Естественно, никто особенно и не рвется их узнавать
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
25.12.2012, 11:25
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
В принципе, в прерывании таймера взамен флага "есть чо" можно проверять первый байтик буфера. Если в нем не ноль (а то и $ - признак вменяемых данных) - то есть чо парсить. Если же там \0, который мы по окончании парсинга будем туда ручками ставить - то ловить нечего, из уарта еще не добежало до комплекта данных. \n в прерывании по приходу данных успешно потеряется, если простое условие организуем: если \r, то копируем буфер0 в буфер1 и обнуляем позицию, иначе кидаем в буфер0 новый байтик и ++ позицию..
Как быстрее всего закопировать char buff1[200] в char buff2[200] ориентируясь, что если в середке \0 то далее можно не копировать?
|
|
|
|
25.12.2012, 11:27
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от whoim
|
|
Да мне передача нужна пока только как отладка, потом кучу других вещей взамен делать.
|
А может, какой-нибудь другой способ отладки принять? Время-то идет, уже бы и отладили...
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
25.12.2012, 11:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от ut1wpr
|
|
Рядышком должны быть и аргументы.
|
да согласен, имел ввиду - ищу альтернативу)
Сообщение от ut1wpr
|
|
торое событие - готово содержимое буфера для передачи. Надо передавать.
|
Так опять же - передача на этапе отладки. Далее будут расчеты всякие, парсинг, ложение в структуру..
Сообщение от ut1wpr
|
|
Да и полезнее самому понять-написать-отладить, чем ждать готового решения. Готовое может быть только у вас
|
Ну так за этим я и тут  В принципе, проблему понял. Буду решать. На работе свет отрубили (
Щас дома организуюсь..
|
|
|
|
25.12.2012, 11:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от ut1wpr
|
|
А может, какой-нибудь другой способ отладки принять?
|
Способ узнать, вменяемые ли данные в буфере для парсинга?)
Я с этого и начал - парсить перестало нормально)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Песочница по С
|
RY723 |
Электроника - это просто |
0 |
27.02.2011 14:05 |
Часовой пояс GMT +4, время: 06:33.
|
|