sasamy 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба За исходник - спасибо! Поизучаю! Какой-то индусокод. Представьте что адрес не 1 или 2 а 31 - сколько эта херня будет циклы накручивать с задержками ? Лучше нормальные открытые проекты изучайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Какой-то индусокод. Представьте что адрес не 1 или 2 а 31 - сколько эта херня будет циклы накручивать с задержками ? Если не умеете считать, то порядка 128ms на адрес. Один раз при инициализации. Зато будет найден любой. При необходимости экономить время и использовании 31 адреса все может быть постфактум скорректировано в конкретном рабочем исходнике. Именно такой подход к делу для ДЕМО кода является нормальным в отличии от забивания конкретного адреса, причем без комментариев, что это адрес. Лучше нормальные открытые проекты изучайте. Нормальных открытых нет. Один с относительно нормальным уровнем драйвера я уже в этом топике поминал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Если не умеете считать, то порядка 128ms на адрес. Один раз при инициализации. Зато будет найден любой. При необходимости экономить время и использовании 31 адреса все может быть постфактум скорректировано в конкретном рабочем исходнике. Именно такой подход к делу для ДЕМО кода является нормальным в отличии от забивания конкретного адреса, причем без комментариев, что это адрес. Я как раз умею считать - для 31 адреса задержка составит 3 секунды - это нормально по-вашему ? Смысл не в том что вы ищете живой адрес а в том как вы это делаете - можно было в цикле заслать сброс по всем адресам без задержек, а потом опрашивать начианая с первого и если он не ответил, то для следующих задержки уже не нужны. В итоге задержка практически не будет зависеть от адреса а для 31 сократится в 30 (!) раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба можно было в цикле заслать сброс по всем адресам без задержек, а потом.... В результате получим много большую задержку для начального ОЖИДАЕМОГО адреса и более замысловатый код и более сложный для правки с целью получить из этого демо рабочий вариант. Единственно, что, пожалуй следует изменить, это явно дефинировать ожидаемый адрес. Где-то так: #define DEFAULT_PHY_ADDR (1) for( phy_addr = DEFAULT_PHY_ADDR;; ) { // Put PHY in reset mode write_PHY( PHY_REG_BMCR, BMCR_RESET ); // Wait for hardware reset to end for( int i = 0; i < 128; i++ ) { vSmartDelay_ms( 1 ); if( !(read_PHY( PHY_REG_BMCR ) & BMCR_RESET) ) { // Reset complete goto phy_found; } } phy_addr = ( phy_addr + 1 ) & 0x1F; if( phy_addr == DEFAULT_PHY_ADDR ) { printst( "PHY:Missing " ); return( 1 ); } } Достаточно изменить DEFAULT_PHY_ADDR на желаемый и получаем максимально быстрый рабочий вариант, который тем не менее обеспечит поиск при запуске демки или каких-то монтажных ошибок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 5 июля, 2011 Опубликовано 5 июля, 2011 (изменено) · Жалоба В результате получим много большую задержку для начального ОЖИДАЕМОГО адреса и более замысловатый код и более сложный для правки с целью получить из этого демо рабочий вариант. Вы о чем вообще ? вот ваш подправленый код for (phy_addr = 1; phy_addr <= 31; phy_addr++) // Put PHY in reset mode write_PHY(PHY_REG_BMCR, BMCR_RESET); phy_addr = 1; for (int i = 0; i < 128; i++) { if (!(read_PHY( PHY_REG_BMCR ) & BMCR_RESET)) // Reset complete goto phy_found; vSmartDelay_ms(1); } for (phy_addr = 2; phy_addr <= 31; phy_addr++) { if (!(read_PHY(PHY_REG_BMCR) & BMCR_RESET)) goto phy_found; } printst("PHY:Missing "); return (1); phy_found: for( phy_addr = DEFAULT_PHY_ADDR;; ) Это вообще цирк - зачем тогда поиск адреса нужен :) Изменено 5 июля, 2011 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Вы о чем вообще ? О том, что написал. вот ваш подправленый код Я понял Вашу мысль и достаточно четко на мой взгляд написал, почему меня такая правка НЕ устраивает. Подправленный код тоже привел. Ознакомьтесь для начала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба О том, что написал. Я понял Вашу мысль и достаточно четко на мой взгляд написал, почему меня такая правка НЕ устраивает. Подправленный код тоже привел. Ознакомьтесь для начала. Я немного опоздал с ответом - в общем это очередная индусятина - собственно то что вы ставили во главу сначала (а это перебрать и найти ЛЮБОЙ адрес даже если ошибка в физике) вдруг отошло на второй план и появился костыль который гробит всю идею на корню Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба в общем это очередная индусятина бла, бла, бла.... собственно то что вы ставили во главу сначала (а это перебрать и найти ЛЮБОЙ адрес даже если ошибка в физике) вдруг отошло на второй план Было и есть на переднем плане. Во главе угла нормально без лишних рассылок ресетов и прочих ЛИШНИХ телодвижений инициализировать PHY. Если вдруг PHY не нашелся на том адресе, на котором должен быть, то тогда искать. Это НЕ штатный режим и время не имеет значения. Значение-же, для той-же демки имеет понятность и минимально-достаточное количество действий при инициализации. Дивная посылка кучи НЕНУЖНЫХ ресетов может в демке разве только сбить с толку читающего и замаскировать ту самую необходимо-достаточную процедуру инициализации PHY. Кстати, о времени, vSmartDelay_ms() это при работающем шедулере и не при вызове из Idle не задержка, а переключение на другую задачу. До кучи у меня нет зависимости от наличия в функции write_PHY() ожидания окончания транзакции. Отсутствие такого ожидания тоже встречалось в халявных демках :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 5 июля, 2011 Опубликовано 5 июля, 2011 (изменено) · Жалоба бла, бла, бла.... Честно говоря - мне нечего добавить. Учить Вас с таким самомнением бесполезно и поздно, тем более что-то доказывать - я даже не расчитывал что вы согласитесь что код у вас говенный :) Изменено 5 июля, 2011 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба ...согласитесь что код у вас говенный :) Возможно со временем Вам дано будет его понять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба ...даже не расчитывал что вы согласитесь что код у вас говенный :) Ваше "исправление" смотрится гораздо более убого "очередной индусятины", ибо не предполагает удобную смену дефолтного адреса, коли уж на то пошло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Ваше "исправление" смотрится гораздо более убого "очередной индусятины", ибо не предполагает удобную смену дефолтного адреса, коли уж на то пошло. Еще один. Для нервнодышащих, вот исходное сообщение http://electronix.ru/forum/index.php?showt...st&p=947034 покажите мне - какой там дефолтный адрес. Если он так нужен - пожалуйста, смысл ведь не в этом. #define DEFAULT_PHY_ADDR (1) for (phy_addr = 1; phy_addr <= 31; phy_addr++) // Put PHY in reset mode write_PHY(PHY_REG_BMCR, BMCR_RESET); phy_addr = DEFAULT_PHY_ADDR; for (int i = 0; i < 128; i++) { if (!(read_PHY( PHY_REG_BMCR ) & BMCR_RESET)) // Reset complete goto phy_found; vSmartDelay_ms(1); } for (phy_addr = 1; phy_addr <= 31; phy_addr++) { if ((phy_addr != DEFAULT_PHY_ADDR) && (!(read_PHY(PHY_REG_BMCR) & BMCR_RESET))) goto phy_found; } printst("PHY:Missing "); return (1); phy_found: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Еще один. Для нервнодышащих, вот исходное сообщение http://electronix.ru/forum/index.php?showt...st&p=947034 покажите мне - какой там дефолтный адрес. Если он так нужен - пожалуйста, смысл ведь не в этом. Я разве сказал, что мне нравится исходный код? Спешу разуверить: отнюдь не нравится. Например, я не вижу причины без нужды дергать software reset. Но ситуацию это не меняет - ваше исправление менее убого исходного варианта, но явно хуже аналогичного от автора. Индусятина-с. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Я разве сказал, что мне нравится исходный код? Не знаю - я ответил на конкретное предложение про дефолтный адрес невесть откуда взявшийся. я не вижу причины без нужды дергать software reset. Ну и не дергайте Но ситуацию это не меняет - ваше исправление менее убого исходного варианта, но явно хуже аналогичного от автора. Индусятина-с. Собственно исправление автора еще более убого чем начальный вариант - он теряет смысл, потому что весь диапазон адресов не будет проверен. А вы если делаете громкие заявления - не поленитесь привести свой код, иначе они звучат как пшик индуса :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Собственно исправление автора еще более убого чем начальный вариант - он теряет смысл, потому что весь диапазон адресов не будет проверен. А вы если делаете громкие заявления - не поленитесь привести свой код, иначе они звучат как пшик индуса :) А как бэ посмотреть это самое исправление внимательно не имеете желания? Пшикнуть нетерпится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться