1. Си / Говнокод #19095

    −97

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    //прерывание по таймеру А
    
    ISR(TIMER1_COMPA_vect)
    {
        u08 i=0;  // локальная переменная
    
            cli();
            PORTD |= _BV(PD4); // Вывод PD4 в 1. Выход ШИМ
            TCNT1H = 0x00;
            TCNT1L = 0x00;
    
            // Динамическая индикация
            Shet_ind+=1;
            if (Shet_ind==7)
            {
             PORTC &= 0x70;
             PORTB=0;
            };
            // Подготовка указателя
            if (Ukaz_Herc) //
                {
                    Ukaz_znash = (Ukaz_znash+1)&0x0f;  // 1кГц
                    // Загрузить новое значение ШИМ !!!!!!!
                    OCR1BH = tabl1 [Ukaz_znash][0];
                    OCR1BL = tabl1 [Ukaz_znash][1];
                    if (Ukaz_znash==0) {Kol_period-=1;};
                }
                else
                {
                    Ukaz_znash = (Ukaz_znash+1)&0x07; // 2кГц
                    // Загрузить новое значение ШИМ !!!!!!!
                    OCR1BH = tabl2 [Ukaz_znash][0];
                    OCR1BL = tabl2 [Ukaz_znash][1];
                    if (Ukaz_znash==0){Kol_period-=1;};
    
                };
    
            // 1-Wire Сброс, передача 1, передача 0
            if (Zaxvat1Wire<20000) {Zaxvat1Wire+=1;}; // Инкремент пропущенных захватов
            if (Per1Wire!=0)
                {
                 if (Per1Wire>1) DDR |= _BV(DDD7); // Порт D PD7 на выход. Выход 1-Wire на линии 0
                 //Вставить ожидание 1 мкС
                 QDEL;
                 if (Per1Wire-=1)
                    {
                     DDR &= ~(_BV(DDD7)); // Линия 1-Wire линия 7 порта D на вход. На линии 1
                     Zaxvat1Wire=0; // Сброс инкремента пропущенных захватов
                    };
                };
            // 1-Wire Cчётчик пропущенных захватов фронтов
    
            // Счёт кол периодов
    
            /*****А ТЕПЕРЬ ПОЗНАЙ ИСТИННУЮ БОЛЬ!*****/
            if (Kol_preiod==0)
                {
                    if(Buf_bit)
                    { // Передаем бит
                        //Проверка передаваемого бита
                        if (Buf_bit>1 && Buf_bit<10) // передаем значащие биты
                        {
                        i=0; // Передаем 0
                        if (bit_is_set(Buf_vtor [Buf_baite], Buf_bit-2)) {i=1;}; // Передаем 1
                        };
                        if (Buf_bit==10) i=0; //Передаем старт бит
                        if (Buf_bit==1) i=1; //Передаем старт бит
                        if (i)
                        {Ukaz_Herc = 0x01; Kol_period=10; } // Передаем 1 OCR1AH = 0x01; OCR1AL = 0xF4; Ukaz_znash=0;
                        else
                        {Ukaz_Herc = 0x00; Kol_period=20; } // Передаем 0 OCR1AH = 0x01; 
                        OCR1AL = 0xF4; Ukaz_znash=0;
                        Buf_bit-=1;
                    };
                    if (!Buf_bit)
                    { // Биты кончились меняем байты
                        if(Buf_baite) {Buf_baite -=1; Buf_bit=10;}
                        else
                        {Buf_bit=1;};
                    };
                };
            // Динамическая индикация
            if (Shet_ind==7 && IndOn)
            {
            Shet_ind=0;
            Delitel += 1; //Инкремент дополнительного делителя
            if (!pos) {Brightness_shet=(Brightness_shet+1)%8;};
            PORTB=digits[pos];
            if (Brightness_shet<=Brightness) {PORTC |= 1<<pos;}; //Регулировка яркости
            };
            sei();
    }

    Тут есть всё на любой извращённый вкус. Этот лютый пиздец я отрыл на каких-то распечатаных листах.
    (Листинг 28 страниц, Карл! 28 страниц, 10 шрифтом)

    Запостил: MiD, 26 Ноября 2015

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

    • Аппаратами, сер!
      Ответить
    • Аппаратчики, сер!
      Ответить
    • когда одно лишь автоформатирование увеличит читаемость твоего кода на порядки...
      Ответить
      • И неплохо было бы понятные имена давать. Я так и не понял, что значит shet. А baite по-итальянски хижины, а по-шведски приманка
        Ответить
        • поди от слова "счетчик".
          Ответить
        • Это вроде как "гавно" или "пезда".
          Ответить
          • Тогда было бы cant (cunt - пи*да). Интересно, если ошибиться и вместо counter написать cunter и выложить вопрос на stackoverflow
            Ответить
    • >(Ukaz_znash+1)&0x0f
      Это каст адреса 0x0f к типу Ukaz_znash+1?
      Переменные с большой буквы совсем не читаются :(
      Ответить
      • Указател на знашениа, насяльника
        Ответить
        • Украшатель значения
          Добавляет симпатичную звёздочку
          Ответить
          • И чему равно 100500 + симпатичная звёздочка?
            Ответить
      • мне кажется, что это побитовое умножение
        Ответить
      • Ну и говно же этот ваш сишный синтаксис. То ли дело Паскаль, в котором побитовое И обозначается словом and, а взятие адреса символом @.
        Ответить
      • То энд, бобби. Побитовый энд. Но ты себе голову не забивай. Это плогоамистские дела
        Ответить
    • Судя по ISR, это ардуино. Ардуинщики они такие. Ничего не знают, ничего не умеют.
      Ответить
      • Это говно мамонта, речь про ардуино тогда не шло, хотя да - это авр
        Ответить
      • > Ардуинщики они такие.
        99% ардуинщиков это либо программисты без опыта в электронике (берут ардуину потому что паять не надо), либо электронщики без опыта программирования (берут ардуину потому что полно примеров кода). Собственно отсюда и результаты...
        Ответить
        • т.е. ожидать от ардуинщика норм кода бессмысленно
          Ответить
        • Ещё в Arduino совершенно отвратная "IDE" и либа. И самое печальное, что сторонние либы для работы с внешними компонентами все на них завязаны...
          Ответить
    • Смешались в кучу кони, люди... Динамическая индикация и обмен по 1-wire в одном флаконе.

      > /*****А ТЕПЕРЬ ПОЗНАЙ ИСТИННУЮ БОЛЬ!*****/
      Фи, подумаешь, конечный автомат. У меня больше боли от идентификаторов транслитом...
      Ответить
      • Конечный автомат - это если до этого кровь из глаз ещё не шла
        Ответить
    • >if (Ukaz_znash==0){Kol_period-=1;};
      >if (Brightness_shet<=Brightness) {PORTC |= 1<<pos;};
      Они там экономят байты исходного кода в надежде, что это сократит выхлоп конпелятора?
      Ответить
      • Пробел же долго давить.
        Ответить
        • И распечатка с лишними пробелами плохо на А4 влезает.
          Ответить
      • Там же на любой вкус:
        if (...) {...}
        
        if (...)
        {...} // без отступа
        
        if (...)
            {
                ...
            } // а здесь мы решили исповедаться и засунули недоюзаные в других местах отступы и переносы
        Ответить
        • Если бы программисты были как бессмертные из "Горца", то я бы не стал рубить таким голову
          Ответить
          • Потому что сила у них какая-то говнистая?
            Ответить
            • В горце была тема, что характер и образ мысли тоже передается
              Ответить

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