Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование микроконтроллеров: стратегия и тактика

Покупка
Артикул: 712395.01.99
Доступ онлайн
799 ₽
В корзину
Книга посвящена программированию встраиваемых систем с применением микроконтроллеров. Материал книги сгруппирован в соответствии со стандартными этапами разработки любого программного обеспечения: анализом требований, проектированием, кодированием, отладкой и тестированием. Издание проиллюстрировано примерами на С и анализом получаемого в результате компиляции машинного кода для двух популярных семейств микроконтроллеров Microchip: PIC 18 (8 бит) и PIC24 (16 бит). Однако рассмотренные подходы и приемы могут быть использованы при программировании микроконтроллеров других производителей.
Матюшин, А.О. Программирование микроконтроллеров: стратегия и тактика / А.О. Матюшин. - Москва : ДМК Пресс, 2017. - 356 с. - ISBN 978-5-97060-098-6. - Текст : электронный. - URL: https://znanium.com/catalog/product/1027531 (дата обращения: 19.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Программирование микроконтроллеров

Интернет-магазин:
www.dmkpress.com
Книга - почтой:
orders@alians-kniga.ru
Оптовая продажа:
“Альянс-книга”
Тел.: (499)782-3889
books@alians-kniga.ru
www.дмк.рф

Книга посвящена программированию встраиваемых систем с применением 
микроконтроллеров. Материал книги сгруппирован в соответствии со стандартными этапами разработки любого программного обеспечения: анализом 
требований, проектированием, кодированием, отладкой и тестированием.
В первой главе рассмотрены работа в реальном времени, безопасность, надежность, энергосбережение, модифицируемость и переносимость программного 
обеспечения встраиваемых систем.
Вторая глава затрагивает два основных этапа проектирования программного 
обеспечения: структурный и конкурентный дизайн, а также особенности многозадачных систем реального времени.
В третьей главе приведены рекомендации по кодированию, созданию проектов 
и записи программ на языке С.
Последняя глава посвящена отладке полученного кода и его тестированию на 
различных платформах. 
Издание проиллюстрировано примерами на С и анализом получаемого в результате компиляции машинного кода для двух популярных семейств микроконтроллеров Microchip®: PIC18 (8 бит) и PIC24 (16 бит). Рассмотренные 
подходы и приемы могут быть использованы при программировании микроконтроллеров других производителей.

Программирование 
микроконтроллеров

Матюшин А. О.

Стратегия и тактика

9 785970 600986

ISBN 978-5-97060-098-6

Матюшин Андрей Олегович. С 12 лет увлекается радиоэлектроникой, чуть позже – компьютерной техникой и программированием на ассемблере. В 1999 году окончил НаучноИсследовательский Университет “Московский Энергетический 
Институт (МЭИ)” по специальности вычислительные машины, 
системы и сети. С 2000 по 2007 год преподавал курс «Передача 
информации» на кафедре ВМСС МЭИ. С 1995 года работает в 
Центре Интеллектуальных Медицинских Систем «ИМЕДИС». В 
качестве хобби занимается диагностикой электронных устройств 
автомобилей.

Надежность 

Безопасность

Реальное время

А. О. Матюшин

Программирование 
микроконтроллеров: 
стратегия и тактика

Москва, 2017

УДК 621.316.544.1:004.4
ББК 31.264с

М35

Матюшин А. О.

М35
Программирование микроконтроллеров: стратегия и тактика. – М.: ДМК 
Пресс, 2017. – 356 с.
ISBN 978-5-97060-098-6

Книга посвящена программированию встраиваемых систем с применением ми
кроконтроллеров. Материал книги сгруппирован в соответствии со стандартными 
этапами разработки любого программного обеспечения: анализом требований, проектированием, кодированием, отладкой и тестированием.

Издание проиллюстрировано примерами на С и анализом получаемого в резуль
тате компиляции машинного кода для двух популярных семейств микроконтроллеров Microchip: PIC18 (8 бит) и PIC24 (16 бит). Однако рассмотренные подходы 
и приемы могут быть использованы при программировании микроконтроллеров 
других производителей.

УДК 621.316.544.1:004.4
ББК 31.264с

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой 

бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.

Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность 

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

© Матюшин А. О., 2016

ISBN 978-5-97060-098-6
© Оформление, издание, ДМК Пресс, 2017

СОДЕРЖАНИЕ

Предисловие ....................................................................................5

Благодарности .................................................................................6

Введение..........................................................................................7

