Как стать автором
Обновить

Комментарии 30

Предложу, в этом случае, заменить «референсный» на «тестовый», потому как именно в этом контексте подается материал статьи «не доверяйте примерам кода от производителя!».
Это не верно. Библиотеки производителя не являются тестовыми.
Возможно, лучше развернуть до максимально понятного «Код из примеров, поставляемых с оборудованием»?
Может быть: «демонстрационные» библиотеки?
О точно, пожалуй наиболее подходяще, сейчас в статье помечу.
Хорошая статья, поднимающая очень важные проблемы. Сам постоянно удивляюсь несовершенстовом библиотек. Их бездумное использование ведёт к катастрофическому разрастанию объёа кода и замедлению работы. Плюс ошибки, которые кстати часто возникают от совместного использования библиотек почерпнутых из разных источников.
Однако удивительно дурацкое название у вашей статьи, которое совсем не отражает сути затронутой проблемы.
Я имею ввиду
Только дурак учится на своих ошибках, умный предпочитает учиться на чужих
Главное, чтобы сюда не пришли программисты под РС и иже с ними с соседней ветки обсуждений с соседнего ресурса, у которых самое ценное — количество времени, затраченного на разработку, а ресурсов не хватает — возьмите железо помощнее (с)
Только велосипеды, только хардкор!
Ну если Вас устраивает чужой велосипед, время от времени падающий на ровном месте, то менять его на другой, несомненно, не следует.
Продолжая аналогию, не следует на цирковом велосипеде, специально настроенном для езды по кругу, выезжать на дороги общего пользования, но и в этом случае необязательно строить свой агрегат, можно купить в магазине более правильный велосипед.
Еще одна аналогия — у цирковых велосипедов прямая передача (без обгонной муфты или трещотки), что обусловлено спецификой управления. Вас ведь не устроит необходимость в много-километровом путешествии постоянно крутить педали и не иметь возможности двигаться накатом?
Ну я и сам матерился местами, когда референсный код даже не совпадает местами с даташитом.
Но всё равно думаю, что, скажем, увлекаться переписыванием какого-нибудь софтового USB-стека или tcp/ip-стека не следует.
Как будто в своих велосипедах ошибок не бывает. Бывает ещё жёстче, чем в чужих.

Критичные системы надо нещадно тестировать. Вот и всё. А писание своего говнокода вместо говнокода производителя чипа никак не поможет избежать драматических ошибок в продакшене.

P.S. Примеры с STM и Arduino только подтверждают, что свои велосипеды — зло. В библиотеках, которые используются на миллионах разных устройств в разных режимах ошибки будут найдены и исправлены раньше, чем в самописных, которые всю жизнь использовали в одном режиме, а в очередной партии — в другом, в результате чего всё взорвалось. Повторюсь, примеры с Arduino и STM это подтверждают, хотя, конечно, ситуация действительно, когда «обе хуже». И не дай Бог у кого-нибудь заклинит кардиостимулятор из-за того, что кто-то написал свой велосипед или взял чужой и не протестировал его люто.
Трудно не согласиться.
В сегодняшнем усложняющемся мире без библиотек не обойтись.
Но по крайней мере прежде чем использовать их в ответственном приложении, а не конструкции выходного дня крайне желательно заглянуть в код, ознакомиться со списком функций и примерами. Иначе можно пострадать не только из за косяков библиотеки, но и от её некорректного использования. Ведь у любой библиотеки есть свои ограничения. Любая библиотека потребляет определённые ресурсы. Если бездумно использовать разные библиотеки то их ресурсы могут начать пересекаться и тут начнутся такие глюки!!!
Лично я стараюсь в ответственных участках программы использовать свой код. То же самое в участках требующих высокой производительности. Иногда приходится вплоть до оператора всё оптимизировать или вообще делать ассемблерные вставки.
С другой стороны писать собственную библиотеку для преобразований Фурье или USB стек с нуля конечно не имеет смысла. Необходимо искать разумные компромиссы.
Несомненно, истина лежит посредине. Есть у нее такое свойство, всегда лежать посредине.
Но, и это мое твердое мнение, ничто так не продвигает в понимании стека протокола, как попытка реализовать его.
При этом Вы обнаружите такие особенности, которые никогда не заметите при чтении описаний чужой библиотеки.
Конечно, для этого нужно время, но, во-первых, его потребуется не так много, как кажется на первый взгляд, а, во-вторых, если Вы собираетесь работать с данным протоколом всерьез и надолго, его следует изучить всерьез.
К сожалению я достаточное для подобных подвигов время имею только между проектами. Его вполне достаточно чтобы самому сконфигурировать периферию или написать драйвер LCD. Для простых вещей чаще бывает быстрее написать свой драйвер, чем разбираться с настройкой и глюками подключаемой библиотеки.
> Только дурак учится на своих ошибках, умный предпочитает учиться на чужих
Это не верно!
«Дураки не учатся, умные учатся на своих ошибках и только мудрые — на чужих»
мало кто знает, что есть продолжение:

