УДК 004.41
ББК 32.972.1
Р85
Р85
Руководство по микропрограммному обеспечению / под ред. Дж. Ганссла ; пер.
с англ. А. О. Семенкович. — 2-е изд., эл. — 1 файл pdf : 401 с. — Москва : ДМК Пресс,
2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". —
Текст : электронный.
ISBN 978-5-89818-424-7
Книга адресована разработчикам микрокода, пишущим те самые программы, на которых работают
технологии XXI века. Она заполняет важнейший пробел в литературе по встраиваемому
ПО. Существует настоятельная потребность в сборнике идей и концепций, справочнике, настольной
книге инженеров, куда они заглядывали бы, чтобы найти решение своих задач и освежить в
памяти забытый материал. В книге описываются инструментальные средства и методы улучшения
качества программного кода, эволюционная разработка ПО, встраиваемые конечные автоматы,
системы реального времени, обработка и управление ошибками. Примеры сопровождаются многочисленные
листингами на языках С и С++.
Издание предназначено инженерам и программистам, использующих встраиваемое ПО в своей
работе, а также будет полезно студентам вузов и всем читателям, интересующимся микропрограммным
обеспечением.
УДК 004.41
ББК 32.972.1
Электронное издание на основе печатного издания: Руководство по микропрограммному обеспечению / под
ред. Дж. Ганссла ; пер. с англ. А. О. Семенкович. — Москва : ДМК Пресс, 2016. — 408 с. — ISBN 978-5-97060173-0.
— Текст : непосредственный.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы
то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно
существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с
этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги.
В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских
прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.
ISBN 978-5-89818-424-7
© Издание, оформление, перевод,
ДМК Пресс, 2016
Стр.5
Содержание
Благодарности ...............................................................................................................14
Введение ..........................................................................................................................15
I Основы оборудования ..................................................................................16
Введение ..........................................................................................................................17
Глава 1. Основы электроники ..................................................................................19
Цепи постоянного тока .......................................................................................................19
Напряжение и сила тока .............................................................................................19
Резисторы ........................................................................................................................21
Электрические цепи .....................................................................................................24
Мощность.........................................................................................................................27
Цепи переменного тока ......................................................................................................28
Конденсаторы .................................................................................................................29
Индуктивности ..............................................................................................................34
Активные компоненты ........................................................................................................35
Собираем все элементы вместе – источник питания ...............................................39
Осциллограф ..........................................................................................................................43
Средства управления ...................................................................................................43
Зонды.................................................................................................................................46
Глава 2. Логические цепи ..........................................................................................49
Кодирование чисел ..............................................................................................................49
Двоичнодесятичное представление ......................................................................52
Комбинаторная логика .......................................................................................................52
Логический элемент НЕ .............................................................................................53
Логические элементы И и НЕИ .............................................................................53
Логические элементы ИЛИ и НЕИЛИ ...............................................................55
Исключающее ИЛИ .....................................................................................................55
Схемы ................................................................................................................................56
Устройства с тремя состояниями .............................................................................59
Последовательностная логика .........................................................................................59
Логическое резюме ...............................................................................................................64
Глава 3. Советы по разработке аппаратных средств .....................................65
Диагностика ............................................................................................................................65
Средства подключения .......................................................................................................66
Другие рекомендации .........................................................................................................67
Резюме ......................................................................................................................................69
Стр.6
6
СОДЕРЖАНИЕ
II Проектирование ..............................................................................................70
Введение ..........................................................................................................................71
Глава 4. Инструментальные средства и методы улучшения
качества программного кода ...................................................................................73
Введение ..................................................................................................................................73
Традиционный цикл последовательной разработки встраиваемой
системы ...................................................................................................................................73
Типичные проблемы современного рынка встраиваемых систем .......................74
Общие методы повышения качества кода и сокращения сроков
выхода на рынок ....................................................................................................................75
Фиксируйте спецификацию и работайте параллельно ...................................75
Создавайте контрольные отметки ...........................................................................75
Используйте доступные ресурсы ............................................................................75
Непрерывно обучайте своих сотрудников ...........................................................76
Основные факторы, влияющие на продолжительность цикла
разработки ...............................................................................................................................76
Какой этап длится дольше других? ................................................................................77
Как снизить время разработки ПО и повысить качество кода .............................77
Пишите код в соответствии с внутренним руководством
по оформлению ПО .....................................................................................................77
Выполняйте проверку кода .......................................................................................79
Выбирайте подходящие инструментальные средства разработки ..............79
Повторное использование вместо повторного изобретения ..........................82
Как сократить сроки проектирования аппаратной части системы .....................83
Используйте как можно больше готовой продукции .......................................83
Тщательно подбирайте микроконтроллер ...........................................................83
Пример микроконтроллеров, сокращающих сроки выхода
на рынок, – микроконтроллеры Philips .................................................................84
Резюме и перспективы ........................................................................................................84
Глава 5. Советы по улучшению функций ............................................................86
Минимизируйте функциональные возможности .....................................................86
Инкапсулируйте ...................................................................................................................87
Избавляйтесь от избыточности .......................................................................................88
Сокращайте код реального времени ..............................................................................88
Ход программы должен быть грациозным ..................................................................89
Беспощадно улучшайте программы ...............................................................................89
Применяйте стандарты и экспертизу ............................................................................90
Тщательно комментируйте программу .........................................................................91
Резюме ......................................................................................................................................93
Глава 6. Эволюционная разработка ......................................................................95
Введение ..................................................................................................................................95
1. История ...............................................................................................................................96
Стр.7
СОДЕРЖАНИЕ
7
2. Проблемы, решаемые методом Эво ...........................................................................97
A. Парадоксы требований ..........................................................................................97
B. Очень короткие циклы ...........................................................................................98
C. Быстрая и частая обратная связь .................................................................... 100
D. Фиксация сроков .................................................................................................. 101
E. Оценка, планирование и контроль .................................................................. 103
F. Разница между напряженной работой и выполнением заказа .............. 104
G. Обязательства ........................................................................................................ 106
H. Риски ........................................................................................................................ 107
I. Производственные совещания .......................................................................... 107
J. Волшебные слова ................................................................................................... 108
3. Как мы используем метод Эво в работе над проектом ..................................... 109
A. День Эво ................................................................................................................... 109
B. Последний день цикла ........................................................................................ 110
C. Производственное совещание .......................................................................... 111
4. Памятки ........................................................................................................................... 112
А. Критерии назначения приоритетов заданиям ............................................ 112
В. Критерии назначения приоритетных сроков завершения
промежуточных этапов ............................................................................................ 112
С. Критерии завершения задания ........................................................................ 113
5. Использование метода Эво в новых проектах .................................................... 114
6. Тестирование в методе Эво ........................................................................................ 116
7. Запросы об изменениях и отчеты о проблемах .................................................. 117
8. Инструментальные средства ..................................................................................... 117
9. Выводы .............................................................................................................................. 119
Благодарности .................................................................................................................... 121
Ссылки .................................................................................................................................. 121
Глава 7. Реализация встраиваемого конечного автомата ..........................123
Конечные автоматы .......................................................................................................... 123
Пример .................................................................................................................................. 124
Реализация ........................................................................................................................... 127
Тестирование ....................................................................................................................... 130
Запуск системы .................................................................................................................. 131
Ссылки .................................................................................................................................. 131
Глава 8. Иерархические конечные автоматы ..................................................132
Пример традиционного конечного автомата ........................................................... 133
Пример иерархического конечного автомата .......................................................... 135
Глава 9. Разработка приложений, критически важных
для обеспечения безопасности .............................................................................140
Введение ............................................................................................................................... 140
Надежность и безопасность ........................................................................................... 141
История документа DO178B ....................................................................................... 141
Обзор стандарта DO178B ............................................................................................. 142
Стр.8
8
СОДЕРЖАНИЕ
Классификация неисправных состояний ................................................................. 143
Анализ архитектуры системы ....................................................................................... 144
Разбиение на разделы ............................................................................................... 144
Несколько версий разнородного ПО .................................................................. 145
Мониторинг безопасности ...................................................................................... 145
Документация по архитектуре системы .................................................................... 146
Жизненный цикл программного обеспечения согласно стандарту
DO178B ............................................................................................................................... 146
Планирование.............................................................................................................. 146
Разработка .................................................................................................................... 147
Процесс разработки ................................................................................................... 147
Виды деятельности при разработке ПО ............................................................ 148
Верификация требований к ПО ............................................................................ 148
Верификация проектирования ПО ..................................................................... 149
Верификация программного кода ........................................................................ 149
Верификация процесса интеграции .................................................................... 149
Верификация процесса верификации ................................................................ 149
Управление конфигурацией ................................................................................... 150
Обеспечение качества ПО (SQA) ......................................................................... 151
Технология объектноориентированного программирования
и проблемы приложений, критически важных для обеспечения
безопасности ........................................................................................................................ 151
Итеративный процесс ...................................................................................................... 152
Проблемы сертификации объектноориентированных приложений ............. 152
Автоматическая генерация кода ........................................................................... 153
Автоматическая генерация тестов ....................................................................... 155
Возможность оперативного контроля ................................................................ 155
Управление конфигурацией ................................................................................... 155
Структурный охват ................................................................................................... 156
Невыполняемые/деактивированные участки программы .......................... 156
Наследование и множественное наследование ............................................... 156
Резюме ................................................................................................................................... 157
Ссылки .................................................................................................................................. 157
Глава 10. Установка и использование системы контроля версий ...........158
Введение ............................................................................................................................... 158
Мощь и элегантность простоты .................................................................................... 159
Контроль версий ................................................................................................................ 160
Типичные признаки отказа от использования (неполного
использования) системы контроля версий .............................................................. 160
Простые системы контроля версий ............................................................................. 161
Усовершенствованные системы контроля версий ................................................. 161
Для каких файлов нужно использовать контроль версий .................................. 162
Совместная работа с файлами и клиенты системы контроля версий ............. 162
Нет локального клиента, нет общей файловой системы .............................. 163
Нет локального клиента, но есть общая файловая система ........................ 163
Стр.9
СОДЕРЖАНИЕ
9
Есть локальный клиент, но нет общей файловой системы ......................... 163
Есть и локальный клиент, и общая файловая система ................................. 163
Проблемы интегрированной среды разработки ..................................................... 164
Проблемы графического интерфейса пользователя ............................................. 164
Спецификация SCC ......................................................................................................... 165
Интерфейс для веббраузера или клиентJavaсистем контроля версий ...... 165
Основные положения концепции контроля версий ...................................... 166
Советы ............................................................................................................................ 171
Отслеживание ошибок .................................................................................................... 174
Неконфигурационные средства управления ........................................................... 176
ПО для зеркального отображения информации ............................................. 176
Автоматизированное резервное копирование ................................................. 176
Веббраузер .................................................................................................................. 176
Группы новостей в Интернете ............................................................................... 177
Заключительные комментарии .................................................................................... 177
Рекомендованная литература, ссылки и ресурсы .................................................. 178
III Математика .....................................................................................................180
Введение ........................................................................................................................181
Глава 11. Введение в машинные вычисления ..................................................182
Введение ............................................................................................................................... 182
Целочисленная арифметика .......................................................................................... 182
Деление и отрицательные числа .................................................................................. 182
Целые типы и их размер .......................................................................................... 185
Переполнение или исчезновение значащих разрядов .......................................... 186
Математические операции с плавающей запятой .................................................. 189
Неожиданный результат .......................................................................................... 189
Форматы с плавающей запятой ............................................................................ 190
Погрешности округления ........................................................................................ 192
Ошибки при умножении и делении .................................................................... 194
Ошибки при сложении и вычитании .................................................................. 195
Обработка ошибок при вычислениях с плавающей запятой ...................... 197
Использование эквивалентных выражений для устранения
катастрофической потери точности .................................................................... 199
Арифметические операции с фиксированной запятой ........................................ 201
Область применимости ............................................................................................ 201
Представление чисел с фиксированной запятой и операции
над ними ........................................................................................................................ 202
Обработка ошибок при выполнении операций с фиксированной
запятой ........................................................................................................................... 203
Заключение .......................................................................................................................... 204
Библиография..................................................................................................................... 204
Стр.10
10
СОДЕРЖАНИЕ
Глава 12. Аппроксимации для вычислений с плавающей запятой .........205
Общие замечания о тригонометрических функциях ............................................ 206
Косинус и синус .......................................................................................................... 207
Более точное вычисление косинуса ............................................................................ 213
Тангенс ................................................................................................................................... 214
Более точное вычисление тангенса ............................................................................. 219
Арктангенс, арксинус и арккосинус ............................................................................ 220
Глава 13. Математические функции ...................................................................224
Код Грея ................................................................................................................................ 224
Умножение целого на константу .................................................................................. 224
Вычисление исключающего ИЛИ ............................................................................... 224
Извлечение квадратного корня в целых числах ..................................................... 225
Важнейшие математические функции ....................................................................... 225
Глава 14. Стандарт IEEE 754 для чисел с плавающей запятой .................226
Специальные значения .................................................................................................... 227
IV Системы реального времени ....................................................................229
Введение ........................................................................................................................230
Глава 15. Ядра реального времени ......................................................................231
Введение ............................................................................................................................... 231
Что такое ядро реального времени? ............................................................................ 231
Что такое задача? ............................................................................................................... 232
Тактовый интервал таймера ........................................................................................... 235
Планирование задач ......................................................................................................... 236
Переключение контекстов .............................................................................................. 238
Службы ядра ....................................................................................................................... 239
Службы ядра. Семафоры ......................................................................................... 239
Службы ядра. Очереди сообщений ...................................................................... 243
Службы ядра. Управление памятью .................................................................... 245
Нужно ли вам ядро? .................................................................................................. 245
Можете ли вы использовать ядро? ...................................................................... 246
Выбор ядра ................................................................................................................... 247
Заключение .......................................................................................................................... 250
Глава 16. Реентерабельность .................................................................................251
Атомарные переменные ................................................................................................... 251
Еще два правила ................................................................................................................. 253
Обеспечение реентерабельности кода ........................................................................ 254
Рекурсия ............................................................................................................................... 256
Стр.11
СОДЕРЖАНИЕ
11
Асинхронность оборудования/микропрограммного обеспечения .................. 257
Состояние конкуренции ................................................................................................. 258
Варианты решения проблемы ....................................................................................... 259
Другие ОС реального времени ..................................................................................... 261
Метастабильные состояния ........................................................................................... 262
Микрокод, а не оборудование ....................................................................................... 264
Глава 17. Латентность прерываний .....................................................................268
Получение данных ............................................................................................................ 271
Глава 18. Как работает ваш компилятор языка C: минимизация
размеров программы .................................................................................................274
Современные компиляторы языка C .......................................................................... 275
Структура компилятора .......................................................................................... 275
Смысл программы ..................................................................................................... 277
Базовые преобразования ......................................................................................... 277
Распределение регистров ........................................................................................ 279
Вызовы функций ........................................................................................................ 280
Подстановка функций .............................................................................................. 280
Сжатие кода низкого уровня .................................................................................. 281
Компоновщик .............................................................................................................. 281
Управление оптимизацией, осуществляемой компилятором .................... 282
Модель памяти ............................................................................................................ 283
Советы по программированию ..................................................................................... 283
Правильно подбирайте размер переменных ..................................................... 283
Используйте указатели наиболее подходящего типа .................................... 284
Структуры и байты заполнения ............................................................................ 285
Используйте прототипы функций ....................................................................... 286
Используйте параметры .......................................................................................... 287
Не используйте операцию получения адреса ................................................. 287
Не используйте встроенный ассемблер ............................................................. 288
Не пишите остроумный код ................................................................................... 288
Проверяйте значения битовых полей перед использованием ................... 290
Следите за использованием библиотечных функций ................................... 290
Используйте дополнительные подсказки компилятору .............................. 291
Финальные замечания ..................................................................................................... 291
Благодарности .................................................................................................................... 292
Глава 19. Оптимизация кода на языках C и C++ ...........................................293
Устанавливайте размеры структур равными степени двойки ........................... 293
Размещайте метки «case» как можно ближе друг к другу ................................... 293
Размещайте наиболее используемые метки case вначале ................................... 293
Разбивайте крупные операторы switch на вложенные
операторыпереключатели ............................................................................................. 294
Минимизируйте число локальных переменных .................................................... 295
Стр.12
12
СОДЕРЖАНИЕ
Описывайте локальные переменные как можно глубже внутри
функций ................................................................................................................................ 295
Сокращайте число аргументов ..................................................................................... 295
Используйте ссылки при передаче параметров и возвращаемого
значения для типов, имеющих длину более 4 байтов ........................................... 296
Не определяйте возвращаемое значение, если оно не используется............... 296
Учитывайте расположение ссылок относительно кода и данных .................... 296
Старайтесь использовать тип int вместо char или short ...................................... 297
Пишите облегченные конструкторы .......................................................................... 298
Старайтесь использовать инициализацию вместо присваивания ................... 298
Используйте списки инициализации конструкторов .......................................... 299
Не объявляйте функции виртуальными «на всякий случай» ........................... 299
Используйте подстановку для функций длиной в 1–3 строки ......................... 299
Глава 20. Макросы assert в системах реального времени .........................301
Проблемы встраиваемых систем .................................................................................. 301
Макросы assert в системах реального времени ....................................................... 303
V Ошибки и исправления ...............................................................................309
Введение ........................................................................................................................310
Глава 21. Реализация загружаемого микрокода с помощью
флеш-памяти ................................................................................................................311
Введение ............................................................................................................................... 311
Микропрограмматор ........................................................................................................ 312
Преимущества микропрограмматоров ....................................................................... 312
Недостатки микропрограмматоров ............................................................................. 313
Получение микропрограмматора ................................................................................. 313
Базовый микропрограмматор ....................................................................................... 314
Типичные проблемы и их решение ............................................................................. 316
Отладчику «не нравятся» перезаписываемые области памяти ................. 316
Отладчикам «не нравится» код, выполняющий перемещение
самого себя .................................................................................................................... 317
Невозможность генерации позиционнонезависимого кода ...................... 319
Отсутствие микрокода в момент загрузки ........................................................ 320
Постоянная блокировка по времени ................................................................... 320
Неожиданное отключение питания ..................................................................... 321
Аппаратные альтернативы.............................................................................................. 322
Разделение кода и данных .............................................................................................. 323
Гибкость и надежность..................................................................................................... 323
Глава 22. Диагностика памяти ...............................................................................325
Тестирование ПЗУ ............................................................................................................ 325
Тестирование ОЗУ ............................................................................................................ 327
Стр.13
СОДЕРЖАНИЕ
13
Глава 23. Энергонезависимая память .................................................................333
Контролирующие схемы ................................................................................................. 333
Запись многобайтных значений ................................................................................... 335
Тестирование ....................................................................................................................... 339
Выводы .................................................................................................................................. 340
Глава 24. Профилактическая отладка ................................................................341
Стеки и кучи ........................................................................................................................ 341
Заполнение памяти ........................................................................................................... 344
Блуждающий код ............................................................................................................... 346
Специальные дешифраторы .......................................................................................... 348
Блоки управления памятью ........................................................................................... 349
Выводы .................................................................................................................................. 350
Глава 25. Обработка исключительных ситуаций на C++ ...........................351
Горы (ориентиры безопасности исключительных ситуаций) ............................ 352
История этой территории ............................................................................................... 353
Коварная ловушка ............................................................................................................. 354
Смола! .................................................................................................................................... 356
Самый легкий путь ........................................................................................................... 357
Оператор присваивания – специальный случай .................................................... 359
В плохую погоду ................................................................................................................ 360
Подведем итоги .................................................................................................................. 363
Литература ........................................................................................................................... 367
Глава 26. Отличный сторожевой таймер ...........................................................368
Внутренние сторожевые таймеры ............................................................................... 371
Внешние сторожевые таймеры ..................................................................................... 374
Характеристики отличных сторожевых таймеров................................................. 375
Использование встроенного сторожевого таймера ............................................... 379
Внешний сторожевой таймер ........................................................................................ 381
Сторожевые таймеры для многозадачной среды ............................................ 383
Выводы и некоторые соображения ............................................................................. 385
Приложение A. ASCII-коды ..................................................................................388
Приложение Б. Выравнивание и порядок байтов .........................................390
Ограничения, накладываемые на выравнивание байтов ..................................... 390
Для чего нужно ограничивать выравнивание байтов? ................................. 390
Общие правила выравнивания байтов ............................................................... 392
Выравнивание структур для повышения эффективности .......................... 392
Порядок байтов .................................................................................................................. 393
Почему используется различный порядок байтов? ....................................... 393
Подпрограммы преобразования ........................................................................... 393
Указатель .......................................................................................................................395
Стр.14