1
  
Анализ требований ............................................................... 15
1.1. Идентификация .....................................................................................................16
1.2. Требования реального времени ........................................................................19
1.3. Безопасность ...........................................................................................................36
1.4. Надежность ..............................................................................................................49
1.5. Защищенность ........................................................................................................63
1.6. Энергосбережение .................................................................................................68
1.7. Эффективность разработки ...............................................................................73

2
  
Проектирование ................................................................... 81
2.1. Структурный дизайн ............................................................................................82
2.1.1. Системы и подсистемы .............................................................................82
2.1.2. Объектно-ориентированная декомпозиция ......................................89
2.1.3. Автоматное программирование .......................................................... 101
2.2. Конкурентный дизайн ...................................................................................... 115
2.2.1. Логика функционирования и логика выполнения ...................... 115
2.2.2. Задача как синхронная программа .................................................... 118
2.2.3. Декомпозиция на задачи ....................................................................... 129
2.2.4. Доступ к общим ресурсам и взаимное исключение ..................... 146
2.2.5. Планирование задач ............................................................................... 163
2.3. Операционные системы реального времени ............................................. 179
2.3.1. ОСРВ как инструмент ........................................................................... 179
2.3.2. Проблема выбора ..................................................................................... 183
2.3.3. Особенности интеграции ...................................................................... 192
2.3.4. Реализация для микроконтроллеров малой разрядности ......... 198

3
 Кодирование ............................................................................213
3.1. Структура проекта ............................................................................................. 214
3.2. Оформление программ ..................................................................................... 226
3.3. Применение средств языка ............................................................................. 237
3.4. Литералы, константы и выражения ............................................................. 245
3.5. Атомарность и изменчивость ......................................................................... 250
3.6. Оптимизация кода ............................................................................................. 266

СОДЕРЖАНИЕ
4
4
 Отладка и тестирование ............................................................296
4.1. Ошибки и симптомы ......................................................................................... 297
4.2. Инспекция кода и формальная верификация .......................................... 310
4.3. Тестирование и кросс-платформенная отладка ....................................... 322
4.4. Отладка в реальном времени .......................................................................... 333

Вместо заключения .......................................................................347

Литература ...................................................................................348

Предметный указатель ...................................................................353

ПРЕДИСЛОВИЕ

Книга не содержит сложных формул и теоретических выкладок. Здесь также нет 
кочующих из издания в издание готовых решений. Тем более нет почерпнутых 
из оригинальной документации громоздких схем и огромных таблиц с машинными командами процессора: все это при необходимости интересующийся читатель всегда сможет найти сам. Эта книга – руководство «как делать» и «почему именно так», сборник, в который вошли самые разнообразные материалы, 
начиная с общих идей и рассуждений и заканчивая конкретными примерами 
их реализации.
Цель книги – создать у читателя, уже знакомого с микроконтроллерами, 
единое цельное представление о том, какое разнообразие аспектов необходимо учитывать и с каким широким спектром проблем приходится сталкиваться 
в практической работе. Несмотря на то что некоторые примеры ориентированы на микроконтроллеры Microchip® PIC18 и PIC24, рассмотренные подходы 
и приемы могут оказаться полезными при разработке программного обеспечения 
и для других устройств.

БЛАГОДАРНОСТИ

Благодарность моим родителям за помощь и поддержку в моем увлечении радиоэлектроникой и вычислительной техникой.
Благодарность коллективу Центра интеллектуальных медицинских систем 
«ИМЕДИС» и его генеральному директору Готовскому Михаилу Юрьевичу, 
без поддержки которых эта книга не увидела бы свет.
Благодарность сотрудникам испытательной лаборатории технических средств 
по требованиям электромагнитной совместимости (ИЛ ТС ЭМС) ФБУ «РОСТЕСТ–МОСКВА» и ее руководителю Чеботареву Станиславу Николаевичу за 
многолетнее плодотворное сотрудничество.

ВВЕДЕНИЕ

