avatar
Рейтинг
+16.15
Сила
40.67

Артем

Публикации

avatar
Да, я про дефолтные вариации компиляторов. Свои костыли, конечно же, приятнее :)
Ведь с одной стороны, зло надо правильно побеждать :)
С одной стороны Зло отстрелит тебе ногу дробовиком по колено при первой же возможности…
avatar
Строение уха как раз у всех людей одинаково с точностью до последнего сухожилия.
Другое дело физические параметры — общие размеры, толщина, жировой слой и т.п.
Это так, поправочка :)
avatar
Согласен, но винил все равно тот самый — ввиду самого процесса :)
avatar
А ты думал теплый ламповый звук из аудиокабеля берется?
Помню, бывало, намотаешь индуктивность на резисторе МЛТ-2, поставишь их в анодную цепь, как подашь напряжение проводом из бескислородной меди, вот тогда твой усилитель и заиграет всеми красками :))
avatar
А еще у круглых резисторов есть собственная индуктивность ввиду его «намотанных» дорожек. В аудиотракте такая индуктивность в единицы нано и микрогенри иногда бывает полезной.
avatar
Я только что заказал себе бесплатный бумажный каталог??

У них есть что-то что нельзя купить в другом месте?

ЗЫ: У нас тут на рубль 33% скидка к черной пятнице), поэтому скидка в 10% — вообще несерьезно :)
avatar
Судя по письму от 18 ноября, Closed Beta у них уже вовсю идет, но нас туда не позвали :)

Ждем открытой беты)
avatar
хорош он тем, что за счет смещения считывателей каналов на четверть сектора, гарантированно не будет случая, когда светодиод считываемого канала будет наполовину закрыт шторкой, и не понятно, это еще единица, или уже нуль.
т.е. код Баркера в таких граничных случаях позволяет однозначно считать данные.
avatar
Не встречал. Да и что embedded что не embedded — я лишь перечислил малую долю инструментов С++, которые улучшают качество кода. Об этом можно почитать у Макконекела «Совершенный код» — толстенный и полезный талмуд. Конкретно по С++ рекомендую прочесть статьи блога PVS Stduio на хабре и на сайте — там что ни статья — разбирается огромное число примеров простых но серьезных ошибок.

Для Embedded, ИМХО, достаточно не использовать дорогие операции. STL немножко можно, но аккуратно.
Если ARM и в запасе ОЗУ больше 64к — ни в чем себе не отказывайте :)
Сейчас пилю проект на 16МГц ARM Cortex-M3 и 8кбайт ОЗУ (из которых 6 съедают буферы для UART) — вот где боль :)

Для матерых С-шников вроде меня рекомендую книгу Ira Pohl C++ for C programmers. Все перечисленное выше — там подробно разбирается. Но конкретно перечисленное выше — то что реально облегчает мой эмбед-кодинг.
До сих пор эту книгу никак не закажу, но я проходил курс на Coursera в начале года.

А так, наиболее полный источник — это практика :) Практика разгребания чужого кода конечно же :)
avatar
Не стоит путать красное с пресным:
C++ это не только абстракция и наследование, но еще и как минимум(краткий список полезных для эмбеддера фич):
0. Пространства имен! Нет, правда, создавая большой проект на С я затрахиваюсь перед каждой функцией добавлять префикс. В С++ это решается с помощью namespace и классов. И когда ты ставишь точку, автодополнение дает тебе список ТОЛЬКО того, что тебе можно.
1. Разделение уровней доступа — если у меня и есть какая-то внутренняя переменная, то в С иногда сложно избежать соблазна не поставить костыль. В C++ внутри класса я просто делаю ее private. Отсюда — приходится продумывать архитектуру приложения — на поддержке кода это очень пригодится.
2. Перегрузка функций и шаблоны. Правда, просто обожаю в С продумывать функции для всех возможных типов данных. И для uint8_t и для int8_t и 16_t и 32_t и float и т.д. и т.п.
3. Безопасное кастование! Сравните static_cast и reinterpret_cast(аналог С-шных скобочек (type_t)var). Мне иногда попадаются просто фееричные преобразования типов в разгребаемом коде, когда они неявно перегоняются из знакового в беззнаковый, из short в long да по нескольку раз… static_cast в отличие от reinterpret_cast в неподобающих случаях вызовет ошибку компиляции и заставит хорошенько подумать. Причем в С ошибка может быть обнаружена только с помощью статического анализа кода(PVS Studio справляется, Clang и cppcheck — как правило нет). Ну может быть он ругнется на сравнение знаковой и беззнаковой переменной в if или в переходе от double к float… или вы скормили const в не cosnt…
4.Перечисляемые типы. Дефайны — зло. Есть тысяча и один кейсов, когда они могут привести к некоторым проблемам, ОСОБЕННО!!! при отсутствии пространства имен. Вы уверены, что своим дефайном вы ничего не переопределили? Или, например, не включили какую-нибудь опцию вида #if defined(FOO)? В том или ином виде enum есть со времен ANSI C, Classname.enum таки гораздо функциональнее.

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

