Вопросы по коду

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Вопросы по коду

Сообщение Alex » Вт авг 22, 2017 9:40 am

В библиотеке Ethernet, в файле w5100.h есть функции

Код: Выделить всё

void W5100Class::setRetransmissionTime(uint16_t _timeout) {
  writeRTR(_timeout);
}

void W5100Class::setRetransmissionCount(uint8_t _retry) {
  writeRCR(_retry);
} 
Вопрос:

где можно посмотреть функции writeRTR() и writeRCR() и как узнать установки по умолчанию для времени передачи и количеству повторов?
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Вопросы по коду

Сообщение olehs » Вт авг 22, 2017 10:41 am

http://www.wiznet.co.kr/wp-content/uplo ... v1.2.6.pdf
ищите RTR

а функции - это запись значений в регистр - объявлены выше в том же файле w5100.h
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Вопросы по коду

Сообщение Alex » Вт авг 22, 2017 9:38 pm

http://www.wiznet.co.kr/wp-content/uplo ... v1.2.6.pdf
ищите RTR
Спасибо за подсказку. Правильно ли я понял, что начальные установки 200 мс и 1 реконнект?
а функции - это запись значений в регистр - объявлены выше в том же файле w5100.h
Я потому и спросил, что не нашёл там функций writeRTR() и writeRCR(). Сейчас ещё раз посмотрел и опять не нашёл. Не могли бы вы указать здесь отрывок кода из этого файла с этими функциями?
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Вопросы по коду

Сообщение olehs » Вт авг 22, 2017 9:57 pm

Alex писал(а):Спасибо за подсказку. Правильно ли я понял, что начальные установки 200 мс и 1 реконнект?
Не совсем. RCR = 0x08
DatasheetПоказать
rtr.png
rtr.png (53.75 КБ) 6048 просмотров
Alex писал(а): Я потому и спросил, что не нашёл там функций writeRTR() и writeRCR(). Сейчас ещё раз посмотрел и опять не нашёл. Не могли бы вы указать здесь отрывок кода из этого файла с этими функциями?
Макросы:
СпойлерПоказать

Код: Выделить всё

 // W5100 Registers
  // ---------------
private:
  static uint8_t write(uint16_t _addr, uint8_t _data);
  static uint16_t write(uint16_t addr, const uint8_t *buf, uint16_t len);
  static uint8_t read(uint16_t addr);
  static uint16_t read(uint16_t addr, uint8_t *buf, uint16_t len);
  
#define __GP_REGISTER8(name, address)             \
  static inline void write##name(uint8_t _data) { \
    write(address, _data);                        \
  }                                               \
  static inline uint8_t read##name() {            \
    return read(address);                         \
  }
#define __GP_REGISTER16(name, address)            \
  static void write##name(uint16_t _data) {       \
    write(address,   _data >> 8);                 \
    write(address+1, _data & 0xFF);               \
  }                                               \
  static uint16_t read##name() {                  \
    uint16_t res = read(address);                 \
    res = (res << 8) + read(address + 1);         \
    return res;                                   \
  }
#define __GP_REGISTER_N(name, address, size)      \
  static uint16_t write##name(uint8_t *_buff) {   \
    return write(address, _buff, size);           \
  }                                               \
  static uint16_t read##name(uint8_t *_buff) {    \
    return read(address, _buff, size);            \
  }

public:
  __GP_REGISTER8 (MR,     0x0000);    // Mode
  __GP_REGISTER_N(GAR,    0x0001, 4); // Gateway IP address
  __GP_REGISTER_N(SUBR,   0x0005, 4); // Subnet mask address
  __GP_REGISTER_N(SHAR,   0x0009, 6); // Source MAC address
  __GP_REGISTER_N(SIPR,   0x000F, 4); // Source IP address
  __GP_REGISTER8 (IR,     0x0015);    // Interrupt
  __GP_REGISTER8 (IMR,    0x0016);    // Interrupt Mask
  __GP_REGISTER16(RTR,    0x0017);    // Timeout address
  __GP_REGISTER8 (RCR,    0x0019);    // Retry count
  __GP_REGISTER8 (RMSR,   0x001A);    // Receive memory size
  __GP_REGISTER8 (TMSR,   0x001B);    // Transmit memory size
  __GP_REGISTER8 (PATR,   0x001C);    // Authentication type address in PPPoE mode
  __GP_REGISTER8 (PTIMER, 0x0028);    // PPP LCP Request Timer
  __GP_REGISTER8 (PMAGIC, 0x0029);    // PPP LCP Magic Number
  __GP_REGISTER_N(UIPR,   0x002A, 4); // Unreachable IP address in UDP mode
  __GP_REGISTER16(UPORT,  0x002E);    // Unreachable Port address in UDP mode
  
#undef __GP_REGISTER8
#undef __GP_REGISTER16
#undef __GP_REGISTER_N    
За это сообщение автора olehs поблагодарил:
Alex (Ср авг 23, 2017 7:28 am)
Рейтинг: 1.16%
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Вопросы по коду

Сообщение Alex » Ср авг 23, 2017 7:28 am

Не совсем. RCR = 0x08
8 реконнектов по 200 мс? Это хорошо укладывается в практические измерения — «зависание» системы примерно на 1600 мс при отсутствии адресата в сети.
Макросы:
Спасибо, узнал много нового — заковыристо они организовали запись. :)
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Вопросы по коду

Сообщение olehs » Ср авг 23, 2017 9:21 am

Я в MegaLight методом проб и ошибок подобрал значения RTR=150, RCR=3 для отправки изменений состояний в Мажордомо.
При таких значениях (у меня, по крайней мере) нет ни пропусков, ни задержек при отсутствии связи.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Вопросы по коду

Сообщение Alex » Ср авг 23, 2017 9:25 am

Я в MegaLight методом проб и ошибок подобрал значения RTR=150, RCR=3 для отправки изменений состояний в Мажордомо.
При таких значениях (у меня, по крайней мере) нет ни пропусков, ни задержек при отсутствии связи.
И я о том же. Кто только такие параметры установил по умолчанию.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Вопросы по коду

Сообщение Alex » Ср авг 23, 2017 2:13 pm

Ещё один вопрос: было бы неплохо иметь информацию о наличии физического подключения к сети и скорости этого подключения (это то, что индицируется светодиодами на разъёме RJ-45 модуля). Наверняка эта информация находится в каком-то из регистров модуля.

Можно как-то получить доступ к этой информации из скетча? Тогда система (например, АМС) знала бы подключён ли кабель физически к модулю и есть ли физическое соединение с роутером.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Вопросы по коду

Сообщение olehs » Ср авг 23, 2017 2:49 pm

Насколько я понял, у W5100 есть сигнальный выход на светодиод (LINKED), но программно к нему доступа нет. Кроме того он мигает во время передачи.

С другой стороны, если нет физического коннекта, то и сигнализировать об этом получится только через какие-то внешне подключенные устройства.
Да и наличие физики не гарантирует связь с конечным устройством (сервером), потому лучше, наверное, детектить отсутствие именно логического подключения методом пингов и т.д.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Вопросы по коду

Сообщение Alex » Ср авг 23, 2017 7:22 pm

Там два светодиода (по крайней мере у меня так), один — данные, другой — наличие подключения и его скорость. Можно получить сигнал со светодиода, но хотелось конечно обойтись программным способом (если это возможно).
Ответить