Микроконтроллер (microcontroller), как следует из названия, – это всего-навсего маленький (micro) инструмент для управления (control) какими-либо 
процессами реального мира. С этой целью в микроконтроллере предусмотрены 
периферийные аппаратные средства: порты ввода-вывода, АЦП, ЦАП, счетчикитаймеры, приемопередатчики. Обработка и формирование сигналов, связанных 
с этими процессами, осуществляются сердцем микроконтроллера – однокристальной микропроцессорной системой в соответствии с программным обеспечением, обычно хранящимся в энергонезависимой памяти. Маленьким микроконтроллер делает конструктивное объединение всех перечисленных устройств 
на одном кристалле.
Следует понимать, что процессами реального мира управляет не только программное обеспечение, которое всего лишь закодированная последовательность 
действий, не отдельно взятый микроконтроллер, для которого как минимум 
необходим источник питания, а готовое устройство – система, объединяющая 
аппаратные и программные средства. Применение программно-управляемых 
компонентов позволяет упростить разработку и поддержку таких систем, поскольку основные затраты переносятся из аппаратной, схемотехнической в программную, алгоритмическую область. По сравнению с аппаратными решениями, 
разработка программного обеспечения – «виртуальное конструирование» – имеет неоспоримые преимущества:
 
• гибкость алгоритмов цифровой обработки данных;
 
• возможность быстрой модификации системы;
 
• простота отладки: симуляторы, эмуляторы, внутрисхемные отладчики;
 
• повторное использование готовых программ и библиотек;
 
• использование стандартной аппаратуры для решения разных задач.

Альтернативным вариантом «виртуального конструирования», обладающим теми 
же преимуществами, является разработка с применением программно-конфигурируемых устройств – ПЛИС. Хорошая перспектива у гибридных систем, сочетающих 
программно-управляемые и программно-конфигурируемые компоненты.

В принципе, для программного управления можно задействовать мощные 
микропроцессорные системы, вычислительные возможности которых позволяют 
запускать универсальные операционные системы с широким спектром прикладного программного обеспечения. Однако их применение может оказаться технически невозможным в условиях жестких требований к компактности, надежности, пониженному энергопотреблению, низкой стоимости, наличию встроенных 
средств, облегчающих интеграцию с системой и объектом управления. Напротив, 
микроконтроллеры предоставляют возможность конструктивно объединить аппаратные и программные средства в одном узле – «интеллектуальном» датчике 
или исполнительном механизме, что, в частности, повышает его надежность, обеспечивая при этом требуемую функциональность.

Датчик угла поворота руля, необходимый в системе динамической стабилизации 
автомобиля ESP/DSC, содержит интегрированный микроконтроллер, передающий 

ВВЕДЕНИЕ
8

данные блоку управления по двухпроводной цифровой шине CAN (рис. 1). Таким образом, длина аналоговых сигнальных цепей сведена к минимуму.

(a)

(б)

Рис. 1.  Датчик угла поворота руля автомобиля (а) и его функциональная схема (б) [5]

Тем не менее микроконтроллерам присущ и ряд недостатков: малая емкость 
оперативной и постоянной памяти, низкое (по сравнению с полнофункциональными универсальными микропроцессорными системами) быстродействие, отсутствие, в подавляющем большинстве, аппаратно-реализованных механизмов 
управления памятью и разграничения доступа, необходимость модификации 
программного обеспечения под конкретную аппаратную реализацию. Из-за этого программирование для микроконтроллеров превращается в балансирование 
между большим количеством жестких функциональных требований и весьма 
ограниченными аппаратными возможностями.
Например, емкость встроенной оперативной памяти микроконтроллера недостаточна для реализации подходящего алгоритма. Замена микроконтроллера 
на модель с большей емкостью памяти нецелесообразна из-за унификации производства, требований по потреблению или наличию в используемом микроконтроллере специфических аппаратных средств. Это заставляет либо модифицировать алгоритм, выполняя большее число действий для экономии памяти, 
либо добавлять в схему внешнюю память, ограничив число доступных портов 

ВВЕДЕНИЕ
9

ввода-вывода. Выбор первого решения в большей степени определяется профессионализмом программиста и влияет лишь на трудоемкость разработки, что при 
серийном производстве несущественно увеличивает стоимость конечного изделия. Второе решение, облегчающее программисту жизнь, приводит не только 
к удорожанию каждого изделия, но и снижает надежность за счет установки 
дополнительных компонентов, менее устойчивых к внешним помехам, например 
к электростатическим разрядам.
В целом программирование для микроконтроллеров имеет ряд специфических 
особенностей:
 
• состав и функции оборудования, а также перечень программно решаемых 
задач определяются на этапе разработки;
 
• разработка программного и аппаратного обеспечения проводится в тесной 
взаимосвязи;
 
• обязательно используется постоянная и/или стираемая энергонезависимая 
память;
 
