Комментарии 30
Предложу, в этом случае, заменить «референсный» на «тестовый», потому как именно в этом контексте подается материал статьи «не доверяйте примерам кода от производителя!».
Хорошая статья, поднимающая очень важные проблемы. Сам постоянно удивляюсь несовершенстовом библиотек. Их бездумное использование ведёт к катастрофическому разрастанию объёа кода и замедлению работы. Плюс ошибки, которые кстати часто возникают от совместного использования библиотек почерпнутых из разных источников.
Однако удивительно дурацкое название у вашей статьи, которое совсем не отражает сути затронутой проблемы.
Я имею ввиду
Однако удивительно дурацкое название у вашей статьи, которое совсем не отражает сути затронутой проблемы.
Я имею ввиду
Только дурак учится на своих ошибках, умный предпочитает учиться на чужих
Только велосипеды, только хардкор!
Ну если Вас устраивает чужой велосипед, время от времени падающий на ровном месте, то менять его на другой, несомненно, не следует.
Продолжая аналогию, не следует на цирковом велосипеде, специально настроенном для езды по кругу, выезжать на дороги общего пользования, но и в этом случае необязательно строить свой агрегат, можно купить в магазине более правильный велосипед.
Еще одна аналогия — у цирковых велосипедов прямая передача (без обгонной муфты или трещотки), что обусловлено спецификой управления. Вас ведь не устроит необходимость в много-километровом путешествии постоянно крутить педали и не иметь возможности двигаться накатом?
Продолжая аналогию, не следует на цирковом велосипеде, специально настроенном для езды по кругу, выезжать на дороги общего пользования, но и в этом случае необязательно строить свой агрегат, можно купить в магазине более правильный велосипед.
Еще одна аналогия — у цирковых велосипедов прямая передача (без обгонной муфты или трещотки), что обусловлено спецификой управления. Вас ведь не устроит необходимость в много-километровом путешествии постоянно крутить педали и не иметь возможности двигаться накатом?
Ну я и сам матерился местами, когда референсный код даже не совпадает местами с даташитом.
Но всё равно думаю, что, скажем, увлекаться переписыванием какого-нибудь софтового USB-стека или tcp/ip-стека не следует.
Но всё равно думаю, что, скажем, увлекаться переписыванием какого-нибудь софтового USB-стека или tcp/ip-стека не следует.
Как будто в своих велосипедах ошибок не бывает. Бывает ещё жёстче, чем в чужих.
Критичные системы надо нещадно тестировать. Вот и всё. А писание своего говнокода вместо говнокода производителя чипа никак не поможет избежать драматических ошибок в продакшене.
P.S. Примеры с STM и Arduino только подтверждают, что свои велосипеды — зло. В библиотеках, которые используются на миллионах разных устройств в разных режимах ошибки будут найдены и исправлены раньше, чем в самописных, которые всю жизнь использовали в одном режиме, а в очередной партии — в другом, в результате чего всё взорвалось. Повторюсь, примеры с Arduino и STM это подтверждают, хотя, конечно, ситуация действительно, когда «обе хуже». И не дай Бог у кого-нибудь заклинит кардиостимулятор из-за того, что кто-то написал свой велосипед или взял чужой и не протестировал его люто.
Критичные системы надо нещадно тестировать. Вот и всё. А писание своего говнокода вместо говнокода производителя чипа никак не поможет избежать драматических ошибок в продакшене.
P.S. Примеры с STM и Arduino только подтверждают, что свои велосипеды — зло. В библиотеках, которые используются на миллионах разных устройств в разных режимах ошибки будут найдены и исправлены раньше, чем в самописных, которые всю жизнь использовали в одном режиме, а в очередной партии — в другом, в результате чего всё взорвалось. Повторюсь, примеры с Arduino и STM это подтверждают, хотя, конечно, ситуация действительно, когда «обе хуже». И не дай Бог у кого-нибудь заклинит кардиостимулятор из-за того, что кто-то написал свой велосипед или взял чужой и не протестировал его люто.
Трудно не согласиться.
В сегодняшнем усложняющемся мире без библиотек не обойтись.
Но по крайней мере прежде чем использовать их в ответственном приложении, а не конструкции выходного дня крайне желательно заглянуть в код, ознакомиться со списком функций и примерами. Иначе можно пострадать не только из за косяков библиотеки, но и от её некорректного использования. Ведь у любой библиотеки есть свои ограничения. Любая библиотека потребляет определённые ресурсы. Если бездумно использовать разные библиотеки то их ресурсы могут начать пересекаться и тут начнутся такие глюки!!!
Лично я стараюсь в ответственных участках программы использовать свой код. То же самое в участках требующих высокой производительности. Иногда приходится вплоть до оператора всё оптимизировать или вообще делать ассемблерные вставки.
С другой стороны писать собственную библиотеку для преобразований Фурье или USB стек с нуля конечно не имеет смысла. Необходимо искать разумные компромиссы.
В сегодняшнем усложняющемся мире без библиотек не обойтись.
Но по крайней мере прежде чем использовать их в ответственном приложении, а не конструкции выходного дня крайне желательно заглянуть в код, ознакомиться со списком функций и примерами. Иначе можно пострадать не только из за косяков библиотеки, но и от её некорректного использования. Ведь у любой библиотеки есть свои ограничения. Любая библиотека потребляет определённые ресурсы. Если бездумно использовать разные библиотеки то их ресурсы могут начать пересекаться и тут начнутся такие глюки!!!
Лично я стараюсь в ответственных участках программы использовать свой код. То же самое в участках требующих высокой производительности. Иногда приходится вплоть до оператора всё оптимизировать или вообще делать ассемблерные вставки.
С другой стороны писать собственную библиотеку для преобразований Фурье или USB стек с нуля конечно не имеет смысла. Необходимо искать разумные компромиссы.
Несомненно, истина лежит посредине. Есть у нее такое свойство, всегда лежать посредине.
Но, и это мое твердое мнение, ничто так не продвигает в понимании стека протокола, как попытка реализовать его.
При этом Вы обнаружите такие особенности, которые никогда не заметите при чтении описаний чужой библиотеки.
Конечно, для этого нужно время, но, во-первых, его потребуется не так много, как кажется на первый взгляд, а, во-вторых, если Вы собираетесь работать с данным протоколом всерьез и надолго, его следует изучить всерьез.
Но, и это мое твердое мнение, ничто так не продвигает в понимании стека протокола, как попытка реализовать его.
При этом Вы обнаружите такие особенности, которые никогда не заметите при чтении описаний чужой библиотеки.
Конечно, для этого нужно время, но, во-первых, его потребуется не так много, как кажется на первый взгляд, а, во-вторых, если Вы собираетесь работать с данным протоколом всерьез и надолго, его следует изучить всерьез.
> Только дурак учится на своих ошибках, умный предпочитает учиться на чужих
Это не верно!
«Дураки не учатся, умные учатся на своих ошибках и только мудрые — на чужих»
Это не верно!
«Дураки не учатся, умные учатся на своих ошибках и только мудрые — на чужих»
вот, кстати, да…
«Только дурак учится на своих ошибках, умный предпочитает учиться на чужих»
Это одна из фраз, в которых ложное противопоставление хоронит разумную и добрую середину. Которая не бывает высечена четко, но тем не менее — находиться, постепенно.
Особенно фразу косит слово «только», от этого хочется уж полной полновесности тогда, типа:
Только дурак учится на своих ошибках, умный всегда предпочитает учиться на чужих
«мудрых» — предыдущем посте, тоже косит слово только
«Только дурак учится на своих ошибках, умный предпочитает учиться на чужих»
Это одна из фраз, в которых ложное противопоставление хоронит разумную и добрую середину. Которая не бывает высечена четко, но тем не менее — находиться, постепенно.
Особенно фразу косит слово «только», от этого хочется уж полной полновесности тогда, типа:
Только дурак учится на своих ошибках, умный всегда предпочитает учиться на чужих
«мудрых» — предыдущем посте, тоже косит слово только
Проблема серьёзная, и она не только прошивок касается. В электронике разработчики передирают typical applications, даже не удосужившись подобрать номиналы под параметры конкретного устройства. В веб- и десктоп-программировании — одна копипаста со stackoverflow. С распространением IoT чудеса нас ждут — полностью согласен. Статьи в «Хакере» про взлом унитазов будут — это точно.
А если даже и поменяют номиналы, рассчитав их в соответствии с даташитом, то есть еще одна проблема.
Сколько было ситуаций, когда спрашиваю у молодых инженеров «Какие функции в этой схеме выполняет этот диод» и слышу в ответ «А так в примере было» — карго-культ во всей своей красе.
И опять-таки это не смертельно, совершенно не обязательно рисовать всякий раз схему заново, но понимать, что происходит во взятой тобой схеме, все-таки нужно. То есть, конечно, не нужно до тех пор, пока у Вас все работает, но, к сожалению, это не навсегда.
Сколько было ситуаций, когда спрашиваю у молодых инженеров «Какие функции в этой схеме выполняет этот диод» и слышу в ответ «А так в примере было» — карго-культ во всей своей красе.
И опять-таки это не смертельно, совершенно не обязательно рисовать всякий раз схему заново, но понимать, что происходит во взятой тобой схеме, все-таки нужно. То есть, конечно, не нужно до тех пор, пока у Вас все работает, но, к сожалению, это не навсегда.
У любителей есть развлечение повеселее: брать схемы из интернетов и не заглядывать в appnotes/datasheet. А потом удивляться нестабильной работе, повышенным шумам или сгоревшим компонентам.
Я, как любитель, считаю, что любому человеку, который хочет собрать что-то сложнее avr с диодом стоит прочитать что-нибудь из классики. Двухтомник Х-Х, например.
Я, как любитель, считаю, что любому человеку, который хочет собрать что-то сложнее avr с диодом стоит прочитать что-нибудь из классики. Двухтомник Х-Х, например.
Конечно, особенно то, что касается дизайна схем, там ошибки крайне редки (но не полностью исключены и я на них натыкался).
И ни Джек, ни я не призываем к разработке с нуля, он в блоге так ясно и написал, мы лишь предостерегаем от бездумного использования, от предвзятого отношения как к коду, так и к дизайну — раз ЭТО размещено на сайте производителя, то уже заранее правильно.
И ни Джек, ни я не призываем к разработке с нуля, он в блоге так ясно и написал, мы лишь предостерегаем от бездумного использования, от предвзятого отношения как к коду, так и к дизайну — раз ЭТО размещено на сайте производителя, то уже заранее правильно.
ну регистратор ЭКГ — это не кардиостимулятор, совершенно зря автора передернуло от ужаса. Использовать радио в критичных системах вообще рука ничья не повернется. Особенно в 2.4ГГц
Так, а вот действительно, вопрос автору и просто присутствующим: а какой BLE подходит для ЭКГ? И какой модуль из доступных это позволил бы сделать. У меня задача попадалась с похожей частотой оцифровки (300-500Гц и 1-3 канала). Это все совершенно прекрасно летит на WT12 на втором BT, но захотелось же BLE! Взял BLE112, там BLE, скрипты, все дела. И с ужасом выяснил, что за те 25мА, которые трачу, не могу выгнать больше 200Гц один канал 16ти битный. И это с отключенным подтверждением о доставки. Просто беру пример от акселерометра (ага, вообще для того и покупал, что бы шлеп-шлеп и в продакшн), отменяю гарантийную доставку и учащаю таймер, играл размером буфером, помогает, но не сильно. И работает все это на 1.5м от компа.
Встречались BLE модули «чик-чик и в продакшн», желательно с МК и АЦП под щитом?
а по статье, со всем уважением к размышления автора, это вопрос цены. Критическая система? Какая цена ошибки и сбоя то? (не используйте Bluetooth тогда вообще никогда!!) Есть пол года поизучать/сделать самому? Да слава богу. Нет — даже разбираться не хочу, и так есть в чем.
Так, а вот действительно, вопрос автору и просто присутствующим: а какой BLE подходит для ЭКГ? И какой модуль из доступных это позволил бы сделать. У меня задача попадалась с похожей частотой оцифровки (300-500Гц и 1-3 канала). Это все совершенно прекрасно летит на WT12 на втором BT, но захотелось же BLE! Взял BLE112, там BLE, скрипты, все дела. И с ужасом выяснил, что за те 25мА, которые трачу, не могу выгнать больше 200Гц один канал 16ти битный. И это с отключенным подтверждением о доставки. Просто беру пример от акселерометра (ага, вообще для того и покупал, что бы шлеп-шлеп и в продакшн), отменяю гарантийную доставку и учащаю таймер, играл размером буфером, помогает, но не сильно. И работает все это на 1.5м от компа.
Встречались BLE модули «чик-чик и в продакшн», желательно с МК и АЦП под щитом?
а по статье, со всем уважением к размышления автора, это вопрос цены. Критическая система? Какая цена ошибки и сбоя то? (не используйте Bluetooth тогда вообще никогда!!) Есть пол года поизучать/сделать самому? Да слава богу. Нет — даже разбираться не хочу, и так есть в чем.
еще раз, подчерку большими буквами про BLE: 25мА, 200 СЭМЛПЕВ В СЕКУНДУ, 1.5м. НЕТ ПОДТВЕРЖДЕНИЯ ДОСТАВКИ
LOW ENERGY!
Техподдержка Bluegiga говорит проблемы с Windows 8.1 есть.
LOW ENERGY!
Техподдержка Bluegiga говорит проблемы с Windows 8.1 есть.
Intel Edison — BLE, АЦП и МК в одном флаконе (шутка).
А если серьезно — если буферизовать и сбрасывать длинным пакетом — лучше не станет? Вроде для ЭКГ реал-тайм не особо нужен?
А так у TI много новинок с обещаниями снижения потребления до 75%, хотя сам пока не пробовал.
А так у TI много новинок с обещаниями снижения потребления до 75%, хотя сам пока не пробовал.
Индусы, пишущие референсный код для TI, ежедневно и неустанно подтверждают тезисы этой статьи. Не могу дальше писать, слезы наворачиваются на глаза…
… хотя нет, не слезы. Это кровь течет из глаз от взгляда на код TI…
… хотя нет, не слезы. Это кровь течет из глаз от взгляда на код TI…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Референсный код