Это-ж open source!

Хороши продукты с открытым исходным кодом — бесплатны, свободны, сообщество и всё такое. Да вот ошибки в ни, к сожалению не редкость. Но это-ж open source! Нашел ошибку, исходный код есть — возьми и почини. Сказать легко. Дальше маленькое расследование одной редкой, но неприятной ошибки в пакете binutils для ARM.


История одной ошибки

Преобразуем в строку. Часть 2. Числа с фиксированной и плавающей точкой.

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

В качестве чисел с плавающей точкой использован 32-х разрядный float.



Читать дальше
  • +14
  • 07 января 2013, 13:08
  • neiver
  • 1

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

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


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

Интересная функция в avr-gcc 4.7

AVR
Недавно обнаружил в avr-gcc 4.7 новую встроенную функцию __builtin_avr_insert_bits.
В заголовок <avr/builtins.h>, где находятся остальные встроенные функции, эту функцию пока не включили и объявлять ее прототип придётся самостоятельно:
unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val);

Эта функция делает вставку отдельных бит из параметра bits в значение val, при этом параметр map задаёт способ вставки бит. Каждые 4 бита в map отвечают за отображение одного бита:
  • Если значение тетрады 0xf, то в соответствующий выходной бит копируется значение соответствующего бита из val
  • Если значение тетрады в диапазоне 0-7, то в соответствующий выходной бит копируется значение бита с номером равном этой тетраде из bits
  • Для остальных значений выход не определен.

Основное назначение этой функции — работа с несмежными линиями ввода-вывода. То есть то, что я делал тут и тут.
Достоинства:
  • Предельно эффективный генерируемый машинный код. Используются инструкции, которые нельзя сгенерировать с помощью стандартного Си кода, например, BST и BLD.
  • Способ отображения бит хранится в целочисленной 32-х битной константе, которую можно вынести из места использования куда-нибудь в заголовок.
Недостатки:
  • Только 8-ми битные значения.
  • Совершенно непереносимо — поддерживается только в одном компиляторе — avr-gcc 4.7.
Искать эту функцию в WinAVR или в AVR Toolchain от Atmel не стоит — там используется avr-gcc 4.5.x.
Достать avr-gcc 4.7. собранный под Windows можно тут.

Способ отладки механизмов вытесняющих RTOS на ПК топик-ссылка

Большая часть кода программ для МК может быть с успехом отлажена и протестирована на ПК. Зачем это нужно? Это удобно и сильно экономит время. Гораздо быстрее запустить программу на компьютере, посмотреть её вывод, походить по шагам, чем мучаться с железными отладчиками или мигать светодиодом. Плюс появляется удобная возможность писать авто-тесты. Автор заметки предлагает интересный способ имитации среды с прерываниями, в том числе позволяющий отлаживать внутренние механизмы вытесняющих RTOS.

Графическая библиотека для МК на С++. Драйвер KS0108.

Продолжая работать над своей библиотекой для микроконтроллеров, я начал реализовывать графическую подсистему. Для начала дисплей был выбран на популярном контроллере KS0108 — в первую очередь по тому, что он относительно стандартный, доступный и многим хорошо знаком. В сети довольно много материала по работе с этим контроллером, много и готовых библиотек, но почему-то почти везде вывод текста и картинок должен быть выровнен по границам страниц дисплея. Это не удобно. Так-же большинство готовых библиотек реализуют рисование прямых и окружностей с толщиной линии только в один пиксель.

Итак, реалированные фичи:
  1. Дисплей можно подключать на любые свободные ноги МК;
  2. Независимомть от целевой платформы;
  3. Возможность отладки на ПК;
  4. Высокоуровневый код для рисования не зависит от дисплея;
  5. Минимальные требования к RAM, ROM и F_CPU;
  6. Картинки могут храниться как по строкам, так и по столбцам;
  7. Поддержка нескольких шрифтов;
  8. Поддержка юникода.
  9. Рисование линий заданной толщины;
  10. Шрифты и картинки могут быть любого доступного размера.


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

Online MSP430 editor топик-ссылка

Нашел интересный сервис - онлайн редектор проектов для MSP430. Можно создавать проекты, компилить и тут-же заливать на тестовый MSP430 launchpad, на который можно посмотреть через вэб-камеру. Логинится туда нужно с гуглового аккаунта.

Модуль на FT2232HL

Сделал модуль на FT2232HL. От FT2232D она отличается тем, что поддерживает High Speed USB (480 Mбит/сек) и имеет корпус с 64 выводами.


Смотреть, что получилось.

Работа с группами линий ввода-вывода на Си (без плюсов)

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



Здесь начинается препроцессорная жесть

Новый mspgcc

Ключевые компоненты:
  • msp430-gcc 4.5.3
  • Binutils 2.21.1
  • gdb 7.2
Раньше существовало два порта GCC для микроконтроллеров Msp430, один — mspgcc — на базе GCC 3.2.3, другой — mspgcc4 — на базе GCC 4.3.x. Теперь обе команды объединили усилия в рамках одного проекта mspgcc, заодно перейдя на GCC 4.5. Тыц

Как изменилось качество генерируемого кода не знаю, еще не проверял. Библиотека осталась практически без изменений.
  • 0
  • 11 ноября 2011, 14:55
  • neiver