Страница 1 из 2
Вопросы по коду
Добавлено: Вт авг 22, 2017 9:40 am
Alex
В библиотеке Ethernet, в файле w5100.h есть функции
Код: Выделить всё
void W5100Class::setRetransmissionTime(uint16_t _timeout) {
writeRTR(_timeout);
}
void W5100Class::setRetransmissionCount(uint8_t _retry) {
writeRCR(_retry);
}
Вопрос:
где можно посмотреть функции writeRTR() и writeRCR() и как узнать установки по умолчанию для времени передачи и количеству повторов?
Re: Вопросы по коду
Добавлено: Вт авг 22, 2017 10:41 am
olehs
http://www.wiznet.co.kr/wp-content/uplo ... v1.2.6.pdf
ищите RTR
а функции - это запись значений в регистр - объявлены выше в том же файле w5100.h
Re: Вопросы по коду
Добавлено: Вт авг 22, 2017 9:38 pm
Alex
Спасибо за подсказку. Правильно ли я понял, что начальные установки 200 мс и 1 реконнект?
а функции - это запись значений в регистр - объявлены выше в том же файле w5100.h
Я потому и спросил, что не нашёл там функций writeRTR() и writeRCR(). Сейчас ещё раз посмотрел и опять не нашёл. Не могли бы вы указать здесь отрывок кода из этого файла с этими функциями?
Re: Вопросы по коду
Добавлено: Вт авг 22, 2017 9:57 pm
olehs
Alex писал(а):Спасибо за подсказку. Правильно ли я понял, что начальные установки 200 мс и 1 реконнект?
Не совсем. RCR = 0x08
- rtr.png (53.75 КБ) 6175 просмотров
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
Re: Вопросы по коду
Добавлено: Ср авг 23, 2017 7:28 am
Alex
Не совсем. RCR = 0x08
8 реконнектов по 200 мс? Это хорошо укладывается в практические измерения — «зависание» системы примерно на 1600 мс при отсутствии адресата в сети.
Макросы:
Спасибо, узнал много нового — заковыристо они организовали запись.
Re: Вопросы по коду
Добавлено: Ср авг 23, 2017 9:21 am
olehs
Я в MegaLight методом проб и ошибок подобрал значения RTR=150, RCR=3 для отправки изменений состояний в Мажордомо.
При таких значениях (у меня, по крайней мере) нет ни пропусков, ни задержек при отсутствии связи.
Re: Вопросы по коду
Добавлено: Ср авг 23, 2017 9:25 am
Alex
Я в MegaLight методом проб и ошибок подобрал значения RTR=150, RCR=3 для отправки изменений состояний в Мажордомо.
При таких значениях (у меня, по крайней мере) нет ни пропусков, ни задержек при отсутствии связи.
И я о том же. Кто только такие параметры установил по умолчанию.
Re: Вопросы по коду
Добавлено: Ср авг 23, 2017 2:13 pm
Alex
Ещё один вопрос: было бы неплохо иметь информацию о наличии физического подключения к сети и скорости этого подключения (это то, что индицируется светодиодами на разъёме RJ-45 модуля). Наверняка эта информация находится в каком-то из регистров модуля.
Можно как-то получить доступ к этой информации из скетча? Тогда система (например, АМС) знала бы подключён ли кабель физически к модулю и есть ли физическое соединение с роутером.
Re: Вопросы по коду
Добавлено: Ср авг 23, 2017 2:49 pm
olehs
Насколько я понял, у W5100 есть сигнальный выход на светодиод (LINKED), но программно к нему доступа нет. Кроме того он мигает во время передачи.
С другой стороны, если нет физического коннекта, то и сигнализировать об этом получится только через какие-то внешне подключенные устройства.
Да и наличие физики не гарантирует связь с конечным устройством (сервером), потому лучше, наверное, детектить отсутствие именно логического подключения методом пингов и т.д.
Re: Вопросы по коду
Добавлено: Ср авг 23, 2017 7:22 pm
Alex
Там два светодиода (по крайней мере у меня так), один — данные, другой — наличие подключения и его скорость. Можно получить сигнал со светодиода, но хотелось конечно обойтись программным способом (если это возможно).