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

    −39

    1. 1
    2. 2
    static const BOOL8 False = 0x4B;
    static const BOOL8 True = 0xB4;

    добро пожаловать в медицинское оборудование life-support класса! булы могут принимить значения: false, true и ***ALARM***ALARM***FATAL ERROR***ALARM***ALARM***

    PS если нет дублированого проца/памяти с компаратором, то вот так люди извращаются что бы bit-flip тру в фолс и наоборот не сделал.

    Запостил: Dummy00001, 15 Сентября 2016

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

    • поясните мысль
      Ответить
      • что именно?
        Ответить
        • > вот так люди извращаются что бы bit-flip тру в фолс и наоборот не сделал.
          Ответить
          • классические true & false это 1 и 0. если проиходит bit-flip то true может стать false, false может стать true.

            биты в памяти, с (не)достаточно низкой вероятностью, под воздействием космической радиации, могут менять значение (ака bit-flip). на серваках для защиты от этого ставят ECC память. на safety/mission-critical/life-support системах, в зависимости от требований надёжности, ставят ECC память, и/или два проца/памяти в синке работающих, и/или используют для констант/значений hamming коды, что бы распозновать 1-bit-flip ошибку железа.

            на системе которая у меня под рукой (временный проект) там нет двойного проца, и нет ECC. поэтому извращаются с кодами хэмминга, а тру/фолс имеют вот такие значения. проверяются значения не всегда, но в нужных местах проверяются, и система кидает фатальную ошибку.
            Ответить
            • А зачем именно 4b и b4? Почему не 0 и ff?
              Ответить
              • хез. я не специалист - почти случайно попал на проект.

                к слову, там в сумме 3 проца стоят, и на одном из них true/false как раз 0xff/0x00. но на остальных 0xb4/0x4b.

                PS я лично ожидал 0хAA/0x55.
                Ответить
                • А я вообще не ожидал, что False == ~True. Для надёжности можно было использовать произвольные константы так, чтобы False == True ^ N, где N != 0xFF и N != 0.
                  Ответить
                  • > False == ~True
                    Максимальное расстояние по хэммингуэю же. С произвольными числами оно меньше будет.
                    Ответить
              • >Почему не 0 и ff?
                На уровне электроники иной раз ноль в единицу внешними факторами проще сбросить, чем наоборот (ну или наоборот). Поэтому нужно равномерное распределение например
                Ответить
                • Кстати, а почему троичные процессоры не стали популярными? Не из-за того ли, что среднее положение оказывалось менее или более устойчивым, чем крайние?
                  Ответить
                  • Это которые типа "Сетунь"? Да вроде как сложность сильно выше была у троичных ячеек по сравнению с двоичными. Хотя может и другие факторы повлияли.
                    Ответить
                    • давно где-то читал. троичные процы были случайностью, и три состояния были побочным эффектом используемой в те времена электроники. новое поколение электроники этого побочного эффекта не имело, и надо было ручками извращатся делать. поэтому они и вымерли.
                      Ответить
            • Так и не сказать что извращение. Вполне себе логичный подход.
              Ответить
              • хез. там в паре компонент с более низким класом безопастности я уже видел фиксы с "== False" на "!= True".
                Ответить
            • Тогда надо ещё на код постоянно CRC насчитывать...

              З.Ы. К слову, та же циклоняшка умеет в фоне считать хеш своей конфигурационной памяти и выдавать на одну из ножек аларм, если какие-то биты помялись.
              Ответить
              • Я что-то пропустил. Что-за циклоняшка?
                Ответить
                • EP4CE22F17C6N
                  Ответить
                  • конфигурационная память - исходное состояние гейтов то бишь считай прошивка? тогда это не тоже самое
                    Ответить
                    • Да, прошивка - настройки элементарных ячеек и соединения между ними. Если она поедет - схема испортится и начнёт делать что-то левое. Что очень похоже на запоротый сегмент кода у обычного проца. Почему не то же самое?
                      Ответить
                      • показать все, что скрытоЯ вижу тебя в белом кружевном фартучке и блядских колготках в сетку.
                        Ответить
                      • сегмент кода часто лежит в ROM и запоротся не может. то что может запоротся это содержимое RAM, aka состояние программы.

                        мое понимание всегда было что FPGA добавляют эту фичу потому что количество перезаписей прошивок (типа как на флеше) тоже ограниченый ресурс. и после какого-то числа прошивок, гейты больше не позволяют ихнее состояние менять.
                        Ответить
                        • показать все, что скрытоИ тебя.
                          Ответить
                        • > гейты больше не позволяют ихнее состояние менять
                          Не, по крайней мере у циклона это самая обычная SRAM (да, для загрузки ему нужна внешняя spi флешка или дебаггер через jtag). А фича эта позиционируется именно для защиты от пролетающих мимо частиц-диверсантов: Cyclone IV devices offer on-chip circuitry for automated checking of SEU detection. Applications that require the device to operate error-free at high elevations or in close proximity to earth’s north or south pole require periodic checks to ensure continued data integrity.
                          Ответить
                          • хез. не хардварщик. из моего прошлого короткого опыта с сэйфти системами, знаю что там все не тривиально и все компромис: каждая отдельная фича редко позволяет достичь нужного MTBF, поэтому нужна комбинация, и формальное доказательноство что нужное MTBF достигнуто. с медициной я столкнулся случайно, и похоже что у них там все считается по другому, и вместо MTBF они пользуются чем то другим (но тоже MTF или MFT называется, забыл - первый раз неделю назад увидел).
                            Ответить
                            • Ну тут тоже эта фича отвечает только за конфигурацию, а данные надо самому защищать...

                              MTTF (среднее время до поломки)?
                              Ответить
                              • (наконец не забыл.)

                                Fault Tolerance Time (FTT) - время от обнаружения/происхождения ошибки до момента когда ошибка может нанести вред (пациэнту).

                                Multiple Fault Tolerance Time (MFTT) - промежуток времени когда двойная ошибка не наносит вреда. (плюс "sleeping fault" - ошибка которая происходит в момент времени, когда она никакого вреда нанести не может.)

                                все очевидно из области Fault Tolerance - но там все платными стандартами обложено и деталей я не знаю.
                                Ответить
    • А вы смеялись.
      Ответить
    • А где здесь C++?
      В класс же надо завернуть!
      http://ideone.com/VvTbXV
      Ответить
    • показать все, что скрытоВам всем главное умный вид делать, типа вы во всём разбираетесь. Уёбки.
      Ответить
      • Одних сложных щей недостаточно в этой жизни, нужно ещё умение посылать нахуй. Иди нахуй. (поправил очки, сделал сложные щи и пошёл обратно в тред)
        Ответить
    • Оборудование типа С? На самом деле не такой уж и багор, учитывая то true у нас не битовое, а восьмибитовое и одни компиляторы считают true как наличие любого не нулевого бита из 8-ми, а другие только крайний правый бит.
      Ответить
      • > Оборудование типа С?

        да.

        > На самом деле не такой уж и багор

        знаю что не говно. для большинства - которое включает меня - это просто диковинка.
        Ответить
      • >>восьм

        --я считаю что истина только одна!
        --о нет, мой юный друг. Истин на свете великое множество.
        --Сколько, учитель?
        --2^8 -1
        Ответить
        • Истинна есть true и только if(flag==true), если же if(flag) - такой код подобен похотливой блуднице пускающей в недра свои любого у кого есть взведенный хоть один бит.
          Ответить
    • Забавное извращение, у нас-то просто RAM с parity битами.
      Ответить
    • Я бы сделал 0xAA и 0x55, как в бивисе. Там нужно вот реально все нолики и единички перепукать чтобы вот.
      Ответить

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