Я использую ARM Cortex M4, и я хочу спросить, можно ли выгрузить основные задачи обработки формы и разрешить им работать в фоновом режиме.Задачи связи с микроконтроллером в фоновом режиме
Например, я использую на ARM MCU это периферия:
- ADC
- I2C
- UART
- SPI
Когда adc_start (ADC); , ADC запускает преобразование в фоновом режиме, поэтому мне не нужно ждать, пока ADC завершит преобразование, и я могу перейти к следующей версии, а затем прочитать результат ADC.
Я хочу спросить, можно ли сделать то же самое с периферийными устройствами связи. I2C и SPI могут быть быстрыми, но поскольку эти типы микроконтроллеров могут достигать 50 МГц и более, это отходы от скорости MCU, если мне нужно подождать, пока I2C не закончит передачу на 400 кГц или SPI с частотой 20 МГц или хуже с UART. Кроме того, если я выполняю некоторые задачи, и я не хочу их прерывать, мне нужно иметь возможность выгружать MCU из любых прерываний из периферийных устройств и позволять им получать пакеты, накапливать их и когда мне нужно их читать.
Возможно что-то подобное?
Прерывания - это ключ, чтобы избежать потери времени процессора, ожидая событий - особенно когда у вас много аппаратных событий. Не программируйте мелочи аппаратных событий в 'main'. Пусть прерывания обрабатывают это и помещают главную или выполняют обратный вызов, когда задача имеет вывод, относящийся к основному потоку, например, когда результат преобразования АЦП имеет результат или когда последовательный ввод имеет полное буферизированное сообщение или буферизованный последовательный выход завершил передачу. Но вопрос слишком широк, чтобы легко ответить. –