LINUX.ORG.RU
ФорумTalks

Взбесившиеся изделия Toyota Motor Corporation

 , , , ,


1

1

Недавно произошел очередной случай самопроизвольного ускорения автомобиля Lexus (бренд TMC): http://www.autoreview.ru/news/7396/133038/ До этого был громкий скандал и серия процессов, где Toyota проиграла: http://www.edn.com/design/automotive/4423428/Toyota-s-killer-firmware--Bad-de... (русское изложение: http://spb-auto.livejournal.com/27534171.html).

... специалисты в области embedded-программирования по окончанию судебного процесса получили возможность открыть данные об экспертизе «прошивки» злополучного контроллера дроссельной заслонки. И данные оказались далёкими от утешительных. Итак, группа экспертов, информацию о которых можно легко отыскать на сайте «гуру embedded программирования» (EmbeddedGurus), после анализа firmware контроллера дроссельной заслонки пришла к выводу что (даю дословный перевод) «это позорный образец проектирования и разработки ПО». В выводах – общее низкое качество кода, наличие ошибок в нём, которые могут вызывать случайный разгон автомобиля, общая система контроля и обеспечения безопасности исполнения кода организована по принципу «карточного домика», и, наконец, вердикт, к которому прислушались судьи – ошибки в firmware стали причиной аварии с тяжёлыми последствиями.

Как всё это знакомо... Собственно, вопрос: как же жить дальше с этой кривой проприетарщиной, которой с каждым годом всё больше и которая всё отвязней? Раньше были только кривые блоки АБС, мешавшие тормозить, а теперь машины уже умеют сами разгоняться и сами рулить. А за все последствия отвечает в первую очередь водитель, во вторую очередь - собственник, а уже потом, может быть, если очень постараться и много лет доказывать, - производитель этого «умного» хлама.

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от shimon

Прозвучало как «потому, что гладиолус».

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

next_time ★★★★★
()
Ответ на: комментарий от shimon

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

не знаем и знать не можем по определению: это запись за пределы микроконтроллера, о чём как бэ намекает название SYSTEMOUT

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

next_time ★★★★★
()
Ответ на: комментарий от asaw

будет неатомарной операцией

это атомарная операция по определению и вообще response - это битовая переменная, т.е. флаг, что впрочем легко можно понять из названия

next_time ★★★★★
()
Ответ на: комментарий от next_time

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

но если он всё-таки пришёл,

значит, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации, что-то пошло не так, и микроконтроллер перезагружается, производя заново операции инициализации... PSHSHHHHH (дымок пошел)

shimon ★★★★★
()
Ответ на: комментарий от next_time

response - это битовая переменная, т.е. флаг, что впрочем легко можно понять из названия

Да ну прям. Если бы такие вещи можно было из названия понять, да еще и легко, я был бы оракулом-миллиардером. Не, я простой программер, мне декларацию покажь.

Может, ты скажешь, что труЪ-программист знает, чему равно i в начале цикла, хотя в куске кода этого нет?

shimon ★★★★★
()
Ответ на: комментарий от Freiheits-Sender

Ну ну а не чего что Хенде и КИА это одно и тоже отличающие столья экстерьером и интерьером!?

У меня есть несколько знакомых фанатиков, они мне много раз рассказывали структуру всего этого овна и согласно их историям вы не правы.

Кроме того одну и ту-же деталь можно купить у разных китайцев и соответственно разного качества.

Ты лучше посмотри статистику по фольцвагену по ремонтам DSG, по замене турбин, по замене прогоревших клапанов и поршней. :)))

VW согласно статистике по Северной Америке выше Киа но ниже Хуинды в плане надёжности.

У нас это экзотика. Мне пофиг. Никогда не рассматривал VW как кандидата для покупки. BMW рассматривал хоть и недолго

grim ★★☆☆
()
Ответ на: комментарий от next_time

Именно, кроссплатформенность даже близко рядом с постановкой задачи не стояла. Тем не менее, она есть: программа отлично исполняется не только на целевом МК, но и на МК, которые в реальное производство у нас никогда не пойдут.

Ну и как такой код помешает понятности и прозрачности?


void reset_everything() {
 return;
}

#define reboot() reset_everything=0; reset_everything()

// ... lots of lines skipped

while (i--) {
  /* response can be set to nonzero by the interrupt handler  
    invoked when there is a failure zeroing out [describe 
    SYSTEMOUT space].
    In that case we can't really proceed, so we reset the system.
   */
   if (response) {
     reboot();
   }
   SYSTEMOUT[0x6000 + i] = 0; 
}

