Зачем нужен драйвер

Драйвер, применительно к МК, позволяет писать переносимые между различными МК, библиотеки или целые приложения. Это достигается за счет того, что:

  1. Принципиальных различий между различными современными МК немного. Все имеют порты, многорежимные таймеры, USART, SPI, EEPROM и т.п.
  2. Приложению, как правило, не требуются какие-то особенные свойства МК. Требования к аппаратуре всегда можно обобщить. Например проверка состояния ножек порта, установка в заданное состояние, прерывание от таймера по истечении заданного интервала, получение из USART/SPI/TWI/… или запись в USART/SPI/TWI/… байта. Все эти действия можно реализовать почти на любом МК.
  3. С другой стороны, конкретные вышеуказанные действия даже на различных МК одного производителя могут выполняться по-разному. Например у одного МК один SPI-порт, у другого – два. Называются соотвественно по-разному. Поэтому без драйвера пришлось бы существенно перелопатить приложение, выискивая в нем обращения к порту. Но можно обращаться к аппаратуре не непрямую, а через макроопределение или в крайнем случае функцию. Драйвер и есть полное собрание таких определений и функций. А приложение обязано обращаться к ресурсам МК только через него. Таким образом, чтобы портировать приложение на другой МК, достаточно только переписать драйвер. Так и достигается переносимость.

Т.к. большую часть абстрактных (т.е. не привязанных к конкретному МК) функций можно реализовать с помощью макроопределений (фактически правила замены одних фраз на другие), то замедления работы переносимого приложения по сравнению с непереносимым практически не будет. Зато приложению можно будет придать более опрятный и понятный вид.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *