У Boeing так много более серьезных проблем, что эта могла остаться незамеченной, но она представляет особый интерес для нас, программистов. FAA издало приказ о том, что 787 должны выключаться и включаться каждые 51 день.
Директива не дает никакого реального ключа к разгадке того, что может быть не так, но 51 день немного странный с точки зрения цифр. Быстрая сумма показывает, что в 51 полном дне 73400 секунд, что подозрительно близко к 64536 наибольшему числу, которое может представлять 16-битное int. К сожалению, моя догадка не сработала, так как 16-битный счетчик секунд срабатывает через 45 дней, поэтому рекомендация перезагрузиться через 51 день не особо поможет.
После этого урока о том, как рассчитать возможное опрокидывание, я обратился к самому сложному инструменту программирования на планете — электронной таблице! Расчет пролонгации для различных единиц времени быстро показал, что 42-битный счетчик, работающий на частоте 1 МГц, перебрасывается через 50,9 дней. 42-битная часть немного необычна, но в некоторых микросхемах есть 42-битные аппаратные счетчики, и вы можете использовать часть большего регистра.
В директиве нет подробностей, но сказано:
«FAA получило отчет, указывающий на то, что функция контроля устаревших данных CCS может быть потеряна при непрерывном включении в течение 51 дня. Это может привести к необнаруженной или необъявленной потере проверки возраста сообщения CDN в сочетании с отказом коммутатора CDN. CDN обрабатывает все критически важные для полета данные (включая скорость полета, высоту, положение и работу двигателя), и в этой ситуации может возникнуть несколько потенциально катастрофических сценариев отказа. Возможные последствия включают:
Отображение вводящих в заблуждение первичных данных об ориентации для обоих пилотов.
Отображение вводящей в заблуждение высоты на основных индикаторах полета (PFD) обоих пилотов.
Отображение вводящих в заблуждение данных о воздушной скорости на PFD обоих пилотов без сообщения об ошибке,
в сочетании с потерей предупреждения об остановке или предупреждением о превышении скорости.
Отображение вводящих в заблуждение показателей работы двигателя на обоих двигателях «.
Это звучит так, как будто метка времени на данных зашкаливает, и вместо новых данных отображаются старые данные.
Конечно, это всего лишь предположение, но я не удивлюсь, поскольку опрокидывание по-прежнему является основной причиной такого рода ошибок, и обычно перезагрузка решает проблему. Кроме того, это не первый раз, когда это происходит в программном обеспечении для полетов, и у нас есть отчет о более раннем инциденте, см. Перезагрузка Dreamliner каждые 248 дней, чтобы избежать переполнения целых чисел.
Еще больше беспокоит то, что это, безусловно, одно из самых критичных для безопасности программного обеспечения, которое мы создаем, и кажется, что мы все еще не можем избежать таких ошибок.