All streams
Search
Write a publication
Pull to refresh
0
@MacInread⁠-⁠only

User

Send message
Попробуйте купить жд билеты или проездной со студенческой скидкой. Или пройти в музей по студенческой цене. Узнаете, что заочники — не люди.
1 мультиплексор для дешифрации шага сдвига и 8 ключей для выбора 1 из 8 перекидывателей. Можно считать, что у нас 8 вычислительных блоков. Если у нас только сдвиг на 1 бит, то есть только 1 группа ключей для подключения вычислительного блока.
Не совсем. Если мы перекидываем на 1 бит (1->0, 2->1 и пр, а 0 — на перенос (допустим, сдвиг вправо), то все равно этот блок подключается через ключи, например. Здесь таких ключей 8 для каждой ступени + 1 мультиплексор на всё.
Реализуются где? Конкретно в данном случае или вобще? Никакой особой сложности нет.
Каждой задаче — свой инструмент.
или наплодить состояний, оптимизировать автомат и потом пытаться понять, что же там не взлетело

Зачем? Вполне по силам написать утилиту, которая поправит таблицу и проведет, если надо оптимизацию.
В конце концов, системы типа parser builder'а как раз по БНФ строят таблицы. Тут — аналогично.

а если надо вывод сделать в половине состояний? А в другой половине состояний писать в UART?

Вполне реализуемо.
Класс, есть шаговые искатели… спасибо за идею.
Это смотря что в качестве входного алфавита выбирать. Раздутая таблица — не проблема, есть способы поиска совместных состояний.
Как я понимаю, 176 применена, чтобы батарея «вечной» была?
одна микросхема для генерации секундных импульсов, три счётчика (60, 60 и 24) и два шифратора для индикатора. Всего шесть корпусов. Плюс один-два корпуса для защиты от дребезга контактов для кнопок настройки времени (мы же не китайцы

Так это все в старых часах и так есть, и генератор, и счетчики. Я, правда, не смотрел, как там дешифрация идет.
Возможно, я совсем-совсем ошибаюсь, но мне кажется, что мы можем описать mdlкой ряд страниц, смапить в виртуальное пространство, потом при расширении, смапить на следующие вирт. адреса встык новый кусок новой Mdlкой. Но может это работает только для драйверов, только для nonpaged памяти — не уверен. Так, чисто в порядке бреда.

О документированности: вот, пожалуйста, виндовые структурки:
//
// I/O system definitions.
//
// Define a Memory Descriptor List (MDL)
//
// An MDL describes pages in a virtual buffer in terms of physical pages.  The
// pages associated with the buffer are described in an array that is allocated
// just after the MDL header structure itself.  In a future compiler this will
// be placed at:
//
//      ULONG Pages[];
//
// Until this declaration is permitted, however, one simply calculates the
// base of the array by adding one to the base MDL pointer:
//
//      Pages = (PULONG) (Mdl + 1);
//
// Notice that while in the context of the subject thread, the base virtual
// address of a buffer mapped by an MDL may be referenced using the following:
//
//      Mdl->StartVa | Mdl->ByteOffset
//


typedef struct _MDL {
    struct _MDL *Next;
    CSHORT Size;
    CSHORT MdlFlags;
    struct _EPROCESS *Process;
    PVOID MappedSystemVa;
    PVOID StartVa;
    ULONG ByteCount;
    ULONG ByteOffset;
} MDL, *PMDL;

Во-первых, кишки винды документированы, и вполне неплохо (да, да, я не сравниваю с Линуксом. Неплохо для проприетарной ос).
Во-вторых, в Линуксе модуль структурки не правит, это делается все равно через ядро и стандартный вызов, насколько я понимаю.
В Win есть Mdl, с которыми можно поиграться, но это на уровне драйверов/ядра.
И отлично. Тут без поллитры пересекающихся графиков не обойтись — скорее всего, в точке 128к как раз наступает равновесие.
Это я знаю; в той статье уже участвовал в этом обсуждении.
Почему неа? Windows умеет realloc in-place делать?
Эмулировать или извращаться можно на любом языке

Это не извращение. Это другой способ выполнить ту же задачу.
Вот когда-то давно видел, как на Visual Basic перегоняли из бинарной строки 4 байта в integer путем прохода циклом с получением ASCII кода и умножением-сложением — вот это извращение.
А представить поле данных как массив или структуру — просто другой метод работы с данными.
Речь шла о работе с устройствами, что из той-же оперы.

Вопрос был про volatile, который в контексте работы с периферией, как я понимаю, употребляется там, где железо (через тот же DMA) может что-то переписать. Нет?

Примеры, конечно, уровня Hello World, но в вашем случае это можно сделать только путем вызова функции, а это лишние действия по её вызову

Функцию, да.

Да и когда требуется вызвать одну инструкцию, городить целую функцию это слишком.

Так одна инструкция — предельный случай. Для обмена, емнип, есть встроенная функция swap. Байты можно поменять местами через тот же equivalence.
Именно икваленс и массив я и имел в виду.

Information

Rating
Does not participate
Registered
Activity