Миландр

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

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




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

Зарегистрирован: 2015-ноя-05 10:50
Сообщения: 17
Подскажите, кто использует данный стек. Где задается значение порта?


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

Зарегистрирован: 2012-апр-23 12:55
Сообщения: 47
ВНИМАНИЕ! Кто будет использовать данный пример, обратите внимание, что функция SendViaUDP(), которая работает с буфером контроллера Ethernet, не защищена от прерываний. А в прерывании от контроллера Ethernet тоже осуществляется доступ к буферу контроллера Ethernet. Сами понимаете, к чему это приведет рано или поздно. В примере функция SendViaUDP() вызывается из обработчика прерывания, а не в основном цикле программы, так что ничего страшного не происходит.
Для исправления ошибки в начале функции SendViaUDP() напишите:
Код:
uint32_t imr = ETHERNET->IMR;
ETHERNET->IMR = 0xFFFF; // маскируем прерывания от контроллера Ethernet.
а в конце:
Код:
ETHERNET->IMR = imr; // снова разрешаем прерывания


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

Зарегистрирован: 2014-ноя-05 07:19
Сообщения: 7
Сергей86 писал(а):
ВНИМАНИЕ! Кто будет использовать данный пример, обратите внимание, что функция SendViaUDP(), которая работает с буфером контроллера Ethernet, не защищена от прерываний. А в прерывании от контроллера Ethernet тоже осуществляется доступ к буферу контроллера Ethernet. Сами понимаете, к чему это приведет рано или поздно. В примере функция SendViaUDP() вызывается из обработчика прерывания, а не в основном цикле программы, так что ничего страшного не происходит.
Для исправления ошибки в начале функции SendViaUDP() напишите:
Код:
uint32_t imr = ETHERNET->IMR;
ETHERNET->IMR = 0xFFFF; // маскируем прерывания от контроллера Ethernet.
а в конце:
Код:
ETHERNET->IMR = imr; // снова разрешаем прерывания


НО

Все прерывания маскируемые. 1 в бите регистра маски прерываний (IMR) разрешает
соответствующее прерывание, 0 – запрещает соответствующее прерывание. (из даташита)


поэтому ETHERNET->IMR = 0x0000;


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

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


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

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


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

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