AVR. Учебный курс. Архитектура Программ. Часть 3

Приоритетный диспетчер.
Одной из проблем простого диспетчера является то, что все задачи имеют равный приоритет. С одной стороны, это просто и удобно. С другой — какое-либо важное событие можно прошляпить, пока там конвейер перещёлкает все задачи…

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

Если нужна высокоуровневая система приоритетов, то можно очередь задач превратить в двумерный массив, где вторым этажом будет идти приоритет задачи. Правда при этом увеличиться время обработки конвейера — ведь надо будет сперва прочесать всю очередь в поисках наибольшего элемента. Но тут можно напридумывать кучу оптимизаций. Например, сортировать очередь при постановке задачи на конвейер, либо завести TOP list приоритетов, занося туда значения приоритетов. Тогда диспетчер, обрабатывая очередь, сразу будет искать нужный элемент, ориентируясь по TOP листу. Но вот так, на вскидку, я не берусь сказать какой из приемов будет эффективней/компактней/быстрей.
(далее…)

Read More »

Паяльная станция Aoyue 950+

DI HALT:
Накопилось у меня тут прорва чужих статей, присланных мне на сайт. Вот буду их потихоньку верстать и выкладывать.

Понадобилось достаточно плотно работать с SMD, да и чем дальше, тем больше попадается всякого мелкого. Вот и захотелось как-то упростить себе жизнь.

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

Решил взять Aoyue 950+: термопинцет, да еще и с паяльником в комплекте.

Заказал, пару дней подождал, забрал.
Полностью черный корпус, тумблер питания, ручка регулировки температуры, да разъем под термопинцет и паяльник.
Сама конструкция очень сильно напомнила описанную ранее паяльную станцию Pro’sKit SS-217: такой же с виду паяльник, разъем под него и под термопинцет, такая же подставка от «фанатов бронепоездов».

Итак, комплектация:

  • основной блок с шнуром питания;
  • паяльник (модель 950, без «+» идет без паяльника);
  • термопинцет;
  • подставка;
  • резиновый коврик, по описанию стойкий к высокой температуре;
  • сменные более широкие жала для термопинцета.

(далее…)

Read More »

Sprint Layout 5. Подробное руководство.

DI HALT

Несмотря на простоту этой программы, меня часто просят написать по ней статью. Но мне все было некогда. Поэтому роль Капитана Очевидность взял на себя Sailanser. Выполнив этот титанический труд. Я лишь подкорректировал, да добавил кое где подробностей.

Всем наверно давно известна программа для изготовления печатных плат под названием Sprint-Layout, на данный момент последняя версия гордо именуется, 5.0

Сама программа очень простая и не потребует много времени на свое освоение, но позволяет делать платы достаточно высокого качества.

Как я и говорил, сама программа довольно проста, но имеет множество кнопочек и менюшек, помогающих нам в работе. Поэтому наш урок в рисовании платы разделим на насколько частей.
В первой части познакомимся с программой и узнаем, где и что в ней прячется. Во второй части нарисуем простенькую плату, которая будет содержать, к примеру, пару микросхем в DIP корпусах (причем эти микросхемы сделаем с полного нуля), несколько резисторов и конденсаторов, также посмотрим такую интересную фишку программы как Создатель макроса и сделаем с его помощью корпус микросхемы, например TQFP-32.
Также я покажу как обрисовать плату с картинки или фотографии. (далее…)

Read More »

Форум. Второе пришествие

Самые нетерпеливые уже заметили что форум таки поднялся и даже не вешает сайт. Впрочем, старый форум один фиг не жилец. Дело в том, что последние два три месяца он начал адски глючить (да и раньше красотой кода не отличался, честно говоря) и грузить хостинг. В общем, Simple:Press Forum изначально был мертворожденным уродцем подходящим разве что для красоты. Не способен он работать на больших нагрузках (кто ж знал, что форум так резко разрастется, я то его вообще для галочки ставил :) )

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

По поводу переноса инфы со старого форума тут вопрос сложный. Дело в том, что найти конвертер к симпл прессу нам так и не удалось, а свой мы если и напишем, то далеко не скоро. Т.к. больших спецов по SQL у нас нету. Поэтому новый форум стартует с нуля. А старый через недельку и вовсе будет закрыт для редактирования, превратившись в статичный архив. Если у кого в старом форуме есть активная тема, то проще всего будет поднять такую же тему в новом форуме и связать их перекрестными ссылками. Мол «начало тут» & «конец там».

Кроме того, есть 100МБ статичный архив сайта (и неслабого куска форума). С картинками и файлами, практически до последней записи. За эту радость спасибо Андрею Кузнецову.

Read More »

Паяльник GOOT PX-201

Долго гонялся я за этим агрегатом. С лета прошлого года. Наконец, под заказ, из Masteram мне его притащили. Почему именно он? Да люблю я этот паяльник, однажды на работе в руки попался с тех пор вот хочется иметь домой на всякий случай. Кстати, именно с него был слизан CT-96 и остальные клоны.

Итак, что из себя представляет GOOT PX-201.

Это отличный японский паяльник с регулировкой температуры и мощным (70Вт!!!) керамическим нагревателем. (далее…)

Read More »

AVR. Учебный Курс. Архитектура Программ Часть 2

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

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

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

Благодаря такой системе управляющую структуру можно вынести в отдельную библиотеку, сварганить к ней конфиг и таскать за собой ее туда сюда. Очень удобно.

А теперь подробно распишу тот диспетчер который стоит в 90% моих проектов на Си.
(далее…)

Read More »

AVR. Учебный Курс. Архитектура Программ

