1. C++ / Говнокод #28084

    0

    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
    void SoftSPIB::setClockDivider(uint8_t div) {
        if (div == SPI_CLOCK_DIV2) _delay = 2;
        else if (div == SPI_CLOCK_DIV4) _delay = 4;
        else if (div == SPI_CLOCK_DIV8) _delay = 8;
        else if (div == SPI_CLOCK_DIV16) _delay = 16;
        else if (div == SPI_CLOCK_DIV32) _delay = 32;
        else if (div == SPI_CLOCK_DIV64) _delay = 64;
        else if (div == SPI_CLOCK_DIV128) _delay = 128;
        else _delay = 128;
    }
    
    uint8_t SoftSPIB::transfer(uint8_t val) {
        ...
        uint8_t del = _delay >> 1;
    
        uint8_t bval = 0;
        for (uint8_t bit = 0; bit < 8; bit++) {
            digitalWrite(_sck, _ckp ? LOW : HIGH);
    
            for (uint8_t i = 0; i < del; i++) {
                    asm volatile("nop");
            }
    
            if (...) {...} else {
                    digitalWrite(_mosi, val & (1<<bit) ? HIGH : LOW);
            }
        ...
        ...
        ...
        }
        return out;
    }

    - А это точно частота CLOCK_DIV2? /* Fosc/2 */
    - Не боись, я все рассчитал!

    Запостил: Steve_Brown, 17 Марта 2022

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

    • У меня в контроллерах SPI... ой, всё!
      Ответить
    • В этой вашей ардуине готовых функций для задержки нету что ли?
      Ответить
      • Есть, delay и delayMicroseconds. Но тут нужна задержка именно по тактам (константы SPI_CLOCK_DIVx взяты из SPI.h). Скажем, для частоты Fosc/2 длина каждой 0 и 1 должна быть одном такту, т.е. 1 команда nop.
        Ответить
        • А железного SPI там нету разве? Вроде был. Или пины чем-то другим заняли?
          Ответить
          • Был муж
            Да объелся груш.

            Сгорел, что ли, но MISO на одной плате не работает. Пришлось кидать перемычку на другой пин и искать софтовую либу.
            Может, проще свою было написать.
            Ответить
    • Что такое "SPI"?
      Ответить
      • Serial Peripheral Interface

        Как uart, только синхронный с тактированием по отдельному проводу.
        Ответить
    • > точно частота

      Поскольку SPI синхронный, точная частота и не требуется. Лишь бы была достаточно быстрой, чтобы успеть передать данные и достаточно медленной, чтобы провода не мешали.
      Ответить
    • .
              for (uint8_t i = 0; i < del; i++) {
                      asm volatile("nop");
              }

      И как ты проверишь, наанроллит тебе компилятор этот nop, или сделает цикл с счетчиком, в котором дергается nop? Задержка при этом может радикально различаться.
      Ответить
      • Ну раза в 2-3... Для SPI сойдёт.
        Ответить
        • ассимптотически.
          Ответить
          • (блин, асимптотически через одну с. Это не ирония, у меня иногда с удвоенными согласными проблема...)
            Ответить
      • uint8_t del = this->_delay >> 1;

        Не заанроллит, тут и к листингам не ходи.

        Собственно, именно поэтому...
        Ответить
        • Частично наанроллить может. Для точной задержки, сам "цикл" лучше на ассемблере писать
          Ответить
      • блядь потом из за такого кода у меня lode runner на современны процах неиграбелен

        j123, ты как там?
        Ответить
        • И вольфенштейн.
          Ответить
          • Кстати, в гоблинах первых сначала спрашивали, какой у вас камень (286, 386, 486) и потом подстраивали скорость. Видимо не было cpuid в 286, а вот странно, что частоту не спросили
            Ответить
            • В принципе, можно было измерить частоту вместо этих вопросов. Таймер же был. Пару тиков подождать недолго.
              Ответить
            • У меня в контроллерах я на этапе компиляции знаю, какой у меня камень. Поэтому я за контроллеры.
              Ответить
              • В электропапиросах сплошь и рядом кейсы, когда паршивка на разных моделях MCU крутиться.
                Ответить
                • я бы хотел писать под электропапиросы.. а какие там API? как в контроллерах?
                  Ответить
                  • Там поди какое-нибудь avr tiny или cortex m0?
                    Ответить
                  • Там Joyetech APROM и прочие нувотоны
                    Ответить
                    • > нувотоны

                      Т.е. всё-таки cortex m0? Или у них какая-то своя рахитектура?
                      Ответить
                      • Да, на базе вот этих
                        https://www.nuvoton.com/products/microcontrollers/arm-cortex-m4-mcus/m451-base-series/
                        Ответить
                        • Блядь, m4 в сраной сигарете?! Они серьёзно? Что за матан там прошивка считает?
                          Ответить
                          • Может у них там прошивка на питоне
                            Ответить
                            • На джаваскрипте.

                              Затянулся неудачно, и получил undefined дозу никотина
                              Ответить
                              • Можно играть во flappy bird затяжками. Экранчик как раз есть.
                                Ответить
                                • можно загрузить туда lua, и писать на ней новые скрипты

                                  купите мой скрипт для курения за $ 1.99
                                  Ответить
                                  • бывает ли электроводка? Можно ли писать под водку?
                                    Ответить
                                    • Электробутылка с контроллером, который детектит, что на неё сели.
                                      Ответить
                                      • С вибрацией?
                                        Ответить
                                      • а была же история как чувак какой-то девайс для эротических игр на себя надел, а хакер его сломал, и девайс больше не снимался, и требовал 10K баксов чтобы выслать ключ
                                        Ответить
                                        • полмиллиона это же дорого
                                          Ответить
                                          • это было еще до спецоперации по денацификации российского рубля, тогда бакс дешевле стоил
                                            Ответить
                                      • А швабра с контроллером бывает?
                                        Ответить
                                        • https://huttcleantech.com/products/cordless-floor-scrubber-mop
                                          Там наверняка есть какие-то контроллеры
                                          Ответить
                                      • Ну крышечка с вайфаем на базе ESP есть, чтобы не забывать таблетки принимать...
                                        Ответить
                            • полюбасик, нормальный человек не стал бы эту хуйню кодить.
                              Ответить
                          • Я, есссли честно, вообще удивлён, что для того чтобы курить нужен какой-то "контроллёр"

                            Хотя я не курю, может они кроме испарения ёще что-нибудь должны уметь.
                            Ответить
                            • Да можно и аналоговый регулятор температуры собрать, наверное.
                              Ответить
                              • В одноразовой сигарете там вообще нагревательный элемент подключен к батарейке последовательно через какой-то датчик, который как-то определяет затяжку. Затянулся - сопротивление упало - пошёл нагрев. Сильнее затянулся - сильнее упало - сильнее нагрев.
                                Ответить
                                • Я видел такой аналоговый контроллер для приставки: чем сильнее жмеш ручку -- тем сильнее меняется сопротивление, и так работает

                                  ну про программирование джойстиков мы уже тут ржали

                                  так вот: давайте придумаем игру чтобы контролировалась затяжкой

                                  симулятор наркомана?
                                  Ответить
                                • Фу, вы ещё обсудите контроллер для введения дозы героина, блядь.
                                  Ответить
                                  • Для начала нужно решить проблему: как определять, что приход кончился и нужна новая доза?

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

                                      Warning! Vital signs critical. Morphine administered.

                                      Или как там было?
                                      Ответить
                                      • Major fracture detected. Automatic medical system engaged. Morphine administered.
                                        Ответить
                                        • С такой системой не удивлюсь, если в 3ке Фримен будет уметь в паркур.
                                          Ответить
                                    • The prototype medic power armor has the ability to administer Med-X, which it will do if the wearer's health drops below 33% or if a limb's health drops below 25%. Med-X will be dispensed every 2.5 (in-game) hours.
                                      Ответить
                            • Ну как бы нужна возможность включать и выключать, а также детектить низкий заряд и об этом сообщать. Самый самый минимум.

                              А температура там меряется через обсчет температурного коэффициента сопротивления. Вот твой матан, bormand.
                              Ответить
                              • Ну даже и нагревательного элемента не нужно. Просто когда курить, процессор начинает считать матан (или майнить эфириум).
                                Ответить
                          • `На `m4' матан хоть и можно считать, но очень муторно. Не рекомендую.'
                            Ответить
                            • А Arm Cortex-m4 это значит с аппаратной реализацией `m4'?
                              Ответить
                        • На ней поди и в дум уже научились играть?
                          Ответить
                          • тостер_с_netbsd.png
                            Ответить
                          • Во Flappy Bird.
                            Ответить
                            • Кстати, чуваку с хабра, который пилит свой хакерский тамагочи, надо подсказать идею оформить его в виде сигареты. Затягиваешься и шлагбаум открывается.
                              Ответить
                              • Не взлетит. Уже были попытки вставить мрз плеер, тачскрин с жестами и самая дурацкая - bluetooth колонку.
                                Ответить
                                • > bluetooth

                                  А интеграция с какой-нибудь прогой для ЗОЖ на мобиле есть?

                                  На этой неделе вы курили на час меньше, чем на прошлой.
                                  Ответить
                                  • И даже такое тоже было, но я не помню что за платформа там. Возможно как раз твой м0.

                                    Данная программа было разработана специально для электронных сигарет с функцией Bluetooth. Это сделает вашу электронную сигарету более человечной и интеллектуальной.

                                    ¯\_(ツ)_/¯
                                    Ответить
                  • Вот, нашел гитуху даже
                    https://github.com/ReservedField/evic-sdk
                    https://github.com/ClockSelect/myevic
                    Ответить
                • А почему не понасобрать прошивку под разные MCU, если делается хуйня под названием "time delay loop"?

                  Вообще, грамотнее было б делать так:

                  time_t time = gettime_now() + delay_need;
                  while(gettime_now() < time)
                  {
                    asm volatile("nop");
                  }
                  Ответить
                  • а у вас в контроллерах нельзя запрогрммировать таймер и на его прерывание повесить чото? или процессор один хер принадлежит вам, и всем похуй?
                    Ответить
                    • > а у вас в контроллерах нельзя запрогрммировать таймер и на его прерывание повесить чото?

                      Можно

                      > или процессор один хер принадлежит вам, и всем похуй?

                      Ну это если никакой ОС нет. А если есть, она под планировщик может какие-то таймеры себе захавать. В общем, там по-всякому может быть
                      Ответить
                      • Кстати, таймер может срабатывать допустим раз в секунду и менять атомарно какую-то глобальную переменную, которую могут читать особые функции для получения "времени". Но иногда еще есть в контроллере встроенный счетчик тактов, и "время" можно от него получать.
                        Ответить
                        • > счетчик тактов

                          Во многих вообще RTC'шку можно поднять при желании.
                          Ответить
                          • Для RTC отдельный чип должен быть. Если время считать процом, то результат мягко говоря нестабильный. Опять же, в мире электропапиросов был кейс с часиками для украшения паршивки.
                            Ответить
                            • Там внешний кварц на 32кГц достаточно зацепить и запасное питание от батарейки (если основное планируется отрубать). Всё остальное уже внутри есть.
                              Ответить
                              • > основное планируется отрубать
                                Подразумевается, что элементы меняют постоянно. Надо бы провести эксперимент с часами, никаких литиевых таблеток я внутри не видел.
                                Ответить
                                • На время замены кондёра хватит, как мне кажется. Оно там по бекапному питанию совсем копейки жрёт.
                                  Ответить
                  • Тут ирония в том, что используются константы из <SPI.h>. Что порождает невысказанное предположение, что задержка в N тактов процессора между импульсами осуществляется повторением команды "nop" (исполняющейся 1 такт) в цикле for с N итерациями, в том числе при малых значениях N (2, 4...)
                    Ответить
                    • А процессор имеет право выкинуть нахуй нопы? Или там есть какое спец инструкцие типа volatile?
                      Ответить
                      • У меня в микроконтроллерах (такого класса) нет хитроумного исполнения.
                        Там все команды задокументированы по времени исполнения, так что можно высчитать задержку с точностью до такта.
                        Ответить
                        • У меня в IBM PC XT тоже
                          задокументированны Фогом
                          Ответить
        • loadhigh goslow32
          Ответить
        • > j123, ты как там?

          Норм
          Ответить
          • Напомню, что так называемые русские — это народ-пидор, народ-мразь, народ-говно, народ-гнида, народ-гной, народ-хуесос. Смерть ванючей русне!
            Ответить

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