MBR (mbr) wrote in code_wtf,
MBR
mbr
code_wtf

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

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

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

    Error

    Comments allowed for members only

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 22 comments
И что именно здесь такого страшного?

PS: здесь может быть несколько различных проблем, и даже не быть ни одной.
Понятно, в Таганрогском радиотехническом университете тоже не учат работать с битами.
Ещё раз: можно написать корректный код, в котором данная строка будет иметь абсолютно defined behavior. И можно написать код, в котором данная строка будет иметь _разные_ проблемы (навскидку - неправильно разворачиваемый макрос, переопределённые операторы + и ~, неявные преобразования между signed/unsigned, неявные преобразования в int из более коротких целочисленных типов).

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

Да, я тожэ могу придумать вариант, в котором это -- правильное и при том самое короткое решэние.

sontar

October 22 2014, 13:20:59 UTC 2 years ago Edited:  October 22 2014, 13:21:34 UTC

лол
а что за железка и сколько стоит?
Измерительный прибор, больше сказать не могу.
Верно-ли я понимаю что товарищ пытается обнулить в P4OUT биты, поднятые в R_B и R_G?
Ну тоесть P4OUT & (~R_B) & (~R_G) ?
Да.

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

Все же мне странно предположить что человек не понимал двоинчную арифметику до степени 'совсем'.
Как же он остальное написал?
Там дальше был просто ад и израиль. Использовался soft float. При этом промежуточные константы были в интах, поэтому поплыли результаты. В итоге вполне годную в теории математику подгоняли мейджиками тупо по диапазону значений.

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

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

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

aterentiev

October 22 2014, 14:57:26 UTC 2 years ago Edited:  October 22 2014, 15:01:51 UTC

a может, товарищ пытается обнулить в P4OUT все биты, кроме обнуленных в R_B и R_G? при значениях (констант? макросов?) R_B и R_G с одним единственным сброшенным битом (остальные установлены) код предсказуем на 100% при условии, что R_B и R_G не равны друг другу
т.е. хранит битовые маски в инвертированном виде? это тоже wtf
угу, отрицательная логика
у автора кода может быть своя логика - например, R_G означает "reverse G". Вот так вот ему показалось удобным.
версия, что автор кода предпочитает экзотические методы программирования и успешно ими пользуется, не подтверждается фактами
Ну, да - по крупицам собирать надо, что же хочет поведать нам топик-стартер.
Может быть в 99% случаев он пишет в другой порт, а там железка напротив ждет ноля в бите, соответствующем триггеру.

А мысли про define были отвергнуты с ремаркой "да ну, ради одного случая".

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

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

ximaera

October 22 2014, 20:59:55 UTC 2 years ago Edited:  October 22 2014, 21:00:23 UTC

Это в любом случае WTF, потому что выглядит как WTF. Даже в описанном вами случае -- что мешало побитовое "или" использовать, чтобы у следующего программиста инфаркта не было?
Отлить в бронзе табличку с теоремой Де Моргана и пиздить автора по башке до просветления:)