Рейтинг
12.57
голосов: 10

О блоге

Алгоритмические хитрости, типовые решения и заумные трюки. Все то, что можно воплотить программно на любом микроконтроллере или на компе (но применимо к электронике)

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (152)

dcoder Krieger Tabke XANDER marvin_yorke kest Vga Alatar mzw kalvenolt Reverb mist grand1987 Gornist Rom kvm labor neiver Leopoldius rumkin

Все читатели блога

Скользкая дорожка для поклонников volatile



Прошло уже практически 30 лет с тех пор, как в стандарте языка C появился модификатор volatile, но в наши дни это ключевое слово вызывает лишь больше вопросов и непонимания даже среди программистов, общающихся с железом на “ты”. Сейчас уже никого не удивишь многоядерным мобильным телефоном или компьютером, умещающимся в одном чипе. Прогресс не стоит на месте, компиляторы умнеют, задачи программистов усложняются, вынуждая помнить о барьерах компиляции и барьерах памяти работая на многопроцессорных системах, только volatile по-прежнему остается темным уголком стандарта, в котором лишь сказано, что доступ к такой изменчивой переменной “implementation-defined” (Стандарт C, 6.7.3/7), т.е. как решат ребята, разрабатывающие компилятор, так и будет.



Читать дальше

Защита устройства от взлома и копирования

Защита от копированияОбещал я недавно моему знакомому — хорошему электрику и чайнику в электронике — сделать небольшое устройство
1) Итак, сделали вы ваше устройство, продали заказчику c предоплатой. Проходит условленный месяц — а второй части оплаты все нет и нет… Вы ему звоните — а он куда-то пропал… Вы ему угрожаете — а он отмазывается. В результате железякой он пользуется, а деньги вам все не отдал. Г-гадина!!!
2) Итак, сделали вы ваше устройство, продали заказчику и радуетесь жизни. А потом с удивлением обнаруживаете на рынке до боли похожее устройство, но сделанное кем-то другим. Оказалось, что у заказчика взял посмотреть ваше устройство его друг, который ваш конкурент. Он его скопировал и теперь продает. Г-гадина!!!
3) Итак, сделали вы ваше устройство, продали заказчику и радуетесь жизни. Вы закрыли все fuse у контроллера — порядок, копировать не будут!.. Так как устройство у вас поддерживаемое, вы регулярно выкладываете обновления, которые заливаются bootloader-ом. А потом с удивлением узнаете, что дружбан заказчика чего-то там модернизирует в вашей программе, делает похожую плату и начинает тиражировать устройство. Оказывается, он проанализировал ваш код и теперь ваяет свое. Г-гадина!!!

У вас такое было/будет/волнует? Если да — то учимся не допускать этого!

I. S. Спасибо всем за дельные комментарии!


Читать дальше
  • +19
  • 25 октября 2012, 14:46
  • PICC

Генерация синуса

Мне показалось не все знают такие простые способы. Можно генерировать последовательные значения sin(t) без таблиц и каких либо тяжелых вычислений. Суть именно в том, что генерируется последовательность на регулярной сетке по времени, для примера sin(0.1), sin(0.2), и тд. Для этого случая есть простой способ.


Читать дальше

Запретный плод GOTO сладок!

Доброго времени суток!

Какое Ваше отношение к оператору goto в языках С/С++? Скорее всего, когда Вы учились программировать, Вы его использовали. Потом Вы узнали, что это плохо, и Вы о нем позабыли. Хотя иногда при сложной обработке ошибок… нет-нет, там try … throw … catch. Или же для выхода из вложенных циклов … не-ет, там флаги и куча сложностей. Или когда вложенные switch … нет-нет-нет, там те же флаги.
И все-таки, иногда в ночной тиши Вы допускали в свое подсознание грешную мысль – «а почему бы не использовать вот тут goto? И программа вроде как стройней будет, и оптимально выходит. Да-а, было бы хорошо… Но нет – нельзя, забыли!».
А почему так оно?
Под катом – небольшое расследование и мое, основанное на многолетней практике и разных платформах, отношение к этому вопросу…
Особо любопытные и читатели Хабра уже возмутились — это кросспост с с Хабрахабра! Согласен — я там когда-то написал эту статью. Увидел, что она вызвала резонанс. Решил поделиться с читателями и этого ресурса.