Стек и память вообще очень просто контролируются.
avatar
В интернете всегда кто-то неправ.

Имелись в виду современные абсолютные энкодеры с аналогичным интерфейсом, коие есть, но гораздо проще найти абсолютный энкодер с профибасом или промэзернетом на выходе.

А если говорить о самом коде Баркера, то он вокруг нас где есть Wi-Fi.
avatar
Совершенно точный, но совершенно бесполезный ответ на ваш вопрос — у заказчика.

На основании некоторых ключевых слов в статье можно предположить, что была задача модернизировать что-то очень старое, но очень нужное. Если присмотреться в видео, то это что-то трехкоординатное, с двумя датчиками по X и по Y.

И если Вам вдруг попадется современный абсолютный энкодер, в том числе на сдвиговом регистре на входе, алгоритм считывания будет аналогичен.
avatar
Потому что в техническом задании была прописана именно такая задача.
Задача была сделать драйвер на С, который можно было вызывать из программы на FORTRAN, которая уже была, давно работает и ее совершенно невозможно поддерживать (синтаксис f-77).
avatar
Код будет храниться в неканоничной микросхеме ОЗУ в 64 кбайт.
Причем небольшая область памяти будет выводиться на светодиодную матрицу 32х16 — надо же ее уже куда-нибудь пристроить, а то лежит без дела.

Я не ставлю перед собой задачу сделать простую машину. Можно и аппаратный брейнфак замутить, но смысл?:)
avatar
Так у тебя еще и C на переключение :) и их тоже две штуки.
Так что триггеры сделаю по последней своей, а в регистры как у Гарри Портера сделаю с общим сбросом — там вовсе 2 реле на бит + 1 останется = 17 реле на буфер. и переключатель не нужен.
avatar

Правую часть совсем не понял — то что подписано LATCH это типа катушка третьего реле?
А за счет чего оно удерживается при отсутствии D и C(ведь питание идет через них) и как переключается?
И как сигнал C влияет на запись?
но если предположить, что я не увидел тонкой авторской предпосылки, то я вижу два переключающих контакта — а это опять два реле — один герконник с двумя переключающими контактами я не встречал, а два герконника — это уже 4 реле.
Сейчас глянул на схему регистра машины Гарри Портера — он перед записью просто обрубает всем триггерам регистра питание, они сбрасываются и он заливает новые данные :) Надо подумать над этим вариантом — минус 7*17 реле ) Но это будет синхронный буффер…
avatar
Это называется самоблокировка реле. У меня так в деревне управление водой из дома организовано — нажимаешь черную кнопочку — вода потекла (про селекцию клапанами, чтобы вода потекла в нужную трубу, умолчу). А вот чтобы отключить воду, приходится нажимать красную кнопочку — и у посетителя бани гаснет свет :) И это не баг, это фича :)

проснулся утром и перерисовал сумматор, уменьшив число реле с 10 до 7 (уверен это не предел) и D-триггер — с 5 до 4 :) Когда только одних триггеров во всем компьютере полторы сотни(17*8), важна каждая капля :)

Вместо инвертора и двух блоков И один ключ и один переключатель.
Сигналом на D выбираем сброс или установку, а сигналом клок подаем ииницу на вход переключателя.
Но это задача следующих выходных :)
avatar
Да, я видел ее. Но все же это обычный MSP с качественным АЦП модулем.
Хотя его наиболее эффективное и логичное применение — E-meter
Для моей задачи он жирноват.
avatar
И близко не то — в нем просто 3-канальный SD24 и вся математика расчета RMS ложится на камень и плечи разработчика. Она, конечно. достаточно банальна.
avatar
Совсем забыл про наличие видео. Добавил.