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

Руководство по микропрограммному обеспечению

Покупка
Артикул: 651165.02.99
К покупке доступен более свежий выпуск Перейти
Книга адресована разработчикам микрокода, пишущим те самые программы, на которых работают технологии XXI века. Она заполняет важнейший пробел в литературе по встраиваемому ПО. Существует настоятельная потребность в сборнике идей и концепций, справочнике, настольной книге инженеров, куда они заглядывали бы, чтобы найти решение своих задач и освежить в памяти забытый материал. В книге описываются инструментальные средства и методы улучшения качества программного кода, эволюционная разработка ПО, встраиваемые конечные автоматы, системы реального времени, обработка и управление ошибками. Примеры сопровождаются многочисленные листингами на языках С и С++. Издание предназначено инженерам и программистам, использующих встраиваемое ПО в своей работе, а также будет полезно студентам вузов и всем читателям, интересующимся микропрограммным обеспечением
Руководство по микропрограммному обеспечению / под ред. Дж. Ганссла ; пер. с англ. А. О. Семенкович. - Москва : ДМК Пресс, 2016. - 400 с. - ISBN 978-5-97060-173-0. - Текст : электронный. - URL: https://znanium.com/catalog/product/1032262 (дата обращения: 20.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Руководство по микропрограммному обеспечению

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

Книга адресована разработчикам микрокода, пишущим те самые программы, на 
которых работают технологии XXI века. Она заполняет важнейший пробел в литературе 
по встраиваемому программному обеспечению. Существует настоятельная потребность 
в сборнике идей и концепций, справочнике, настольной книге инженеров, куда они 
заглядывали бы, чтобы найти решение своих задач и освежить в памяти забытый 
материал. Главной темой этой книги является микрокод, однако суровая реальность 
мира встраиваемого ПО такова, что код и аппаратура взаимозависимы. Они не могут 
существовать в изоляции; ни в одной другой области программирования нет такой 
глубокой связи между реальным и виртуальным.

Аналоговые инженеры постоянно твердят, что у них прекрасная профессия. Конечно, 
очень здорово ворочать операционными усилителями. Но бедняги не ведают, как 
это увлекательно – сделать так, чтобы все двигалось, огоньки мигали, газ тек. Это мы, 
разработчики встраиваемого ПО, управляем работой моторов, перекачиваем кровь, 
приводим в действие автомобильные тормоза, и выдвигаем компакт-диски из дисководов. 
Что может сравниться по притягательности с этой размытой границей между микрокодом 
и реальным миром?

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

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

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

На сайте издательства www.dmkpress.com выложены исходные коды 
всех примеров программ из книги.

Руководство 
по микропрограммному
обеспечению

Джек Ганссл

9 785970 601730

ISBN 978-5-97060-173-0

Руководство  
по микропрограммному обеспечению

Под редакцией  
Джека Ганссла

The Filmware Handbook

Edited by
Jack Ganssle

AMSTERDAM • BOSTON • HEIDELBERG • LONDON • NEW YORK • OXFORD • PARIS
SAN DIEGO • SAN FRANCISCO • SINGAPORE • SYDNEY • TOKYO
Newnes is an imprint of Elsevier

Руководство  
по микропрограммному 
обеспечению

Под редакцией  
Джека Ганссла

Москва, 2016

УДК 004.41
ББК 32.972.1
 
Г19

Г19 
Руководство по микропрограммному обеспечению / под ред. Дж. Ганссла;
пер. с англ. А. О. Семенкович. – М.: ДМК Пресс, 2016. – 400 с.
ISBN 978-5-97060-173-0

Книга адресована разработчикам микрокода, пишущим те самые программы, на

которых работают технологии XXI века.

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

В книге описываются инструментальные средства и методы улучшения качества

программного кода, эволюционная разработка ПО, встраиваемые конечные автоматы, системы реального времени, обработка и управление ошибками. Примеры
сопровождаются многочисленные листингами на языках С и С++.

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

 
 
 
УДК  
004.41

 
 
 
ББК
32.972.1

This edition of The Firmware Handbook by Jack Ganssle is published by arrangement with

Elsevier INC of 200 Wheeler Road, 6th Floor, Burlington, MA01803, USA.

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

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

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

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

ISBN 0­7506­7606­X (анг.)
Copyright © Elsevier Inc.

ISBN 978­5­97060­173­0 (рус.)
© Издание, оформление, перевод, ДМК Пресс, 2016

Содержание

Благодарности ...............................................................................................................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
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

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
История документа DO­178B ....................................................................................... 141
Обзор стандарта DO­178B ............................................................................................. 142

СОДЕРЖАНИЕ
8

Классификация неисправных состояний ................................................................. 143
Анализ архитектуры системы ....................................................................................... 144
Разбиение на разделы ............................................................................................... 144
Несколько версий разнородного ПО .................................................................. 145
Мониторинг безопасности ...................................................................................... 145
Документация по архитектуре системы .................................................................... 146
Жизненный цикл программного обеспечения согласно стандарту  
DO­178B ............................................................................................................................... 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

Есть локальный клиент, но нет общей файловой системы ......................... 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

Глава 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

Асинхронность оборудования/микропрограммного обеспечения .................. 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

Описывайте локальные переменные как можно глубже внутри  
функций ................................................................................................................................ 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

Глава 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

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

Я хотел бы поблагодарить всех авторов, чьи материалы вошли в состав данной
книги. Это был огромный труд, но наконец­то все готово!

Также спасибо Кэрол Льюис, редактору издательства Newnes по новым проектам, и ее мужу Джеку, которые терроризировали меня целый год, пока я не пришел к такой концепции книги, которая, как мне кажется, должна быть понятна
и читателям, и авторам. Кэрол положила начало моей авторской карьере более
десяти лет назад, подвигнув меня на написание книги «The Art of Programming 
Embedded Systems» («Искусство программирования встраиваемых систем»). Спасибо ей за участие на протяжении всех этих лет.

И особая благодарность – моей жене Мэрибет за помощь и поддержку, а также

за колоссальный объем работы по форматированию материалов и административному руководству проектом.

– Джек Ганссл,

пристань Анкоридж,

г. Балтимор, штат Мэриленд

Введение

Вот оно – «Руководство по микропрограммному обеспечению»! Эта книга заполняет важнейший пробел в литературе по встраиваемому ПО. Существует настоятельная потребность в сборнике идей и концепций, справочнике, настольной 
книге инженеров, куда они заглядывали бы, чтобы найти решение своих задач 
и освежить в памяти забытый материал. Главной темой этой книги является 
микрокод, однако суровая реальность мира встраиваемого ПО такова, что код 
и аппаратура взаимозависимы. Они не могут существовать в изоляции; ни в одной другой области программирования нет такой глубокой связи между реальным и виртуальным.
Аналоговые инженеры постоянно твердят, что у них прекрасная профессия. 
Конечно, очень здорово ворочать операционными усилителями. Но бедняги не 
ведают, как это увлекательно – сделать так, чтобы все двигалось, огоньки мигали, 
газ тек. Это мы, разработчики встраиваемого ПО, управляем работой моторов, 
перекачиваем кровь, приводим в действие автомобильные тормоза, контролируем развертку телевизионного изображения по горизонтали и по вертикали 
и выдвигаем компакт­диски из дисководов. Что может сравниться по притягательности с этой размытой границей между микрокодом и реальным миром?
Книга адресована разработчикам микрокода, пишущим те самые программы, 
на которых работают технологии XXI века. Эта книга создавалась не как учебник или вводный курс по написанию микрокода. Существует множество других 
пособий, цель которых – научить людей азам разработки встраиваемых систем. 
Не является она и введением в основы программирования. Каждый разработчик 
должен знать, что такое конструктивная стоимостная модель (COCOMO) Бёма, используемая для оценки затрат на разработку ПО; методы экстремального 
программирования; подходы Фагена и Гильба к инспектированию программного 
обеспечения; персональный метод разработки по Хамфри; модель оценки зрелости процессов разработки и сопровождения программного обеспечения, созданная в институте Software Engineering Institute, и ряд других хорошо известных 
и постоянно развивающихся методов. Тщательное программирование – ключевая составляющая успеха при создании любой большой системы, и мир встраиваемого ПО в этом не оригинален.
В данном руководстве очень мало информации по операционным системам 
реального времени, TCP/IP, цифровым сигнальным процессорам и другим подобным темам. Эти актуальные вопросы крайне важны для огромного множества 
встраиваемых приложений. Однако для освещения каждого из таких вопросов 
требуется отдельное издание – и таких книг уже очень и очень много.

РАЗДЕЛ 
СТРАНИЦА
I Основы оборудования

II
Проектирование
72
III
Математика
183
IV
Системы реального времени
232
V
Ошибки и исправления
312

21 
Глава 1. Основы электроники

51 
Глава 2. Логические цепи

67 
Глава 3. Советы по разработке аппаратных средств

Введение

Первые электронные вычислительные машины были аналоговыми, в действительности они представляли собой совокупность операционных усилителей 
и ничего более. Того, что мы сейчас называем «программами», вообще не существовало, вместо них разработчики алгоритмов использовали массивы электронных компонентов, помещавшихся в петли обратной связи таких усилителей. 
Программирование сводилось в буквальном смысле к переключению проводов 
в машине. Только инженеры, хорошо разбиравшиеся в электротехнике, могли 
управляться с подобными монстрами.
С появлением в 1940­х гг. цифровых компьютеров, способных записывать информацию, программы превратились из электрических схем в биты, хранящиеся 
на различных носителях... хотя это было совершенно не похоже на то, что мы 
имеем сегодня! Менее очевидным преимуществом стало абстрагирование программиста от машины. Цифровая сущность вычислительных машин преодолела 
ограничения электрических параметров – больше не существовало ничего, кроме 
нуля и единицы. Возможности машинных вычислений открылись для огромной группы людей, гораздо более широкой, чем специалисты по электротехнике. 
Программирование стало самостоятельной дисциплиной со своими профессиональными приемами, ни один из которых не требовал даже самых элементарных 
знаний электроники и схемотехники.
Единственное исключение – встраиваемые системы. Изобретение микропроцессора корпорацией Intel (1971 г.) вернуло компьютеры назад – к самым истокам. Вычислительные машины сразу стали достаточно доступными по цене 
и небольшими по размерам, чтобы их можно было встраивать в какую­либо продукцию. Несмотря на низкую стоимость процессора, снижение общей стоимости 
систем снова оказалось проблемой для проектировщиков и программистов новой 
интеллектуальной продукции. 
Это последний рубеж вычислительной техники, на котором оборудование 
и микропрограммное обеспечение (микрокод, firmware) не отделимы друг от 
друга. Зачастую можно понизить стоимость системы, используя компоненты 
с более интеллектуальной программой, или повысить производительность, применив другой способ крепления. Наши микропрограммы тесно связаны с особенностями периферийного оборудования и датчиков, а также cо множеством 
явлений реального мира. Хотя и существует тенденция приглашать на работу 
«чистых» программистов, самыми лучшими разработчиками всегда оказываются 
те, кто имеет не только богатый опыт в разработке программного обеспечения, 
но и практические навыки в области электроники.
Каждый разработчик встраиваемого ПО должен – нет, просто обязан! – знать 
содержание этой главы. Вы не имеете права заявить: «Ну, поскольку я программист­разработчик микропрограммного обеспечения, мне не нужно знать, что 
такое резистор». Ваша задача как разработчика встраиваемого ПО – создание 
системы, которая будет больше, чем просто программным кодом.
Более глубокие сведения по всем аспектам электроники содержатся в замечательной книге «The Art of Electronics» (русский перевод: Хоровиц П., Хилл У. 
Искусство схемотехники: в 2 т. М.: Мир, 1986).
Джек Ганссл – автор ежемесячной колонки «Breakpoints» в разделе «Embedded 
Systems Programming» электронного еженедельника «Embedded Pulse», выходяВВЕДЕНИЕ
18

щего на веб­сайте embedded.com; он написал четыре книги по встраиваемым системам и одну о своем неудачном опыте мореплавателя. Он начал заниматься 
встраиваемыми системами в начале 70­х гг. еще на процессоре 8008. С тех пор 
успел основать и продать три электронные компании, в том числе одно из крупнейших предприятий по созданию инструментальных средств для разработки 
встраиваемого ПО. Как программист и руководитель Джек принимал участие 
в работах по созданию более 100 встраиваемых продуктов: от глубоководного навигационного оборудования до системы безопасности Белого дома. В настоя щее 
время он ведет семинары, посвященные наилучшим способам создания встраиваемых систем, для компаний по всему миру.

Глава 1. ОСНОВЫ ЭЛЕКТРОНИКИ

Джек Ганссл

Цепи постоянного тока

Постоянный ток (DC) – замечательный термин, обозначающий сигналы, не 
изменяющиеся со временем. Здесь отсутствуют пики, как на электроэнцефалограмме мертвого мозга или на выходе аккумуляторной батареи. Источник питания вашего ПК получает постоянный ток из переменного тока (AC) обычной 
электросети.

Рис. 1.1. Постоянный ток характеризуется сигналом постоянной,  
неменяющейся амплитуды

Напряжение и сила тока

Для характеристики электрического тока обычно пользуются напряжением и силой тока, не задумываясь, что за обеими величинами стоят фундаментальные 
закономерности физики. Атомы, имеющие недостаток или избыток электронов, 
называются ионами. Ионы могут иметь как положительный, так и отрицательный 
заряд. Два иона с противоположным зарядом (один положительный, что означает 
нехватку у него электронов, а другой отрицательный, обладающий одним или 
более дополнительным электроном) притягивают друг друга. Сила такого притяжения называется электродвижущей силой и обычно обозначается как ЭДС1. 
Заряды измеряются в кулонах (Кл), 1 кулон равен заряду 6,25×1018 электронов (для отрицательных зарядов) или протонов (для положительных).
Ампер (А) – это заряд в 1 Кл, протекающий через данную точку за одну 
секунду. Напряжение 1 В – это разность потенциалов, благодаря которой проводник с текущим по нему током в 1 ампер совершит работу в 1 джоуль. Джоуль 
в секунду называется ваттом. 

1 
Вообще говоря, сила взаимодействия точечных зарядов называется кулоновской, а под 
термином ЭДС понимается физическая величина, равная отношению работы сторонних сил по перемещению заряда вдоль замкнутого контура к величине этого заряда. – 
Прим. пер.

К покупке доступен более свежий выпуск Перейти