Вернёмся к этой важной теме.
По итогам переписки с blindman'ом в аське возникли примерно такие идеи:
1. Чтобы изолировать разработку драйверов от компоновки их в устройство нужно, чтобы драйверам система выделяла адресное пространство по регистрам, а они в нём потом работали;
2. Во всех таких устройствах должен быть предопределенный драйвер который всегда есть и он отвечает на запросы о том, какие драйвера установлены, какие у них версии и с какого адреса по какой - их адресное пространство.
3. Кроме информации о том, что драйвер работает в таком-то адресном пространстве должно быть некоторое описание этого драйвера, типа "что это?". И вот тут начинается неопределенность. Можно от 1 байта запользовать под идентификацию типа драйвера до строки + 2 байта - на строковое название драйвера и 2 байта - номер версии и субверсии.
Добавлено спустя 3 минуты 7 секунд:
Такой подход нисколько не усложняет работу с устройствами по сравнению с текущей схемой, когда драйверы располагаются по конкретным адресам. Если мы не хотим писать код, который будет совместим с кучей разных контроллеров - можем прописать в своей программе работающей с контроллером конкретные адреса везде.
Более гибкая схема - сделать эти адреса настраиваемые, или стартовые адреса настраиваемые. Но тогда пользователь сам должен будет следить, чтобы всё было указано правильно.
А если мы предоставляем вот такой инструмент интроспекции, то можно будет сделать удобный визард, который позволит пользователю гораздо проще настраивать софт робота с любым нашим контроллером.