… а потом переучиваются на своих
вот, кстати, да…

«Только дурак учится на своих ошибках, умный предпочитает учиться на чужих»
Это одна из фраз, в которых ложное противопоставление хоронит разумную и добрую середину. Которая не бывает высечена четко, но тем не менее — находиться, постепенно.

Особенно фразу косит слово «только», от этого хочется уж полной полновесности тогда, типа:
Только дурак учится на своих ошибках, умный всегда предпочитает учиться на чужих

«мудрых» — предыдущем посте, тоже косит слово только
в «оригинале», кажется было «мудрые предпочитают...», но я постоянно забывают использовать этот вариант :(
Проблема серьёзная, и она не только прошивок касается. В электронике разработчики передирают typical applications, даже не удосужившись подобрать номиналы под параметры конкретного устройства. В веб- и десктоп-программировании — одна копипаста со stackoverflow. С распространением IoT чудеса нас ждут — полностью согласен. Статьи в «Хакере» про взлом унитазов будут — это точно.
А если даже и поменяют номиналы, рассчитав их в соответствии с даташитом, то есть еще одна проблема.
Сколько было ситуаций, когда спрашиваю у молодых инженеров «Какие функции в этой схеме выполняет этот диод» и слышу в ответ «А так в примере было» — карго-культ во всей своей красе.
И опять-таки это не смертельно, совершенно не обязательно рисовать всякий раз схему заново, но понимать, что происходит во взятой тобой схеме, все-таки нужно. То есть, конечно, не нужно до тех пор, пока у Вас все работает, но, к сожалению, это не навсегда.
У любителей есть развлечение повеселее: брать схемы из интернетов и не заглядывать в appnotes/datasheet. А потом удивляться нестабильной работе, повышенным шумам или сгоревшим компонентам.

Я, как любитель, считаю, что любому человеку, который хочет собрать что-то сложнее avr с диодом стоит прочитать что-нибудь из классики. Двухтомник Х-Х, например.
НЛО прилетело и опубликовало эту надпись здесь
Конечно, особенно то, что касается дизайна схем, там ошибки крайне редки (но не полностью исключены и я на них натыкался).
И ни Джек, ни я не призываем к разработке с нуля, он в блоге так ясно и написал, мы лишь предостерегаем от бездумного использования, от предвзятого отношения как к коду, так и к дизайну — раз ЭТО размещено на сайте производителя, то уже заранее правильно.
ну регистратор ЭКГ — это не кардиостимулятор, совершенно зря автора передернуло от ужаса. Использовать радио в критичных системах вообще рука ничья не повернется. Особенно в 2.4ГГц

Так, а вот действительно, вопрос автору и просто присутствующим: а какой 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 есть.
Intel Edison — BLE, АЦП и МК в одном флаконе (шутка).
А если серьезно — если буферизовать и сбрасывать длинным пакетом — лучше не станет? Вроде для ЭКГ реал-тайм не особо нужен?
А так у TI много новинок с обещаниями снижения потребления до 75%, хотя сам пока не пробовал.
Немного лучше становится, но не на порядок. Но там действительно специфичное применение — нужны данные сразу с нескольких датчиков. Поэтому и без подтверждения, хотелось чтобы то, что было отправлено, приходило примерно одновременно. но все-равно прием странно лагал
Индусы, пишущие референсный код для TI, ежедневно и неустанно подтверждают тезисы этой статьи. Не могу дальше писать, слезы наворачиваются на глаза…
… хотя нет, не слезы. Это кровь течет из глаз от взгляда на код TI…
Посмотрите на код наших производителей и вы прибежите к TI со слезами радости, приговаривая «И как я мог ругать такой чудесный код», поскольку наши берут их код и добавляют своих тараканов.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации