Студент сдает экзамен по электротехнике. Отвечает прекрасно, поражает преподавателя своими знаниями, тот ставит ему "отлично", а потом спрашивает:
- Слушайте, неужели вы действительно все так блестяще понимаете?
- Да не все, - мнётся студент. - Есть у меня один неясный вопрос. Ведь переменный ток - он вот такой. (Студент чертит рукой в воздухе синусоиду) Так как же он по прямым проводам проходит?
Если вы, так же как студент в анекдоте, плохо представляете себе как на практике работает программа в микроконтроллере, то сбои в работе устройств это только вопрос времени...
В 1996 году при запуске ракеты-носителя Ariane 5, которая должна была вывести на орбиту несколько спутников, на 39 секунде полета произошел взрыв.
Причиной аварии стала программная ошибка связанная с преобразованием 64-битного значения с плавающей точкой в 16 битное целое значение со знаком.
Ошибка возникла, когда горизонтальное ускорение ракеты превысило допустимое значение. Программа попыталась напрямую записать 64-разрядное число в 16-разрядное пространство. Возникло переполнение, в результате которого отказал и основной, и резервный компьютер. Это привело к выдаче ложной команды на отклонение сопел ускорителей, а позже и основного двигателя. В результате на 39-й секунде полета ракета стала разрушаться под действием аэродинамических сил и самоуничтожилась.
В общей сложности, ущерб от аварии составил 8,5 миллиардов долларов.
С 1985 по 1987 год погибли 3 пациента и еще 3 остались инвалидами после процедуры с использованием медицинского аппарата лучевой терапии "Therac-25". Как выяснилось позже, произошло это из за неграмотно написанной программы, которая содержала сразу несколько серьезных ошибок и целый ряд некорректно составленных фрагментов кода.
Во время операции "Буря в пустыне", ракеты “Пэтриот”, использовавшиеся для перехвата в воздухе иракских ракет, периодически проходили мимо цели.
Одна из пропущенных иракских ракет привела к гибели 28 американских солдат.
При разбирательстве выяснилось, что в программе был некорректно прописан алгоритм подсчета времени. За 100 часов работы ошибка в определении времени составляла 0,34 секунды. Этого оказалось достаточно что бы зенитно-ракетный комплекс переставал выполнять защитные функции по уничтожению вражеских ракет.
15 января 1990 года произошло самое масштабное падение телефонной сети компании AT&T.
В новой версии программы междугородних коммутаторов была допущена ошибка, которая приводила к тому, что коммутатор перезагружался, если получал специальный сигнал от соседнего коммутатора. Но проблема состояла в том, что этот сигнал генерировался в тот момент, когда коммутатор восстанавливал свою работу после сбоя.
15 января 1990, когда один из коммутатор в Нью-Йорке перезагрузился, он подал тот самый специфичный сигнал, который запустил "цепную реакцию" перезагрузок. Совсем скоро 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры устанавливали на коммутаторы предыдущую версию прошивки.
Курс дает возможность сразу же начать писать простые программы. Уже через пару уроков вы сможете начать более уверенно писать программы на языке С с использованием интересных возможностей о которых вы раньше, возможно, и не подозревали.
Правда в том, что хороших книг по программированию микроконтроллеров на языке С вообще нет!
Точнее есть, но исключительно на английском языке, которые можно заказать с Amazon'a по средней цене 150..200$. Это около (8000..11000 рублей)
Из всех известных мне книг на русском ни одна книга в полной мере не раскрывает основы языка С применительно к программированию микроконтроллеров.
Вот книги, которые позволят вам изучить язык Си на достаточно глубоком уровне
Но, к сожалению, изучить язык Си для программирования микроконтроллеров или Arduino по этим книгам вам вряд ли удастся, так как в книгах рассматривается программирование исключительно под ПК с операционной системой.
Про такое важное и привычное понятие как прерывания, в этих книгах вы не найдете ни слова!
Почти нигде не учат грамотному использованию языка Си для микроконтроллеров
Как обычно построено обучение?
Обычно все начинается с примеров настройки портов. Потом, изучается периферия микрокнтроллера: UART, АЦП, SPI, специальные режимы и т.д. Попутно изучаются только самые базовые и простые конструкции языка, которые позволяют показать примеры рабочего кода.
Однако, почти везде можно выделить три похожих ситуации:
В чем состоит преимущество этого курса?
Кому подойдёт курс
"Программирование микроконтроллеров на языке С"?
Подойдет, если у вас есть начальные навыки в программировании микроконтроллеров на любом языке.
Не подойдет, если вы плохо разбираетесь в электронике или совсем не понимаете что такое микроконтроллер.
Подойдет, вы у вас есть желание учится.
Не подойдет, если вам интересно исключительно поверхностное понимание работы программ на языке С.
Подойдет, вы ранее программировали микроконтроллеры на языке С, но хотели бы глубже изучить язык и создавать более надежные и компактные программы.
Не подойдет, если вы не готовы серьезно заниматься.
Будет ли курс Вам полезен?
Другими словами, узнаете ли Вы что-то новое из курса?
Для этого Вы можете пройти небольшой тест, ответив на 4 вопроса ниже:
1. Если a32 это 32-разрядная беззнаковая переменная, то какое число будет в переменной после выполнения 4 строк ниже?
*( ((uint8_t *)&a32) + 0 ) = 0x66;
*( ((uint8_t *)&a32) + 1 ) = 0x77;
*( ((uint8_t *)&a32) + 2 ) = 0x88;
*( ((uint8_t *)&a32) + 3 ) = 0x99;
2. Для чего используется выражение ниже?
while(*string) outUart(*string++);
3.Что не так с проверкой условия?
if(a*a*a>b/10 && b==0){
...
}
4.Что произойдет после выполнения этих двух строк?
action = ( void(*)(void) )0x3C00;
action();
Если Вы не только правильно ответили на все вопросы, но и хорошо понимаете смысл этих выражений, то, скорее всего, курс никаких новых знаний Вам не даст.
Ответы на частые вопросы
Не нашли ответ на свой вопрос?
Отправьте свой вопрос по e-mail внизу страницы. Или задайте через форму обратной связи на правой стороне страницы.