Пользователь
Информация
- В рейтинге
- 99-й
- Откуда
- Петропавловск, Северо-Казахстанская обл., Казахстан
- Зарегистрирован
- Активность
Специализация
Десктоп разработчик, Инженер встраиваемых систем
Pure C
Assembler
X86 asm
Win32 API
Visual Basic
MySQL
Git
ООП
Разработка электроники
Обратная разработка
Интересно, интересовался ли когда-нибудь Аскон тем, сколько пользователей отвалились при переходе с классического интерфейса на проклятый новомодный вырвиглазный с лентой?
Если такой подсчёт есть/будет, добавьте за меня +1.
Не так давно реверс-инженирил плату теплового счётчика (тепловычислителя), кои уже больше 20 лет трудятся в разных уголках СНГ.
Надо понимать, что изделие не игрушечное, с метрологией у него всё окей, раз сертификат типа средства измерения есть и энергосбытовые компании его признают.
Фрагмент схемы
АЦП и обвязка измерительных цепей:
Формирователь напряжения Vcmc:
Так вот, с высоты опыта реверсинга могу сказать:
Выбор 4-х проводной схемы aka «схема Кельвина» — это вообще не вопрос. Нет ни одной разумной причины обсуждать иные подходы. Да и выпускаемые промышленностью платиновые термосопротивления тоже заточены под эту схему.
Нет в промышленном приборе никаких токовых зеркал на рассыпухе и никаких ОУ. Есть высокоточный многоканальный АЦП, есть линейный стаб и токовый шунт (прецизионный). Всё остальное тепловычислитель делает программно.
А специалиста по окнам вы называете «оконик», по баням — «баник», и на кране у вас работает «крановик»?
PAE во-первых, не напоминает. А во-вторых — какие «эти»?
Сегменты реального режима — это одно. Сегменты защищённого режима — совсем другая вещь.
На какие именно сегменты похож по вашему PAE?
Автор написал херню, переводчик спокойно прошел мимо и перевёл, комментаторы тоже спокойно проходят мимо.
Относительные адреса переходов всегда задаются не относительно текущей, а относительно следующей инструкции.
Таким образом JMP с нулём в машинном коде (а не ассемблерном листинге) не порождает бесконечный цикл, а просто переходит к следующей инструкции.
А в целом, раздражает, что относительные адреса, которые используются исключительно в инструкциях CALL/Jxx, автор называет указателями. Они никакие не указатели, а именно что смещения, и от модели памяти и разрядности сегмента в их отношении ничего не меняется.
Зато автор умалчивает о существовании вариации JMP инструкции, которая принимает абсолютный полный (far) адрес и о том, что jmp/call могут косвенно ссылаться на хранящийся в памяти near/far адрес.
Очень странный ответ.
— У нас используется щелочная батарейка.
— Странно, а почему не литий-тионилхлоридный, что является ожидаемым выбором для такого прибора?
— У нас используется Крона, раз в полгода пищит.
Ожидал что-то литий-тионилхлоридное в таком-то приборе.
У вас?
Синдром default-country?
Тогда бы в диспетчере устройств эти последовательные порты светились, но ими там не пахнет.
Если употребляете слово «пост» на технарском ресурсе, надо бы в скобочках уточнять, что имеете в виду религиозный пост.
Я сначала подумал о посте в значении «сообщение», затем что это просто латинское «после», потом «пост охраны».
Всего-то нужно было в каноническом определении использовать слово «внимательности» вместо «внимания» — и не было бы кривотолков.
Чтобы гельминт мутировал, он должен уметь размножаться, а это первое, что я бы выключил, делая генетически-модифицированного червя-хирурга.
Если же червь бесплоден, то мутации в отдельных клетках конечно никуда не денутся, но дальше этой клетки не пойдут.
То, что люди собираются или уже сейчас используют ChatGPT для программирования меня пугает тысячекратно больше, чем иллюзорный шанс выхода из под контроля червя-простатоеда.
Тем более, что уже готовых паразитов в природе пруд-пруди.
Мне кажется мечтается что в будущем лечение этого состояние должно стать совсем иным. Генетически модифицированный гельминт с запрограммированной убиваемостью неким препаратом, который подсаживается пациенту, возможно сразу в мочеиспускательный канал, и селективно поедает разросшуюся ткань простаты (а другую ему невкусно), параллельно производя местную иммуносупрессию (как и все паразиты), чтобы не привлекать внимание
санитаровлейкоцитов.Когда задача выполнена, в организм вводится летальная для гельминта доза препарата, почти безвредного для человека и летального для гельминта.
Эдакий био-шейвер.
Автор, вы специально до конца статьи скрывали свой возраст?
В вас говорит плюсовик.
Первоначально термин «стандартная библиотека» предполагал именно стандартную библиотеку функций.
Скрытый текст
Хотя вы можете возразить, что и в стандартной библиотеки Си есть функция qsort, которая представляет собой алгоритм с callback-ом.
Отвратительный вырвиглазный синтаксис.
Я не понимаю, отчего каждому изобретателю своего ЯП так охота придумать какие-то диковинные конструкции и закорючистый синтаксис.
Вот решили вы делать не просто язык, а C-подобный — ну и отличное решение. Прекрасное решение. Я считаю синтаксис С идеальным синтаксисом, почти что «золотым сечением» в области языков программирования, результатом эволюции подходов, отброса неудачнях подходов и закрепления удачных.
Ну и оставайтесь в рамках C-подобности. Зачем какое-то func, какие-то дурацкие ->?
Вместо этих извращений возьмите конвенциональный сишный синтаксис, но добавьте в язык то, чего не хватает в Си.
Например поддержку явного указания endianness отдельно взятых переменных или полей структур.
Пробовали когда-нибудь писать код, который должен компилироваться и в little-endian и в big-endian (из одного и того же исходника, без правки) и при этом должны работать с файлом или сетевым трафиком, в котором есть поля, endianness которых жестко задан какой-то спецификацией и не зависит от целевой архитектуры? Пусть в языке будет возможность явно указать порядок байтов, пусть для таких типов компилятор сам генерирует код переворачивания байтов.
Или, например, такая фишка, как структуры переменного размера с полями переменного размера, где размер полей привязан к значению предешствующих полей, а смещения полей вычисляются в рантайме?
Или 24-битные переменные из коробки. Или переменные произвольной битности — при этом, если архитектура позволяет, компилятор использует особенности архитектуры, а если же нет — эмулирует переменные нужной битности. Хотите 96-битное целое — да пожалуйста, объявляйте, присваивайте значения, складывайте (компилятор сам развернет одну операцию сложения в несколько с применением флагового бита переноса разряда).
Ни в коем случае. Если вы не делаете моноязык, который «вещь в себе», а провозглашаете такие принципы как линкуемость с другими языками (си, асм), то какого черта ваш язык должен навязывать какой-то свой формат проекта?
Пишет Вася программный продукт — четверть на Алиасе, четверть на Си, четверть на ассемблере, четверть на (прости-господи) Паскале. Все это вася линкует в один исполняемый файл. Вопрос: с какого перепуга проджект-файл должен быть составлен именно по правилам и законам, которые задает язык Alias — один из четырёх примененных в проекте языков?
Процесс сборки — это надъязыковая зона ответственности. Как может быть надгосударственный институт власти, так и все, что касается сборки, должно быть надъязыковым. Ни один язык не должен лезть в эту сферу ответственности и навязывать свои правила игры.
Все что мне нужно от языка и компилятора: пожалуйства, пусть он возьмёт исходник и в ответ выплюнет объектный файл в формате COFF, ELF, или ещё какой. Чтобы я потом взял свой любимый линкер и слинковал много объектных файлов (написанных, возможно, на разных языках) в один исполняемый. Или скормил их своему союственному линкеру, генерирующиму исполняемые файлы моего собственного формата под мою собственную ОС, которую я сам пишу. Иначе что это за системное программирование, если язык и компилятор не оставляют мне такой возможности.
Линкуемость с другими объектными файлами и использование одинакового ABI — это все, что мне нужно. Не нужно никакой стандартной библиотеки. Если мне нужна будет какая-то библиотека, я слинкуюсь с ней сам, например, со стандартной библиотекой Си от GNU. Или, если вы условия не позволяют, сам реализую нужные функции.
Язык без стандартной библиотеки — это не чемодан без ручки. Напротив, язык, предполагающий стандартную библиотеку, это туристический чемодан, куда производитель заботливо положил ласты и маску, опрометчиво предположив, что я не только всенепременно поеду на отдых, но и увлекаюсь нырянием.
В общем-то, те же самые аргументы.
Если вы хотите системный язык программирования, в нем вообще не должно быть никакой стандартной библиотеке.
Зачем мне ваш printf, если я пишу под код, который будет работать в среде где вообще нет понятия терминала (например это ЭБУ коробки передач или мозги квадрокоптера).
Зачем мне ваши функции управления процессами, если в среде, где будет выполняться код, может вообще не быть понятия процесса. Или быть, но это будут не процессы-в-духе-unix или процессы-в-духе-Windows.
А если если все-таки я пишу свою экзотическую ОС в которой все-таки будет концепция процессов, что будут делать ваши стандартнобиблиотечные фунции для запуска нового процесса или работы с терминалом, если для этого они должны обращаться к системным API, а таковых нет, потому что стандартная библиотека о них знать не знает, потому что я как раз и придумываю их здесь и сейчас, реализую их на новомоднои системном ЯП.
Скрытый текст
Совсем забыл: там же стоит конденсатор 10 uF у каждого датчика, чтобы обеспечить каждый датчик энергией. Так вот, если предположить, что во время измерения термодатчик потребляет ток 1.5 mA вне зависимости от напряжения питания, достаточно 16 миллисекунл чтобы разрядить конденсатор 10 uF с изначальных 5V до 2.5V (минимальное напряжение для работы чипа — 3V, то есть на 2.5V чип уже не будет работать). Между тем, процедура замера температуры длится как минимум 94 миллисекунды (в самом грубом 9-битном режиме), а в худшем случае — 750 миллисекунд (в 12-битном режиме).
Так что этот конденсатор — мёртвому припарка. Заряд из «локального» конденсатора чип очень быстро высосет, а с шины взять нужный ток несколько устройство одновременно не смогут из-за подтягивающего резистора.
Если интересно, можно даже просимулировать. Симулировать будем с упрощениями:
Термодатчик потребляет 1.5 mA вне зависимости от напряжения питания
Диодом перед «локальным» конденсатором пренебрегаем.
Пуллап сделан к «супермощной» +5V-шине, а не к маломощной RD-цепочке.
4 термодатчика, одновременно делающих преобразование:
просадят напряжение на шине до минимально допустимого (+3V) уже за 24 мс — что в четыре раза меньше, чем требуется чипу для совершения термопреобразования с минимальной точностью (94 мс). Вывод: чипы перестанут работать раньше, чем смогут сделать какой-то замер.
3 термодатчика, одновременно делающих преобразоание:
просадят напряжение на шине до минимально допустимого где-то за 40 мс — опять же, раньше, чем процесс измерения завершится, в итоге измерения не состоятся вообще.
2 термодатчика, одновременно делающих преобразование:
смогут закончить начатое измерение термпературы при любой настроенной точности (от 8 бит до 12 бит — 94...750 мс)
Но это пуллап к идеальной +5V-шине. Без учёта «стабилитронного» подхода.
До полутора миллиампер доходит ток потребления одного чипа во время измерения температуры согласно даташиту.
Даже если бы предложенный пуллап в 470 ом был подключен к +5V-шине с бесконечно низким выходным импедансом, уже при токе 6 mA падение на пуллапе составит 470*0.006=2.82V.
Более чем на 1/2 упадет напряжение питание при одновременном запуске измерения всего лишь на 4 чипах, Карл! На четырёх! Хотя на шину их можно посадить сотню.
Но это при условии что та нода, к которой подключен верхний конец пуллапа, имеет нулевой output impedance. А пуллап по факту подключен к средней точки делителя резистор-стабилитрон, и выходной импеданс этой ноды далеко не ноль. Почему было там 7805 не поставить вместо этой порнографии со стабилитроном? В итоге наверное даже два-три одновременно запущенных на измерение чипа на шине уложат шину
Что за шляпу предлагает нам автор?