Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-окт-20 13:44

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2014-дек-17 20:16 
Не в сети

Зарегистрирован: 2014-май-20 09:07
Сообщения: 91
Откуда: ЗАО "Московский Прожекторный завод"
Всем доброго времени суток!
Я сделал небольшую реализацию протокола UDP для 1986ВЕ1Т, но в силу криворукости и неопытности, работает она не долго, и отваливается по неизвестным мне ошибкам. Может быть кого-то интересует протокол UDP, если бы этот человек помог мне вычистить мои ошибки (Hard Fault, PC убегает за границы памяти программ), я бы с удовольствием поделился своими наработками.

Пока что библиотека умеет принимать данные, отправленные по протоколу UDP. Обрабатывает ARP-запросы, отвечает на ICMP Echo Request, принимает и отправляет данные по IP. Правда после пары минут работы обычно отваливается по Hard Fault, причину найти не могу в силу неопытности. Отвязывается от программы довольно легко, привязывается тоже нетрудно :) Есть клиент для Windows, который шлёт данные в пакетах по UDP (написан на C++ Builder, использует какой-то стандартный компонент, не помню, Indy кажется). Отправку данных по UDP микроконтроллером не закончил, т.к. занимаюсь вычисткой разных аппаратных ошибок, похоже, неправильно настроил прерывания или тактирование. Отправку данных реализую за несколько часов, это вопрос чисто технический.

Конечно, гораздо лучше использовать lwIP или uIP, но это при условии, что Вы можете их настроить и использовать для работы с UDP. Я вот не могу, поэтому пришлось писать свой стек.

Ногами не пинайте, если что :)


Вложения:
Комментарий к файлу: Стек + Драйверы + Программа
ARP+IP+ICMP+UDP.rar [1.49 МБ]
Скачиваний: 345
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2014-дек-18 11:14 
Не в сети

Зарегистрирован: 2014-фев-18 09:22
Сообщения: 20
Откуда: Нск
ИМХО проще разобраться с uIP, по uIP инфы много, и людей знающих тоже. А так изобретать велосипед нерационально.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2014-дек-18 14:46 
Не в сети

Зарегистрирован: 2014-май-20 09:07
Сообщения: 91
Откуда: ЗАО "Московский Прожекторный завод"
MaxK писал(а):
ИМХО проще разобраться с uIP, по uIP инфы много, и людей знающих тоже. А так изобретать велосипед нерационально.


Ну, я почему-то не смог найти в разумные сроки знающих людей, а протокол UDP в документации на uIP не раскрыт. Примеров программ с UDP там нет.

А аппаратную ошибку я вычистил :) Всё работает :)


Вложения:
Комментарий к файлу: Проект UDP-клиента для связи с платой для среды Borland C++ Builder 6.
UDP-клиент.rar [771.74 КБ]
Скачиваний: 331
Комментарий к файлу: Exe-файл для ОС Windows. UDP-клиент для связи с платой.
Project1.rar [266.4 КБ]
Скачиваний: 288
Комментарий к файлу: UDP-Сервер. Возвращает данные, отправленные ему по протоколу UDP.
MAC+ARP+IP+ICMP+UDP.rar [1.48 МБ]
Скачиваний: 343
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2014-дек-22 10:40 
Не в сети

Зарегистрирован: 2014-май-20 09:07
Сообщения: 91
Откуда: ЗАО "Московский Прожекторный завод"
Добавил правильный расчёт контрольной суммы протокола UDP. Вместо нулей. Теперь всё уж точно нормально работает.


Вложения:
Комментарий к файлу: Проект UDP-программы для 1986ВЕ1Т для среды Keil v5.11
Пример реализации UDP для 1986ВЕ1Т.rar [1.49 МБ]
Скачиваний: 681
Комментарий к файлу: Скомпилированная UDP-программа для Windows, для связи с отладочной платой 1968ВЕ1Т по протоколу UDP
Project1.exe.rar [267.71 КБ]
Скачиваний: 464
Комментарий к файлу: Файлы проекта UDP-программы для Borland C++ Builder, для связи с отладочной платой 1968ВЕ1Т по протоколу UDP.
UDP-клиент + UDP-сервер.rar [491.12 КБ]
Скачиваний: 495
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-янв-13 15:02 
Не в сети

Зарегистрирован: 2014-авг-25 10:34
Сообщения: 18
Спасибо большое за пример!
Подскажите, запускаю компилить проект в кейле 5.10.0.2 выдаёт 4-ре ошибки, у меня что-то с компилятором не то?

з.ы.
сорри - не заметил что кейл нужен 5.11


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-фев-17 15:29 
Не в сети

Зарегистрирован: 2014-фев-17 10:09
Сообщения: 16
Откуда: Рязань
Очень хочется проверить работу Вашего примера, можете выложить схему? хотя бы того что касается ethernet.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-фев-18 08:43 
Не в сети

Зарегистрирован: 2014-май-20 09:07
Сообщения: 91
Откуда: ЗАО "Московский Прожекторный завод"
actclekcz писал(а):
Очень хочется проверить работу Вашего примера, можете выложить схему? хотя бы того что касается ethernet.


Пример работает на отладочном комплекте для контроллера 1986ВЕ1Т, на нём Ethernet уже подключен.
Схема подключения в части Ethernet приведена техническом описании контроллера 1986ВЕ1Т, в разделе "Контроллер Ethernet".

Я, конечно, могу поискать и выложить, но, ИМХО, лучше Вам самому поискать на форуме и в техническом описании.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-фев-18 15:05 
Не в сети

