- пофиксили баг с исходящими соединениями Client в библиотеке Ethernet;
- слегка модифицировали меню Tools|Boards;
- обновили AVR MacPack до 20081213, включающий avr-gcc 4.3.2, для корректной работы функций, вызываемых из обработчиков прерываний.
- Arduino IDE 0013
- Arduino IDE 0014
Тем не менее, я прямо сейчас созерцаю ее на своем столе. Оставим размышлять над этим наших итальянских товарищей по оружию.
И, наконец, о главном. Не знаю, поверите ли вы мне, но не так давно я писал поддержку UDP и очень долго втыкался в такой вот код в Client::connect:
_srcport++;
// XXX: what port should we connect from?
socket(_sock, Sn_MR_TCP, _port, 1024 + _srcport);
Смысл вроде бы как простой: _scrport - это инкриментируемое при каждом коннекте значение исходящего порта (именно при выпуске 0013 это инкремент и добавили, собственно ;). Но прототип socket выглядит так:
uint8 socket( SOCKET s, uint8 protocol, uint16 port, uint8 flag)
Получается, что агрумент port - это значение _port (порт назначения, заметьте!), а flag - это 1024+_srcport. А меж тем flag - это флаги, которые засылаются в регистр MR чипа Wiznet. Признаюсь, эта конструкция сильно сбила меня с толку: немного потупив, написал свой код - правильный, но для UDP. Помню, мелькнула мысль - "на форуме спросить, что ли?".
Так вот, они его поправили! Теперь это выглядит так:
_srcport++;
socket(_sock, Sn_MR_TCP, 1024 + _srcport, 0);
Я-то думал, что только у нас в конторе код правильно пишут с 10-го релиза ;) ан - нет.
Комментариев нет:
Отправить комментарий