Читать дальше
  • +8
  • 26 сентября 2012, 18:26
  • PICC

Преобразуем в строку. Часть 1. Целые числа.

Задача преобразования числа в строку стоит всегда, когда нужно отобразить числовые результаты работы программы. Процессоры у нас оперируют двоичными данными, человеку-же подавай десятичные числа. Собственно задача состоит в преобразовании базы числа. Какие для этого есть способы? Целью данной статьи является описание и сравнение максимального количества способов преобразования числа в строку. Задачу, естественно, рассматриваем с точки зрения реализации на микроконтроллерах, по этому размер и скорость имеют значение. Для простоты рассматриваем только без-знаковые 32-х и 16-ти разрядные числа (со знаком не намного сложнее).


Читать дальше

SOFT_UART_X3 с уверенным приемом и полным дуплексом, для любого микроконтроллера, используя один таймер

Небольшая предыстория.
Захотелось мне сделать uart на тех пинах, на которых его отродясь небыло. Хотел найти сразу готовое решение чтобы не изобретать сами знаете что, однако не все так просто. Порывшись, сразу нашел Программный UART для любого микроконтроллера, вроде реализация всем хороша, на передачу работает отлично. А вот на прием, где-то один байт из сорока приходит с ошибкой, по понятной причине,- просто опрашивая RX пин по таймеру, уверенного приема не добиться, рано или поздно попадем на границу фронта. Есть конечно способы сделать прием уверенным, но для этого обычно приходится задействовать много аппаратных ресурсов, иногда два таймера плюс прерывание с ножки. А удобно бы использовать один только таймер.



Читать дальше

Sleep для RTOS

Хочу написать о достаточно полезной вещи(на мой взгляд) — функции sleep для RTOS.
Что это такое и зачем это надо? Допустим вам необходимо вывести что нибудь на LCD дисплей, а контроллер который там установлен не такой быстрый как наш stm32 и нам приходитбся делать паузы чтобы он успешно обработал наши запросы. Но если мы будем использовать обычный for для реализации паузы — то это будет напрасная трата ресурсов процессора, пока мы ждем мы могли бы выполнить еще что нибудь полезное.

update: Задача решена в любом RTOS, а это только доработка планировщика задач от DI. Рекомендуется использовать полноценные RTOS


Читать дальше

BAM, или управляем кучей светодиодов

В статье пойдет речь о примере реализации BAM для плавного изменения яркости 22-х светодиодов. BAM — Bit Angle Modulation, подробности очень хорошо описаны тут bsvi.ru/bam-alternativa-shimu/


Читать дальше

Еще один способ опроса энкодера


Мне известно два метода обработки энкодера: по прерыванию (от INT0,INT1,PCINT…)
и сравнение предыдущего состояния энкодера и текущего ( easyelectronics.ru/avr-uchebnyj-kurs-inkrementalnyj-enkoder.html ). Я предлагаю еще один способ, который заключается в следующем:

Читать дальше

Программирование без условных переходов

Думая над структурой очередной программы, понял что ветвления это зло (для AVR это brcc, sbic и т.д.). Ветвление это принятие решение. Если входное данное такое, то идем туда. Если другое, то туда. Когда анализируешь работу программы, самое сложное это понимание участков с ветвлениями. Понял что возможно писать по другому принципу. Без использования операторов сравнений-ветвлений.

Суть такая. Входной байт данных не надо сравнивать с чем-то. А надо прогонять через последовательность заграждений или заборов. Каждое заграждение расчитано на свой байт. То есть если заграждение подготовлено для байта 0x0A, то по проходу этого байта выставляется 1 в соответствующем месте Идентификатора. Если заграждение прошел любой другой байт, выставляется 0 в Идентификаторе.


Читать дальше