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

О блоге

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

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

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

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

Читатели (153)

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

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

Раздельная компиляция в С/С++

Для компиляции программ, чей исходный код разделен на несколько файлов, в С используется механизм раздельной компиляции. Однако, далеко не все понимают, как он работает, что порождает кучу однотипных вопросов и ошибок, особенно у тех, кто раньше работал с языками с модульной компиляцией (Object Pascal/Delphi, Java, C# и другие) не особо вникая в суть и различия этих механизмов.


Читать дальше
  • +4
  • 23 июня 2011, 01:26
  • Vga

Препроцессор C

Си препроцессор представляет собой макро язык, который используется для преобразования программы до того как она будет скомпилирована. Причем сама программа может быть не обязательно на Си, она может быть на С++, Objective-C или даже на ассемблере. В общем препроцессор представляет собой примитивный как-бы функциональный язык, с помощью которого можно делать вполне интересные вещи.


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

Простой полосовой фильтр

Вот мигалочка из 4 полосовых «фильтров» на тиньке.



Как работает эта штука?


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

Типобезопасные флаги на базе enum

При работе с микроконтроллерами на низком уровне очень часто приходится работать с отдельными битами в конфигурационных регистрах, с различными флагами состояний и т.д. Традиционно в языке «С» для этого используются целочисленные переменные и битовые операции с ними. Всё вроде-бы просто и понятно, что еще нужно? Типобезопасность. Целочисленной переменной, используемой для флагов, можно присвоить любое неосмысленное число, и компилятор совершенно не будет против.



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

Сжатие монохромных картинок - изобретаем PCX

У меня образовался дисплейчик от нокии 3310. Монохромный. 84 х 48 пикселей.
Пока еще его не подключал. Только напаял проводочки.

Сегодня думал — в каком формате хранить картинки. Если записывать без сжатия по 1 биту на пиксель, то один кадр занимает 504 байта. Для отображения пары картинок оно конечно уместно, а вот если хочется записать в МК анимацию или еще что, то будет фейл.

Стал думать над тем, как-бы сжать картинку, чтобы при этом на распаковку тратилось минимум времени и сил. Первое, что пришло на ум — PCX. Это такой древний, как MS-DOS, формат изображений.

Суть в следующем: вместо того, чтобы писать подряд цвета для каждого пикселя, мы запишем сколько пикселей одного цвета идут друг за другом и цвет этой пачки.



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

DowLib

Ассемблерная библиотека (AVR) для работы с однопроводным интерфейсом Dallas One Wire.
Решил собрать воедино всё, что говорил по этому поводу, чтобы не приходилось искать. Итак, вашему вниманию предлагается полуфинальный вариант библиотеки для работы с однопроводной шиной.

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

Минималистичная очередь задач на C.

Недавно тут появилась замечательная статья про реализацию кольцевого буфера на C++ [1]. Статья весьма ценная и полезная, но, как вполне справедливо заметили в комментариях, что бы писать на крестах под контроллеры надо весьма хорошо знать этот язык, иначе красивый и, вроде бы, элегантный плюсовый код собирается в ресурсоёмкое тормозилово. Я и сам хоть и пишу десктопные проги на плюсах, под контроллеры пока предпочитаю использовать чистый С. Так вот, по этому поводу вспомнилось мне, что я как раз недавно занимался шлифовкой очереди задач на основе кольцевого буфера на сях, и я решил поделиться своими наработками — вдруг кому пригодится. Код, разумеется, платформонезависимый (ну кроме конструкции ATOMIC_BLOCK), а вот оптимизация делалась под avr-gcc и на других платформах/компиляторах может быть излишней.


Читать дальше
  • +3
  • 01 апреля 2011, 09:48
  • Alatar

Немного о тестировании программ для МК

Тестирование программного обеспечения область очень сложная и обширная. По этой теме написано много работ применительно к различным методам разработки ПО и стекам технологий. Однако, большинство из них посвящено тестированию серверного ПО и прикладного ПО для ПК. Тема тестирования микроконтроллерных систем освещена крайне мало. Попробую немного восполнить этот пробел. В этой статье рассмотрены примеры модульного и интеграционного тестирования на примере МК семейства AVR.


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

От перестановки слагаемых сумма не меняется?

Выловив в программе заморского коллеги очередной баг, решил его описать, поскольку сталкиваюсь с такой ошибкой уже не в первый раз.

Простое правило арифметики, знакомое всем со школьной скамьи, приняло форму аксиомы. И если спросить у любого обывателя: «Есть ли разница в записях d=a-b+c и d=c+a–b?» — то, скорее всего, получим ответ, что записи тождественны. Однако, если такой же вопрос задать программисту, то в ответ услышим «Не всегда» или получим серию уточняющих вопросов. Плох тот программист, который скажет, что разницы в этих записях нет.

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

Простой универсальный декодер ИК ДУ


Использование ИК ДУ пультов от бытовой техники достаточно популярно для управления различными самодельными устройствами от различных умных выключателей света, систем умного дома и до игрушек и роботов. Существует большое разнообразие протоколов ИК ДУ пультов и способов кодирования сигнала. Предлагаю один очень простой способ обработки ИК сигналов, работающий с большинством распространённых протоколов.


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