Няшная / Говнокод #27302 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
if (LD3_state == 0 || LD2_state == 0 || LD1_state == 0)
{
    GPIO_SetBits(GPIOB, LED1); //RED ON
    LD_Status = NO_LOCK;
}
else
{
    LD_Status = LOCK_OK;
}

if (LD4_state == 0 && LD_Status == LOCK_OK)
{
    GPIO_SetBits(GPIOB, LED1); //RED ON
}
else
{
    GPIO_ResetBits(GPIOB, LED1); //RED OF
}

if (LD4_state == 0 && LD_Status == LOCK_OK)
{
    GPIO_ResetBits(GPIOB, LED1); //RED OFF
}

/* Ну можно же было сделать по-человечески, а? */
/* Эквивалентный код: */

LD_Status = LD1_state && LD2_state && LD3_state && LD4_state;
if (LD_Status)
{
    GPIO_ResetBits(GPIOB, LED1); //RED OFF
}
else
{
    GPIO_SetBits(GPIOB, LED1); //RED ON
}

Как же я ненавижу чье-то легаси...

Запостил: viteo viteo, (Updated )

Комментарии (33) RSS

  • Ого, ты там с 29-го декабря трудишься над легаси.

    Как вообще можно было написать такой код, который сверху? Вроде не на «PHP» проект, очевидные вещи-то можно красиво написать...
    Ответить
        • Кажется, что железо это вообще такая хрень, где может быть вообще любой код.

          i = 42;
          sleep(12);
          i = 32;
          Ответить
          • Патч Бармина для stm32f1:
            *(uint32_t*)0x40022004 = 0x45670123;
            *(uint32_t*)0x40022004 = 0xCDEF89AB;
            *(uint32_t*)0x40022010 = 0x00000044;
            Ответить
            • если бы я знал, что находится по адресу 0x40022004 , то оценил бы шутку
              Ответить
              • 0x40022004 == FLASH_KEYR

                Туда надо записать джва меджика чтобы снять блокировку FLASH_CR.

                0x40022010 == FLASH_CR

                Регистр управления флешкой.

                0x00000044 == MER | STRT

                Mass-erase, start.
                Ответить
                • Переведи на писи

                  На ум приходит low level format, который последние 28 лет работает не очень, и затирание флешки с прошивкой материнки, но там проприетарный API небось, цифр мы не знаем
                  Ответить
                  • Ну полное стирание флешки и есть. Примерно как тримнуть весь диск на ПК.
                    Ответить
                  • > затирание флешки с прошивкой материнки

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

                    Ну если перемычки не распаял -- то программатор.
                    Ответить
                    • у хорошей материнки обычно два флеша, их можно перемычкой выбирать, если обновился неудачно
                      Ответить
                      • Да тут тоже так можно. Вешаешь write-protect на часть флешки, вторую половину оставляешь под обновляемую часть.
                        Ответить
                        • Кстати, а у микросхем флеша интерфейсы же стандартные?

                          Я могу купить программатор, скачать .bin файл с сайта вендора, вытащить "биос" (или он не в кроватке?) и залить туда всё без ебли, например?

                          В моем детстве всякие стираемые светом чипы вполне себе перепрошивали в полудомашних условиях
                          Ответить
                          • Которые на материнках стоят? Да, обычный SPI флеш сейчас.

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

                              Раньше биосы были на rom.by
                              Ответить
            • Как хорошо, что подобные операции с памятью в полноценных ОС запрещены законом.
              Ответить
              • Да в общем не запрещены, если ты в страничку попадешь.
                Ответить
          • Всё правильно. Сначала I = 42, это нужно в одном потоке, т.к. у железки 42 чипа. Потом слип 12 секунд, за это время чипы ворецируются в другом треде... И когда этот тред выходит из слипа, можно сделать I = 32, потому что у программиса 32-х битная система, которая почему-то называется х86.
            Ответить
        • нет, но меня пугает тот факт, что это все таки написано и отправлено релиз. и то, что оно чудом работает в "нормальных условиях".
          этот код - пример того, что получается, если ты единственный специалист на селе.
          Ответить
  • На самом деле, эквивалентный код: GPIO_ResetBits(GPIOB, LED1); //RED OFF

    На 11 и 20 строке условие одинаково. Если оно истинно, то диод сначала включится и сразу же выключится. Если ложно, то он просто выключится.
    Ответить
    • > включится и сразу же выключится

      А потом окажется, что там на плате какой-нибудь сброс схемы триггерился по этому импульсу, а после оптимизации теперь всё поломалось.
      Ответить
      • ха-ха, ну тогда мне кранты)

        на самом деле все это завернуто в while(true) с секундной задержкой, и для оператора (и судя по всему для легаси программиста) это наносекундное моргание было просто незаметно.
        Ответить
    • А что, если по ТЗ нужно было моргнуть диодом? Тогда не эквивалентно.
      Ответить
      • > моргнуть

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

      Здесь должна быть ссылка на статью про лифт на ардуине.
      Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8