Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет norvog ([info]norvog)
@ 2010-02-01 03:33:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:uc, рабочее

Посылаю луч ненависти!!!
Откровенно заебал говнокод!!!


Бля!!! Проект написан на сях. Ну какого у трех четвертей функций нет аргументов?!
Не-е-е-е, мы будем входные параметры передавать глобальными переменными... И ладно бы еще значения им присваивались непосредственно перед вызовом функции. Не-е-ет. Значения им мы присвоим страницы на две выше.

Сцуко!!!! Человек может писать на любом языке - все равно напишет программу на ассемблере!!!

Это надо уметь!!! от девайса приходит ответ вида "_1380_0108_0000_0167_0590_0900_0910"
Это как-бы шестнадцатеричные байты состояния устройства. Передаваемые в формате ASCII.
Расшифровка сего лежит в специальном файлике device_defs.h
Вроде все логично.
Ладно, что сначала дефайнятся младшие биты, а потом старшие. Т.е. от 0х01 к 0х80. Хотя удобнее было бы наоборот со старших начинать.
Но в этом долбанном device_defs.h порядок байт перепутан!!! И хрен это с первого взгляда определишь!!!
Для понимания надо прочитать 80 страничную простыню на 90 Кбайт где в самом конце эта вот неебическая шифровка подготавливается к отправке.

Бля и эти очевидные имена файлов проекта! Ну это же очевидно, что в файле device.c лежат объявления функций.
А файл device_data.c содержит объявления всех переменных этого проекта!!! Не базу данных, не таблицу какую, а просто имена переменных. Всех... Ладно хоть с комментариями...
Но почему эту поебень не назвать device_variables.c - мне не понять.
И, бля, ни одной локальной переменной!!! Даже сраная буферная переменная temp_char, используемая в приеме сообщения по UART - ГЛОБАЛЬНАЯ!!!
Хотя прием этого сообщения реализован через функцию. Ну хрен ли в ней временную переменную не завести спрашивается?!

А имена?!
Бля!!! Ну почему нельзя макросы которые что-то делают называть по-английски так чтобы было понятно, что это?!
DEVICE_OFF - это что? выключить устройство или устройство выключено?!
Почему нельзя написать TURN_DEVICE_OFF и DEVICE_IS_OFF?

И нахуя использовать "goto cycle_end" вместо "break" мне не понять!!! Надежнее наверное :/
И это я чувствую только часть радостей...

Я это к чему, собственно... Наткнулся тут на потрясающий сайт про то как писать unmaintainable software... Похоже мои коллеги во всю уже руководствуются советами :))
Кому программирование близко - трэш и угар!!!
http://mindprod.com/jgloss/unmaindesign.html



(Добавить комментарий)


[info]kincajou.livejournal.com
2010-02-01 07:36 (ссылка)
Даже сраная буферная переменная temp_char, используемая в приеме сообщения по UART - ГЛОБАЛЬНАЯ!!!
Хотя прием этого сообщения реализован через функцию. Ну хрен ли в ней временную переменную не завести спрашивается?!


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

короче...

студенты писали?

(Ответить) (Ветвь дискуссии)


[info]norvog
2010-02-01 19:17 (ссылка)
Эх-х-х-х, если бы студенты... их же вразумить можно. Почитать там чего дать. Объяснить...

Преподаватель вуза... Опыт в поддержке проектов неизвестен. Как железо работает неплохо шарит. Но его код... ы-ы-ы-ы-ы.... :)))

А temp_char - это ж правила 30-32 по ссылке в посте. :))

(Ответить) (Уровень выше)


[info]zel-cam.livejournal.com
2010-02-01 11:18 (ссылка)
у меня жена на что-то подобное постоянно сама жалуется и на сотрудничков своих. видимо, это общее.
мне не понять, я сисадмин, у меня приколы свои.

(Ответить) (Ветвь дискуссии)


[info]norvog
2010-02-01 19:22 (ссылка)
Ну это как если в сетке жестко розданы ip. При том имена компов висят на стене в одной комнате при том ни в каком не алфавитном порядке, а хаотично. Айпишники к ним записаны на салфетке лежащей где-то за шкафом. А пароль и доступ к серверу с базами данных и бэкапами есть даже у уборщицы. При том каждый, что-то там на сервере "настраивает" и "делает". И уборщица тоже...

(Ответить) (Уровень выше)


[info]tristes_tigres
2010-02-01 21:25 (ссылка)
Мотивация (но не оправдание) скорее всего та, что во встроенных процессорах размер heap ограничен.

(Ответить) (Ветвь дискуссии)


[info]norvog
2010-02-01 23:24 (ссылка)
Ну, да... Оправдывался он именно нежеланием напрягать стек.

И это почти сошло, но, во-первых, в данном контроллере он глубиной в 8 уровней, а, во-вторых, ну не делай вложенных функций.
А если уж так боишься за стек - делай inline функции без вложений...
Да хоть макросы.
Лишь бы разбить код на смысловые куски и повысить его абстрактность. Чтобы в итоге получалось что-то вроде:
If( Command_Valid(Command))
{
Process_Command(Command);
Get_Status();
Form_Answer();
Send_Answer();
}

А не 400 строк кода в одном месте :))

З.Ы. Это я так... Наболело просто :)))

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tristes_tigres
2010-02-01 23:29 (ссылка)
> Ну, да... Оправдывался он именно нежеланием напрягать стек.

Ну да, я имел в виду стак, а не кучу.

> И это почти сошло, но, во-первых, в данном контроллере он глубиной в 8
> уровней, а, во-вторых, ну не делай вложенных функций.

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

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]norvog
2010-02-02 17:47 (ссылка)
Ну, можно вызывать функцию обработки вызывать по наступлению неких условий в основном цикле, а все вызываемые в ней функции - декларировать как inline (там правда могут возникнуть проблемы с переопределением локальных переменных... но решаемые).
Или просто следить на сколько забит стэк :))

(Ответить) (Уровень выше)

Забавно.
[info]kelemor.livejournal.com
2010-02-06 15:33 (ссылка)
http://norvog.livejournal.com/92250.html

Вспомнил, как мы познакомились.

(Ответить) (Ветвь дискуссии)

Re: Забавно.
[info]norvog
2010-02-06 16:38 (ссылка)
Насчет "наш метод не умеешь - научим, не хочешь - заставим" - истинно так!
Буду заставлять :))

(Ответить) (Уровень выше)