17.03.2009

ArduinoIDE 0014

В прошлую среду был выпущен новый Arduino IDE 0014, в основном - мелкие багфиксы:
  • пофиксили баг с исходящими соединениями Client в библиотеке Ethernet;
  • слегка модифицировали меню Tools|Boards;
  • обновили AVR MacPack до 20081213, включающий avr-gcc 4.3.2, для корректной работы функций, вызываемых из обработчиков прерываний.
Мака у меня нет, поэтому последний пункт проверить не могу. Второй пункт - тут проще картинку показать:
  • Arduino IDE 0013

  • Arduino IDE 0014


Улавливаете? Лично я понял так: Diecimila с ATmega328 в природе не бывает.

Тем не менее, я прямо сейчас созерцаю ее на своем столе. Оставим размышлять над этим наших итальянских товарищей по оружию.

И, наконец, о главном. Не знаю, поверите ли вы мне, но не так давно я писал поддержку 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-го релиза ;) ан - нет.

Комментариев нет:

Отправить комментарий