• программное обеспечение не модифицируется во время работы: обновление проводится путем замены микроконтроллера, с помощью внутрисхемных программаторов (in-circuit programmers) или встроенных загрузчиков 
(bootloaders);
 
• применяются эффективные и не требовательные к ресурсам алгоритмы;
 
• программное обеспечение монолитно, разработчик полностью отвечает за 
его качество даже при использовании сторонних программных модулей 
или библиотек;
 
• программное обеспечение разрабатывается на другой, более мощной платформе, исполняемый код загружается в микроконтроллер для отладки или 
в процессе производства готового изделия;
 
• отсутствуют специфические для универсальных микропроцессорных систем проблемы: многопользовательский доступ, защита от компьютерных 
вирусов и т. п.
Перечисленные особенности разработки программного обеспечения характерны не только для микроконтроллеров, но и для более широкого класса так называемых «встраиваемых систем» (embedded systems). Программирование для 
них в настоящее время считается отдельным направлением [30].
Средства разработки программного обеспечения для встраиваемых систем 
и микроконтроллеров также достаточно разнообразны [65]. Они включают как 
полноценные инструменты, позволяющие получить исполняемый код:
 
• императивные процедурные языки (C, ассемблер),
 
• системы визуального программирования;
так и вспомогательные инструментальные средства:
 
• языки описания и моделирования (VHDL, verilog),
 
• средства статической и динамической проверки исходного кода,
 
• системы управления проектами (RCS, CVS).

К системам визуального программирования можно отнести Actum® Realizer®, который позволяет разработать схему устройства и осуществить ее программное моделирование (рис. 2).

ВВЕДЕНИЕ
10

Рис. 2. Автомат, бросающий игральную кость, – Actum® Realizer [www.actum.com]

Для поддерживаемого микроконтроллера Realizer может сгенерировать программный 
код как на языке ассемблера, так и на языке C.

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 *
 * (c) Copyright Actum Solutions 1990.. 2000. All Rights Reserved.
 *
 * File: ros552.c
 * Language: 80552 C
 * Compiler: Tasking CC51 V4
 * Description: Realizer Operating System for a 80C552
 *
 * Revision log:
 * Ver. Date Id Description
 * 1.00 960201 RPJK First release
 * 1.01 000327 MBR Names of functions
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "stdlib.h"
#include "string.h"
typedef unsigned char byte; /* 8 bit type for common use */
typedef unsigned int word; /* 16 bit type for common use */
#define TRUE 1

ВВЕДЕНИЕ
11

#define FALSE 0
#define DOGTIME 0x00
#define Lo10ms 0x00
#define Hi10ms 0xDC
rom byte copyright[] = "ROS552 [rev 1.01], (c) Copyright 1992,00 by Actum 
Solutions";

/*
 * External functions generated by the Realizer
 */
extern void realInit(void);
extern void realMain(short);
extern unsigned char realBit[];
extern unsigned char realByte[];
extern void setByteValue(long out, short typeOut, long value);
extern long convertByteValue(long in, short typeIn);

/*
 * Variables used by ROS
 */

word adcValues[8]; /* array to store the Analog input values */
byte chnl; /* Current AD channel */
byte rlzTick; /* variable to store the last 10 msec ticks */
byte tick; /* variable to store the last 10 msec ticks */

/***************************************************************
 *
 * void digin(long out, short typeOut, char *ioPort, short typeIoPort)
 *
 * description: Operating system specific interface function
 * Interfaces with a DIGIN symbol by means of the NAME attribute
 *
 */

void digin(long out, short typeOut, char *ioPort, short typeIoPort)
{
 if (strncmp(ioPort,"P1_0",4) == 0)
 realBit[out] = P1_0;
 else if (strncmp(ioPort,"P1_1",4) == 0)
 realBit[out] = P1_1;
 else if (strncmp(ioPort,"P1_2",4) == 0)
 realBit[out] = P1_2;
 else if (strncmp(ioPort,"P1_3",4) == 0)
 realBit[out] = P1_3;
}

Средства разработки могут быть как «заточены» под конкретный микроконтроллер или их семейство, так и быть унифицированными, пригодными с небольшими дополнениями для широкого ряда устройств. Отметим успешный проект 
Arduino [80], среда разработки которого предназначена для некоей стандартной 
аппаратной платформы, предоставляющей единый типовой интерфейс. Сама 
же платформа, теоретически, может быть реализована с использованием любых 
компонентов (рис. 3).

Доступ онлайн
799 ₽
В корзину