Рейтинг
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

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

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

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


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

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

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


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

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

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

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

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

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


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


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

Сжатие звука в IMA ADPCM

Есть такой аудиокодек — IMA ADPCM. Сжимает аудио в 4 бита на сэмпл (250 кбит/с при частоте дискретизации 32 кГц, стерео), после чего, достаточно достоверно восстанавливает. А главное, очень быстро. Около 100 тактов на сэмпл на ядре AVR.

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


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

Кольцевой буфер на С++ для МК.

Кольцевой буфер (КБ)(Ring Buffer) — структура данных типа FIFO (First In First Out — первым вошел, первым вышел), находит очень широкое применение в том числе при программировании МК. Кольцевые буферы часто используют для организации различных очередей сообщений и буферов приёма-передачи различных коммуникационных интерфейсов. Популярность КБ обусловлена тем, что это один из самых простых и эффективных способов организовать FIFO без использования динамической памяти. Существует множество разновидностей КБ, о них можно почитать, например тут en.wikipedia.org/wiki/Circular_buffer Рассмотрим одну очень быструю и компактную реализацию КБ на С++.


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

AVR, С++ и умные указатели

AVR, С++ и умные указатели

Как известно МК AVR построены по Гарвардской архитектуре, что значит МК имеет различные шины для памяти программ — flash, eeprom и ОЗУ. Многие МК имеют различные шины для разных типов памяти, это даёт возможность, например, одновременной выборки команд и доступа в ОЗУ. Однако в большинстве современных МК при этом все различные виды памяти отображаются в единое адресное пространство. В AVR же и шины разные и отображаются они в разные адресные пространства. Это создаёт определённые неудобства при программировании на Си/Си++ поскольку эти языки подразумевают единое адресное пространство и работа, например, с константами хранящимися в памяти программ осуществляется не очень прозрачно.


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