Я понимаю, инженегры любят разворачивать макры в уме и пользоваться однобуквенными идентификаторами, но они могут со своей любовью либо отрефакторить код до читаемости, либо идти в пять букв.

shimon ★★★★★
()
Ответ на: комментарий от Freiheits-Sender

Порш не такая массовая модель как БМВ, если посмотреть Ламборджини и Ферари, то по статистике они еще меньше ломаются.

Я не видел статистики по Ламборджини и Ферари соответственно не могу это обсуждать, но БМВ в хвосте у Тойты, Кадилака, Шевроле, Бьюика, Линкольна и Форда - вполне себе массовых брэндов.

grim ★★☆☆
()
Ответ на: комментарий от next_time

это атомарная операция по определению

Ну-ка покажи ка мне определение из стандарта языка C, говорящее что это атомарная операция. Я жду. Или засчитываю полный и окончательный слив.

и вообще response - это битовая переменная, т.е. флаг, что впрочем легко можно понять из названия

Что ещё за битовая переменная в языке C? В C нет ни битовых, ни булевых переменных. Зато есть возможность работать с целыми типами как с булевыми, определив для понятности пару макросов или enum. Но ты этой возможностью в своём говнокоде не воспользовался, что только ещё раз подчеркивает эту его природу.

asaw ★★★★★
() автор топика
Ответ на: комментарий от shimon

Вообще, скорее всего (учитывая, что компилятор C для микроконтроллеров часто наш любимый GCC), можно было бы определить reboot просто как

goto *0;
это только лишний раз подчеркнуло бы суть такого «ребута».

asaw ★★★★★
() автор топика
Ответ на: комментарий от asaw

определение из стандарта языка C

гражданин, стандартная Сишка здесь не действует вообще, все нормальные МК архитектуры 8051 поддерживают установку битов в битовых переменных как атомарную операцию, если не верите, можете попробовать отыскать такой МК под архитектуру 8051, где это - не атомарная операция

Что ещё за битовая переменная в языке C?

Это С51, родной. Здесь они есть. Видите, вы даже простейших вещей не знаете, а уже лезете чей-то там код проверять.

Но ты этой возможностью в своём говнокоде не воспользовался

лол, не особо-то и нужна эта возможность, если у меня есть полноценная побитовая адресация (пусть не ко всем переменным)?

и да, который раз повторяю: это не мой код

next_time ★★★★★
()
Ответ на: комментарий от asaw

учитывая, что компилятор C для микроконтроллеров часто наш любимый GCC

наш любимый GCC вообще не держит эту архитектуру

goto *0;

поэтому такое не прокатывает

next_time ★★★★★
()
Ответ на: комментарий от next_time

все нормальные МК архитектуры 8051
Это С51, родной. Здесь они есть. Видите, вы даже простейших вещей не знаете, а уже лезете чей-то там код проверять.

Я просто чуть под стол не упал от твоей школьной наивности. Мир несколько шире, чем древний как говно мамонта 8051. Слив засчитан.

asaw ★★★★★
() автор топика
Ответ на: комментарий от next_time

поэтому такое не прокатывает

Ассемблер всегда прокатывает, на нем это ровно одна команда. Учись писать программы по-человечески, короче говоря. А потом уж думай приходить понтоваться на ЛОР или не стоит.

asaw ★★★★★
() автор топика
Ответ на: комментарий от shimon

инженегры любят разворачивать макры в уме

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

reboot();

клёво, я начинаю читать такой код и первое что я вижу - это функцию, которая делает непонятно что. я конечно могу прокрутить по тексту выше, чтобы убедится, что она по выходу ничего больше не делает, но нафига? не проще написать 2 строчки явно? они же очевидны любому, кто писал когда-либо под МК

Но если уж так делать, то void reboot(){ reset_everything=0; reset_everything(); }

зачем макрос в данном случае? я уж молчу про то, что в вашем коде банальная ошибка: reset_everything определён как ф-ция, а не как указатель на ф-цию

  /* response can be set to nonzero by the interrupt handler  
    invoked when there is a failure zeroing out [describe 
    SYSTEMOUT space].
    In that case we can't really proceed, so we reset the system.
   */

а это и вовсе есть в документации, нафига повторяться? а те, кто не читает сопроводительную документацию - ССЗБ

next_time ★★★★★
()
Ответ на: комментарий от asaw

Мир несколько шире, чем древний как говно мамонта 8051

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

