взять и уебать

Oct 22, 2014 15:43

P4OUT &= ~R_B+~R_G; // сброс триггеров

Это из профессиональной железки, прошедшей сертификацию. Почему у нас падают спутники, я не удивляюсь.

Leave a comment

Comments 22

qehgt October 22 2014, 13:07:34 UTC
И что именно здесь такого страшного?

PS: здесь может быть несколько различных проблем, и даже не быть ни одной.

Reply

mbr October 22 2014, 13:11:53 UTC
Понятно, в Таганрогском радиотехническом университете тоже не учат работать с битами.

Reply

qehgt October 22 2014, 13:27:39 UTC
Ещё раз: можно написать корректный код, в котором данная строка будет иметь абсолютно defined behavior. И можно написать код, в котором данная строка будет иметь _разные_ проблемы (навскидку - неправильно разворачиваемый макрос, переопределённые операторы + и ~, неявные преобразования между signed/unsigned, неявные преобразования в int из более коротких целочисленных типов).

Поэтому спрошу ещё раз: что именно в этой строке какого WTF?

Reply

display_none October 22 2014, 13:47:17 UTC
Ну Вы же не думаете правда что тут макрос и, например, R_B разворачивается огромное выражение, или например что это С++ и оператор + переопределен?

Reply


sontar October 22 2014, 13:20:59 UTC
лол

Reply


sontar October 22 2014, 13:22:06 UTC
а что за железка и сколько стоит?

Reply

mbr October 22 2014, 13:23:17 UTC
Измерительный прибор, больше сказать не могу.

Reply


display_none October 22 2014, 13:45:00 UTC
Верно-ли я понимаю что товарищ пытается обнулить в P4OUT биты, поднятые в R_B и R_G?
Ну тоесть P4OUT & (~R_B) & (~R_G) ?

Reply

mbr October 22 2014, 13:47:12 UTC
Да.

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

Reply

display_none October 22 2014, 18:27:58 UTC
А что, прёмочных тестов там не было?)

Все же мне странно предположить что человек не понимал двоинчную арифметику до степени 'совсем'.
Как же он остальное написал?

Reply

mbr October 23 2014, 04:34:10 UTC
Там дальше был просто ад и израиль. Использовался soft float. При этом промежуточные константы были в интах, поэтому поплыли результаты. В итоге вполне годную в теории математику подгоняли мейджиками тупо по диапазону значений.

Дальше веселее - из-за soft float, вероятно, заканчивалась память. И автор перешел на ассемблер вообще без понятия о процедурах - одна точка входа и порядка 50 кб кода с метками исключительно вида "jjjj1a". Думаю, проще в бинарном коде разобраться, чем в этом высере. При этом с его талантами мне крайне сомнительно, что он смог родить код эффективнее компилятора. Зато читабельность упала до нуля.

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

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

Reply


vitamin_caig October 23 2014, 07:51:52 UTC
Отлить в бронзе табличку с теоремой Де Моргана и пиздить автора по башке до просветления:)

Reply


Leave a comment

Up