Вопрос

У нас есть простая архитектура:

<Ол>
  • Основной чип (на базе arm9)
  • контроллер PIC
  • PIC связывается с ARM через протокол связи I2C на основе прерываний для передачи данных. Внутри прерывания мы сигнализируем задачу, которая считывает данные со слоя I2C (шины).

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

    Первый вопрос:

    <Ол>
  • Я прав?

  • Если я прав, как этого избежать? ... или мы можем другое решение?

  • Это было полезно?

    Решение

    Иметь какой-то «рабочий поток», иногда называемый потоком ядра, задачей которого является извлечение данных из интерфейса I2C и их буферизация, передача их другим частям вашей системы и т. д. Используйте процедуру прерывания только чтобы разблокировать поток ядра. Таким образом, если есть другие обязанности, которые должна выполнять система, обработчик прерываний не препятствует этому, и вы по-прежнему своевременно получаете данные со своего устройства.

    Другие советы

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top