И да, 8051 архитектура используется очень широко до сих пор. Более того, в той области, в которой я работаю, 8051 архитектура является доминирующей, это 99,99% всех используемых МК, если брать даже по всему миру, а не только по России.

next_time ★★★★★
()
Ответ на: комментарий от next_time

Дизассемблируй - увидишь какая разница количественно. Про качество тебе уже написали.

asaw ★★★★★
() автор топика
Ответ на: комментарий от next_time

На самой первой моей работе микроконтроллеры этой архитектуры использовались в теплосчетчиках. И прошивку пришлось писать на ассемблере, чтобы уместить в куцей памяти библиотеку для работы с числами с плавающей точкой вместе со всей остальной необходимой логикой. Так вот любой кусок той прошивки был в сто раз понятнее твоего говнокода на C, ибо был хорошо прокомментирован и не заставлял читающего рашать «и так понятные» ребусы.

asaw ★★★★★
() автор топика
Ответ на: комментарий от asaw

Дизассемблируй - увидишь какая разница количественно.

и что я должен увидеть? портянку из ассемблерных комманд? если и так, то мне как-то чхать: это же всё равно перезапуск

Про качество тебе уже написали.

например?

next_time ★★★★★
()
Ответ на: комментарий от asaw

твоего говнокода на C,

это не мой код

был в сто раз понятнее твоего

понятнее кому? ещё раз повторяю, мне этот код был понятен с первого раза, когда я только его увидел

микроконтроллеры этой архитектуры использовались в теплосчетчиках

и вы не знаете про существование битовых переменных? к

теплосчетчиках

а, ну так у вас примитивизм, в общем-то был.

ибо был хорошо прокомментирован

а этот код - документирован,и поверьте, читать документацию намного проще, чем выискивать ваши комменты по всему коду, из которых 90% объясняет в 100500 раз как сложить 2+2

знаю я таких, видел их код: 2+2 прокомментируют, а действительно дельные и неочевидные вещи - нет, и разбирайся потом после них

И прошивку пришлось писать на ассемблере

ну и наконец, сразу бы признались, что сишку тупо не осилили, и не морочили мне голову

next_time ★★★★★
()
Ответ на: комментарий от next_time

и вы не знаете про существование битовых переменных? к

В C нет никаких битовых переменных, а мир не крутится вокруг 8051, заруби это себе на носу.

ну и наконец, сразу бы признались, что сишку тупо не осилили, и не морочили мне голову

ты слишком толсто троллишь, школоло.

asaw ★★★★★
() автор топика
Ответ на: комментарий от asaw

а мир не крутится вокруг 8051, заруби это себе на носу.

а мне насрать на это, зарубите наконец себе на носу

В C нет никаких битовых переменных

в С51 они есть

ты слишком толсто троллишь, школоло.

нетЪ, констатирую факт

next_time ★★★★★
()
Ответ на: комментарий от grim

Вы мне про америку, а я в европе, тут что Хенде что КИА одинаково сравните например i30 и Ceed, причем половина запчастей Bosch, Sachs, ZF, остальная Denso, Aisin кроме тех комплектующих которые они производят сами.

Freiheits-Sender ★★
()
Ответ на: комментарий от grim

Кадилака, Шевроле, Бьюика, Линкольна и Форда

Кадилак - тут экзотика.

Шевроле - под этой маркой тут перелицованые корейские Деу на узлах от старых опелей, со всеми вытекающими.

Бьюика, Линкольна - еще большая экзотика.

Форд - немецкие версии форда со сборкой во всеволжске, отсюда много отличий.

БМВ - предлагаю поспорить с российскими фанатами марки.

КИА - большинство моделей отличается например Сerato (в америке это Forte) или Спортридж, остальные не имеют аналогов в америке, например Ceed (второе поколение не имеет 2.0 л двигателей что на российских просторах большой минус).

Хенде - тоже самое что и КИА.

Freiheits-Sender ★★
()
Ответ на: комментарий от grim

Да и мне кажется в америке двигатели 1.6 популярностью не пользуются, в России это достаточный середнячок.

Freiheits-Sender ★★
()
Ответ на: комментарий от grim

А меня статистика не интерисует, это статистика средняя температура по больнице, я на производстве был 9 лет конструктором и 3 года технологом, есть опыт эксплуатации машин мной и моими друзьями и знакомыми, на основании этого и сужу. Таже тойота не та что была раньше качество существенно упало, у отца Toyta Carina E знаю что говорю, у самого сейчас KIA Ceed по надежности он примерно как Toyta Corolla в 120м кузове.