Зарегистрирован: 2014-фев-17 10:09
Сообщения: 16
Откуда: Рязань
Спасибо, все нашел включил и все сразу заработало! Есть вопрос по быстродействию при обмене данными с программой из архива наблюдаются задержки с ответами, arp и пинг очень редко начинает работать, пинг по 5 секунд и много потерь.
Буду сейчас искать откуда такие задержки появляются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-фев-20 18:57 
Не в сети

Зарегистрирован: 2014-май-20 09:07
Сообщения: 91
Откуда: ЗАО "Московский Прожекторный завод"
actclekcz писал(а):
Спасибо, все нашел включил и все сразу заработало! Есть вопрос по быстродействию при обмене данными с программой из архива наблюдаются задержки с ответами, arp и пинг очень редко начинает работать, пинг по 5 секунд и много потерь.
Буду сейчас искать откуда такие задержки появляются.


Такое было на первых версиях программы, когда по прерыванию от контроллера Ethernet программа считывала только один пакет из буфера и отвечала на него. В последних версиях программа, при прерывании от Ethernet, отвечает на все пакеты, находящиеся в буфере приёма, и такой проблемы не стало. Т.к. прерывание "получен пакет" отключается при обработке пакета, а в это время могут прийти ещё пакеты, которые останутся не обслуженными. В последней версии, если не ошибаюсь, эта ошибка исправлена.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-ноя-16 21:36 
Не в сети

Зарегистрирован: 2012-апр-23 12:55
Сообщения: 47
Спасибо огромное! Скачал и сразу заработало! Сижу и слезы наворачиваются, когда еще такое повторится?

У меня первая версия отладочной платы без дополнительного резонатора на 25 МГц, поэтому пришлось закомментировать дефайны
//#define REVISION_2
//#define HSE2_OSCILLATOR
#define SPEED_100M
Оказалось, они у Вас объявлены дважды: в файле config.h и в файле RST_CLK.c.
В настройках программатора у Вас стоит Verify, что не рекомендуется делать из-за errata 0007.

Если кому нужен UDP вот прям щас - качайте, не пожалеете. Проект аккуратный, хорошо структурированный, с комментариями.
Еще раз спасибо. Дай Вам Бог здоровья и успехов в работе!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-дек-01 15:24 
Не в сети

Зарегистрирован: 2015-окт-02 16:13
Сообщения: 28
Добрый день.
Спасибо за проект! Скачал, скомпилил, но пока не запускал.
Не могу понять один вопрос: У меня отладочная плата под 1986ВЕ1Т 4-я ревизия, на плате отсутствует генератор на 25 МГц на том месте где HSE2. Запустится ли у меня этот проект?
И есть еще один вопрос: Надо ли коментить строки //#define REVISION_2 //#define HSE2_OSCILLATOR?

Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-дек-01 16:29 
Не в сети

Зарегистрирован: 2012-апр-23 12:55
Сообщения: 47
Посмотрел схему платы 4-й ревизии. Я ошибся. Там нет дополнительного генератора на 25 МГц. Просто этот генератор подключен через отдельные выводы PF0 и PF1 (ножки 27 и 28), а не к OSC_IN и OSC_OUT (ножки 53 и 54). Посмотрите внимательнее, на плате должен быть генератор раз на схеме есть. Если его нет (плата бракованная), работать без генератора не будет при любых дефайнах. Если он есть, то дефайны комментировать не надо для платы 4-й ревизии. Удачи!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-дек-01 17:42 
Не в сети

Зарегистрирован: 2015-окт-02 16:13
Сообщения: 28
Цитата:
Посмотрел схему платы 4-й ревизии. Я ошибся. Там нет дополнительного генератора на 25 МГц. Просто этот генератор подключен через отдельные выводы PF0 и PF1 (ножки 27 и 28), а не к OSC_IN и OSC_OUT (ножки 53 и 54). Посмотрите внимательнее, на плате должен быть генератор раз на схеме есть. Если его нет (плата бракованная), работать без генератора не будет при любых дефайнах. Если он есть, то дефайны комментировать не надо для платы 4-й ревизии.

Нашел резонатор на обратной стороне платы. Запустил проект и все заработало! И пинг в том числе. Спасибо огромное!
Теперь разбираюсь с проектом, ищу указатели на буфера откуда забирать принятые данные и разбираюсь как самому отправить посылку....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-дек-01 17:51 
Не в сети

Зарегистрирован: 2012-апр-23 12:55
Сообщения: 47
Когда приходит посылка вызывается функция
Код:
void OnUDPReceive (IP_Address SrcIP, uint16_t SrcPort, uint16_t DstPort, void* pUDPData, uint16_t Size)

из файла Application.c и ей в качестве параметров передаются принятые данные. Вам надо внутри этой функции реализовать обработку принятых данных.
Для посылки данных используется функция
Код:
void SendViaUDP (IP_Address DstIP, uint16_t DstPort, uint16_t SrcPort, void* Data, uint16_t DataSize)

из файла UDP.c


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Протокол UDP для 1986ВЕ1Т
СообщениеДобавлено: 2015-дек-02 12:05 
Не в сети

Зарегистрирован: 2015-окт-02 16:13
Сообщения: 28
Спасибо еще раз.
То, что данные надо получать в функции OnUDPReceive() это я понял. Я не смог понять как их вытащить из void* pUDPData и какого они формата? Поясните пожалуйста если можно. Я с такой формой данных сталкиваюсь впервые. Обычно использовал простой указатель на буфер где лежат данные и размер данных.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB