1 мультиплексор для дешифрации шага сдвига и 8 ключей для выбора 1 из 8 перекидывателей. Можно считать, что у нас 8 вычислительных блоков. Если у нас только сдвиг на 1 бит, то есть только 1 группа ключей для подключения вычислительного блока.
Не совсем. Если мы перекидываем на 1 бит (1->0, 2->1 и пр, а 0 — на перенос (допустим, сдвиг вправо), то все равно этот блок подключается через ключи, например. Здесь таких ключей 8 для каждой ступени + 1 мультиплексор на всё.
или наплодить состояний, оптимизировать автомат и потом пытаться понять, что же там не взлетело
Зачем? Вполне по силам написать утилиту, которая поправит таблицу и проведет, если надо оптимизацию.
В конце концов, системы типа parser builder'а как раз по БНФ строят таблицы. Тут — аналогично.
а если надо вывод сделать в половине состояний? А в другой половине состояний писать в UART?
одна микросхема для генерации секундных импульсов, три счётчика (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, с которыми можно поиграться, но это на уровне драйверов/ядра.
Это не извращение. Это другой способ выполнить ту же задачу.
Вот когда-то давно видел, как на Visual Basic перегоняли из бинарной строки 4 байта в integer путем прохода циклом с получением ASCII кода и умножением-сложением — вот это извращение.
А представить поле данных как массив или структуру — просто другой метод работы с данными.
Речь шла о работе с устройствами, что из той-же оперы.
Вопрос был про volatile, который в контексте работы с периферией, как я понимаю, употребляется там, где железо (через тот же DMA) может что-то переписать. Нет?
Примеры, конечно, уровня Hello World, но в вашем случае это можно сделать только путем вызова функции, а это лишние действия по её вызову
Функцию, да.
Да и когда требуется вызвать одну инструкцию, городить целую функцию это слишком.
Так одна инструкция — предельный случай. Для обмена, емнип, есть встроенная функция swap. Байты можно поменять местами через тот же equivalence.
Зачем? Вполне по силам написать утилиту, которая поправит таблицу и проведет, если надо оптимизацию.
В конце концов, системы типа parser builder'а как раз по БНФ строят таблицы. Тут — аналогично.
Вполне реализуемо.
Так это все в старых часах и так есть, и генератор, и счетчики. Я, правда, не смотрел, как там дешифрация идет.
О документированности: вот, пожалуйста, виндовые структурки:
Во-вторых, в Линуксе модуль структурки не правит, это делается все равно через ядро и стандартный вызов, насколько я понимаю.
В Win есть Mdl, с которыми можно поиграться, но это на уровне драйверов/ядра.
поллитрыпересекающихся графиков не обойтись — скорее всего, в точке 128к как раз наступает равновесие.Тут про winapi
Тут про dll
Это не извращение. Это другой способ выполнить ту же задачу.
Вот когда-то давно видел, как на Visual Basic перегоняли из бинарной строки 4 байта в integer путем прохода циклом с получением ASCII кода и умножением-сложением — вот это извращение.
А представить поле данных как массив или структуру — просто другой метод работы с данными.
Вопрос был про volatile, который в контексте работы с периферией, как я понимаю, употребляется там, где железо (через тот же DMA) может что-то переписать. Нет?
Функцию, да.
Так одна инструкция — предельный случай. Для обмена, емнип, есть встроенная функция swap. Байты можно поменять местами через тот же equivalence.