Freiheits-Sender ★★
()
Ответ на: комментарий от Freiheits-Sender

А меня статистика не интерисует, это статистика средняя температура по больнице, я на производстве был 9 лет конструктором и 3 года технологом, есть опыт эксплуатации машин мной и моими друзьями и знакомыми, на основании этого и сужу.

Ага.

Т.е. если Киа в 2 раза чаще ломалась по статистике чем Хуиндай, а ваши друзья свистят что необорот, то вы им поверите.

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

Что интересно, покупатели Хуинд почему-то становятся просто очень агрессивными когда начнаешь задавать вопросы о качестве и удобстве.

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

Кстати, вы случайно не владелец Киа/Хуинды? А то что-то очень уж воинственно относитесь к обсуждению.

Симптомы очень заметны.

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 2)
Ответ на: комментарий от grim

Вот объясни мне например как может Хенде ай30 ломаться в два раза меньше чем Киа Сид если 90% деталей взаимозаменяемы, а оставшиеся 10% это кузовщина и обшивка внутреннего убранства которой они различаются?

Freiheits-Sender ★★
()
Ответ на: комментарий от grim

Кстати, вы случайно не владелец Киа/Хуинды? А то что-то очень уж воинственно относитесь к обсуждению.

Симптомы очень заметны.

Ты мало того что упертый так еще и крайне невнимателен, постов выше написано какая у меня машина.

Что интересно, покупатели Хуинд почему-то становятся просто очень агрессивными когда начнаешь задавать вопросы о качестве и удобстве.

Ну если вопрос начинается в стиле «Хенде говно, как вы на этом ездите?» ничего удивительного. Нормальная машина за свои деньги, с приемлемой стоимостью обслуживания, расходников и ремонта. Был бы у меня доход выше, я бы смотрел другую модель или марку.

Freiheits-Sender ★★
()
Ответ на: комментарий от Freiheits-Sender

Вот объясни мне например как может Хенде ай30 ломаться в два раза меньше чем Киа Сид если 90% деталей взаимозаменяемы

У Южной Кореи и Китая буспошлинная торговля, соответственно все идёт из Китя, но можно заказать у разных поставщиков.

Я это вам пишу уже второй раз, не понятно почему до вас не доходит.

grim ★★☆☆
()
Ответ на: комментарий от Freiheits-Sender

Ну если вопрос начинается в стиле «Хенде говно, как вы на этом ездите?» ничего удивительного.

Я ничего не имею против этих брэндов.
АБСОЛЮТНО!

Вы на меня нападаете совершенно зря.

Все-же видимо это какая-то зависимость между агрессивностью и владением Киа или Хуиндаи.

Интересно, чем это вызвано.
Предполагаю, что комплексом неполноценности вызванным владением авто вышеперечисленных марок.

grim ★★☆☆
()
Ответ на: комментарий от grim

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

Freiheits-Sender ★★
()
Ответ на: комментарий от grim

Самое смешное что у меня запчасти немецкие или японские стоят, машина спроектирована немцами выпускается на заводе в чехословакии а вы мне пытаетесь втирать про китай. Вас двигатели бмв, фольца и мерса собираемые вкитае для половины мира не волнуют? А двигатели и коробки форд собираемые в юар?? :))))

Freiheits-Sender ★★
()
Ответ на: комментарий от Freiheits-Sender

Вас двигатели бмв, фольца и мерса собираемые вкитае для половины мира не волнуют?

Нет.
А почему они должны меня волновать?

вы у меня ищите комплексы которых нет.

А чем тогда объяснить такую атаку?
Я вам ещё раз говорю - я совершенно равнодушен к Киа/Хуиндай

Но вы продолжаете писать по нескольку ответов на каждоё моё сообщение.

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

grim ★★☆☆
()
Ответ на: комментарий от grim

Вы сами считаете эти марки неполноценными

Не считаю.

ущербность купленной вами машины

А почему вы считаете ее ущербной?? Кстати это не вяжется с вашим высказывание что вам индифферентны эти марки.

Freiheits-Sender ★★
()
Последнее исправление: Freiheits-Sender (всего исправлений: 1)
Ответ на: комментарий от Freiheits-Sender

А почему вы считаете ее ущербной??

Я так не считаю.
Машина как машина. Ничего плохого сказать не могу.

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

grim ★★☆☆
()
Ответ на: комментарий от Freiheits-Sender

Вам нужно определение слова агресивность?
Или что?

Я не понял вашего вопроса и постарался уточнить.

grim ★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.