Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #128


Клуб профессиональных программистов «Весельчак У»
Информационная рассылка сайта и форума.  Выпуск 128.  3 декабря 2011 г.

Здравствуйте, уважаемые читатели!



Вы сейчас читаете юбилейный, 128-й выпуск нашей рассылки.


Сегодня публикуем фрагмент завершающей части статьи «Hello World! в embedded-исполнении». Если кто не знает, статья обучающая: проектирование, TDD, молделирование и т.д. Приводим ссылки на все части:


  • Часть 1
    В первой части статьи приведен необходимый минимум знаний о тестировании для начала проекта. Прилагается список литературы для более глубокого изучения предмета.
  • Часть 2
    Во второй части статьи определяется общий подход к проектированию встроенного ПО и закладывается архитектура будущей системы, ориентированная на процесс разработки, управляемой тестированием.
  • Часть 3
    В третьей части производится анализ предметной области, выявляются основные модули приложения и определяются их интерфейсы.
  • Часть 4
    В этой части мы наконец перейдем от теории к практике. Разработаем make-файл для сборки проекта, сгенерируем два подставных объекта и с их помощью реализуем полностью протестированный модуль верхнего уровня.
  • Часть 5
    В этой части мы на время приостановим разработку кода и поэтапно приведем в порядок make-файлы сборки проекта.
  • Часть 6
    В этой части мы решим две важные задачи. Первая задача — документирование ранее написанного кода посредство утилиты Doxygen. Вторая — сборка программы на инструментальной системе с использованием моделей светодиода и таймера.
  • Часть 7
    Завершающая часть статьи. В ней будет разработана аппаратно-зависимая часть проекта и собрана версия для целевой системы. Мы проведем симуляцию проекта посредством программы Proteus, а затем прошьем ее в плату прототипа.



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

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


Приятного чтения! Прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


Оглавление



Реализуем HAL


Наша программная модель приложения на инструментальной системе работает, и работает вполне хорошо. Мы можем быть уверены с высокой степенью, что явных ошибок в коде нет. Конечно, не следует забывать, что успешно прошедший тест ни в коей мере не является доказательством правильности программы; однако мы не обнаружили расхождений между реальным поведением программы и поведением, предписанным спецификациями. Собственно, иначе и быть не могло, ведь модульные тесты по совместительству являются спецификациями.

Почивать на лаврах не дает одна небольшая, но очень существенная деталь: HAL. Мы до сих пор ничего не сделали в данном направлении. Конечно, мы можем утешать себя тем, что и так сделали все, что могли; что отсутствие аппаратных средств (по причине нерадивости коллег) не позволяет нам двигаться дальше; наконец, что прослойка HAL достаточно тонка и может быть реализована быстро и легко.


«Вопрос: что у нея... гм... у нея внутре за лпч?..»


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

Вот он, наш трофей (рис. 1).

Что мы можем почерпнуть их этой схемы? Прежде всего, мы видим, что светодиод подключен к младшему разряду порта C микроконтроллера. Кроме того, балластный резистор R1 подключен к шине питания +5V. Следовательно, чтобы зажечь светодиод, мы должны подать на младший разряд порта C низкий потенциал, то есть логический ноль. И наоборот, чтобы погасить светодиод, на младший разряд порта C следует подать высокий потенциал, или логическую единицу. Такое «инверсное» управление начинающим может показаться нелогичным, а инженеры со стажем воспринимают это как само собой разумеющееся. Оно имеет исторические корни: во времена господства логики TTL, которая долгое время была стандартом де-факто в области цифровой электроники, выходные каскады могли принимать втекающий ток (при низком потенциале на выходе) во много раз больше, чем выдавать вытекающий (при высоком потенциале). Современные микросхемы CMOS (к которым, в частности, относится и выбранный нами микроконтроллер ATmega16) имеют выходные каскады с симметричными характеристиками, но подход уже устоялся. Кстати, оттуда же берет начало привычка «подтягивать» логические входы к логической единице посредством резистора.

Разобравшись со схемой, мы можем загрузить Atmel AVR Studio (я использую версию 5, но знаю, что и у прежней, 4-й, осталось немало поклонников; я не вижу явных причин, по которой наш проект не мог бы быть откомпилирован в предыдущей версии).


Порт управления светодиодом


У нас уже есть модуль Led и его инструментальная реализация Led\src\PC\Led.c, которую мы использовали в модели устройства на инструментальной системе. Теперь мы разработаем целевую версию модуля Led\src\AVR\Led.c. Разумеется, он реализует тот же интерфейс Led\include.Led.h:


...



Полностью прочитать статью можно на нашем сайте, в разделе «Инструменты и технологии проектирования ПО».



В избранное