Все учебные курсы по микроконтроллерам которые я встречал (в том числе, к сожалению, и мой ассемблерный, но я надеюсь это постепенно поправить) страдают одной и той же проблемой.
В курсе бросаются строить дом не заложив фундамент. Только показав на примере как мигнуть светодиодом, сразу же кидаются в периферию. Начинают осваивать ШИМ-ы, таймеры, подключать дисплеи и всякие термодатчики.
С одной стороны это понятно — хочется действа и результата мгновенно. С другой — рано или поздно такой подход упрется в тот факт, что программа, надстраиваемая без четкой идеологии, просто обрушится под своей сложностью. Сделав невозможным дальнейшее развитие.
Итогом становится либо рождение жутких программных уродцев, либо миллионы вопросов на форуме вида «а как бы мне все сделать одновременно, а то частоты контроллера уже на все не хватает».
 

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

 
Итак, что такое структура программы. Это, прежде всего, ее скелет. То какими путями движется код. Как организованы переходы между задачами прошивки. То как распределяется процессорное время. Без краткого ликбеза по общим принципам построения прошивки дальше двигаться нет смысла.

Все ниже написанное это лишь продукт моих умозаключений, поэтому терминология может отличаться от общепринятой. Если это сильно кому то будет резать глаз — поправляйте в комментах.

 

Итак, я для себя выделяю следующие структуры, по порядку возростания сложности конструкции и количеству управляющего кода:
 

  • Суперцикл
  • Суперцикл+прерывания
  • Флаговый автомат
  • Диспетчер
  • Приоритетный диспетчер
  • Кооперативная RTOS
  • Вытесняющая RTOS

 

А теперь подробно по каждому пункту: (далее…)

Read More »

AVR toolchain своими руками

DI HALT:
В догонку к прошлому посту про AVR Studio в Linux досылаю и про сборку avr-libc там же. Вынесено из комментов к предыдущему посту. Спасибо Dark SavanT

Если есть возможность поставить готовый тулчейн из пакета, лучше воспользоваться ей.
преимущество самосборного в том, что все что надо, лежит там где сказано и не засоряет /usr/*. Но тут мы теряем автоматические обновления из пакетов. Короче, думайте сами, решайте сами.

Поехали!
В минимальной комплектации нам понадобятся:

  • binutils — это ассемблер, линкер, objdump и еще куча необходимых для сборки бинарника вещей
  • gcc — собственно сам компилятор.
  • avr-libc — стандартная библиотека С для AVR архитектуры.
  • avrdude — программа для прошивки. Хальт про нее не раз писал.

для того, чтобы это все безобразие собралось, нужен установленный в системе gcc, bash, awk, binutils, libc, может что-то еще забыл.
(далее…)

Read More »

Ключ от всех дверей. Эмулятор ключей от домофона.

Ты потерял ключи от домофона и не можешь сделать дубликат. Хочешь ходить в гости к подруге, но у тебя нет ключей от её подъезда. Либо просто тебе нужно подосрать твоему недругу, но ты не можешь попасть к нему в дом, тогда эта статья для тебя.

Пара слов о принципе работы…
Бытует мнение, что в таблетках от домофона находится магнит, и он открывает дверь. Нет, это не так. Таблетка представляет собой ПЗУ, с жёстко зашитым в ней ключом. Называется это ПЗУ — Touch Memory, марки DS1990A. DS1990A — это и есть марка домофонных ключей. Общается с домофоном по шине one-wire (однопроводной интерфейс). Эта шина разработана фирмой Dallas и позволяет общаться двум устройствам всего по одному проводу. Если устройство пассивное (как в нашем случае), то оно ещё и передаёт ему питание по этому проводу. Надо ещё заметить, что необходим ещё общий провод (чтобы цепь замыкалась), но, как правило, все земли устройств подключённых к этой шине соединены воедино. В ключе находится конденсатор на 60 пикофарад, который обеспечивает кратковременное питание ключа на момент ответа. Но ведущее устройство должно постоянно (не реже чем в раз 120 микросекунд) генерировать сигнал единицы, для зарядки этого конденсатора, чтобы ПЗУ в таблетке продолжало питаться.

Потроха таблетки. Как видно, никаких магнитов там нет!
(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Работа с памятью, адреса и указатели

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

Итак, начну по порядку.
Инфа, любая инфа (команды, данные) лежит в памяти по ячейкам. У каждой ячейки есть порядковый номер — адрес.

Мы можем напрямую сказать процессору — возьми данные из ячейки с адресом 0xA0 и положи его в ячейку с адресом 0x11. Это будет прямая адресация. Здесь адреса 0xA0 и 0x11 содержатся напрямую в машинном коде. Это очень быстро, просто и не требует никаких дополнительных телодвижений. Один минус — адреса 0xA0 и 0x11 нельзя изменить, как мы их впишем в код, так они там и останутся.

Но может быть и другой способ. Когда у нас есть еще две ячейки памяти. Например, А и Б в которые мы предварительно положим числа 0xA0 и 0x11 соответственно. И тогда предыдущая операция будет выглядеть так.

Возьми число из ячейки адрес который лежит в А и положи в ячейку адрес которой узнаешь из Б.

Результат тот же, но возникло множество дополнительных телодвижений. Во первых положить первоначальные адреса 0xA0 и 0x11 в ячейки А и Б. Потом, при совершеннии операции, используая данные ячеек А и Б как адреса, взять уже оттуда нужные нам данные и совершить обмен.

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

А один и тот же кусок кода становится универсальным. Он может работать с любыми данными адреса которых нам укажут переменные А и Б.

А сами эти переменные и будут указателями.
(далее…)

Read More »