Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Проектирование драйверов ADC: блокирующие vs неблокирующие опросы

В нашей предыдущей статье мы исследовали, как хорошо структурированный интерфейс может отделять низкоуровневые детали драйвера от прикладной логики, повышая масштабируемость и переносимость через аппаратные платформы.

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

Блокирующие vs Неблокирующие драйверы

При создании драйвера микроконтроллера разработчик должен решить, будет ли API блокировать выполнение до завершения операции. Блокирующий драйвер останавливает программный поток, гарантируя, что последующий код запускается только после завершения задачи. Классический пример — UART-backed printf:

printf("Hello World!"); 

С блокирующим UART драйвером строка, следующая за этим вызовом, не запустится, пока 12-байтная строка (96 бит) не будет полностью передана. Фактическая задержка зависит от бодрейта: на 1 Мбит/с блок длится примерно 96 мкс; на 9.6 кбит/с он растягивается до около 10 мс.

Наоборот, неблокирующий драйвер инициирует передачу и немедленно возвращает управление приложению. UART может затем продолжать обработку, пока данные стримятся наружу, обычно через прерывания, DMA или буфер передачи. Этот подход улучшает эффективность в контекстах, чувствительных к задержкам, но добавляет сложность драйверу и приложению.

Выбор правильной модели зависит от временных требований приложения и аппаратной конфигурации. Для высокоскоростных UART (например, 1 Мбит/с) накладные расходы неблокирующего дизайна могут перевешивать его выгоды. Для более медленных связей (например, 9.6 кбит/с) неблокирующий драйвер может разблокировать значительные приросты производительности с управляемой добавленной сложностью.

Архитектурирование драйвера ADC

Надежный драйвер ADC обычно состоит из трех слоев:

Низкоуровневый драйвер предоставляет Hardware Abstraction Layer (HAL) с лаконичным, повторно используемым API. Примеры из реальных проектов включают:

Эти API позволяют прямолинейную инициализацию, контроль конверсии и опрос статуса. Помощники доступа к регистрам позволяют разработчикам расширять HAL для кастомных функций, таких как одноканальные конверсии, без раздувания публичного API.

Реализация простого блокирующего драйвера ADC

Минимальный блокирующий драйвер может экспонировать единственную рутину Adc_Sample, которая запускает железо, ждет завершения и копирует результат в буфер, предоставленный вызывающим. Код ниже демонстрирует основную идею:

Проектирование драйверов ADC: блокирующие vs неблокирующие опросы

Цикл while блокирует до возврата true Adc_ConversionComplete, после чего драйвер читает регистры конверсии и сохраняет сэмплы.

Преобразование в неблокирующий драйвер ADC

Переключение на неблокирующую модель требует небольшого изменения в API: вызывающий теперь получает флаг статуса и должен опрашивать завершение. Обновленная функция может выглядеть так:

Проектирование драйверов ADC: блокирующие vs неблокирующие опросы

В приложении типичная последовательность становится:

Adc_Sample(); while (!Adc_ConversionComplete()) { // Выполнить другие задачи } // Прочитать результаты 

Этот подход освобождает CPU для выполнения несвязанного кода, пока ADC железо завершает свою конверсию.

Выводы

И блокирующие, и неблокирующие драйверы ADC имеют четкие преимущества:

В следующем посте мы расширим это обсуждение, демонстрируя прерывания-базированный драйвер ADC, который дальше развязывает сенсорное приобретение от прикладной логики.

Встроенный

  1. Полное руководство по типам датчиков и их схемам
  2. Bulgin запускает тонкие фотоэлектрические датчики для доступной интеграции IIoT
  3. ams освещает Sensors Expo 2019 передовой демонстрацией оптических сенсоров
  4. DATA MODUL расширяет линейку сенсоров касания новыми PCAP‑системами LG Innotek 40″–86″
  5. Contrinex 2020: облачные сенсоры и Bluetooth light curtains для безопасности
  6. Интегрированные драйверы упрощают дизайн высокомощных шаговых двигателей
  7. Создание аудио-эффектов, управляемых датчиками, с набором Satellite CCRMA
  8. Измерение аналоговых датчиков на Raspberry Pi с одним GPIO-пином
  9. Подключение, калибровка и программирование PIR-датчика HC‑SR501 с Raspberry Pi
  10. IoT-датчики революционизируют мониторинг загрязнения воздуха и охрану общественного здоровья