Опубликовано: Fri, 24 Feb 2023 08:24:26 GMT
Канал: Программирование микроконтроллеров – Учимся программировать микроконтроллеры
В этой короткой заметке я попытаюсь сравнить три разных микроконтроллера по времени реакции на внешнее прерывание. Дело это интересное, просто потому что иногда микроконтроллер должен реально контролировать и желательно по-быстрее. Ну и конечно, хочется оценить работу шины, прерываний и всего остального.Итак, схема опыта очень проста - будем использовать 3 первые пина порта GPIOA, первый как источник внешнего прерывания (exti0), а 1 и 2 для вывода данных. Хватило бы и одного, но тогда осциллограф, как понимаете, подключать не так удобно - а на скорости кода это не сказывается. Первый пин и второй, естественно, соединим проводком...Будем подавать на второй пин высокий уровень, это вызовет прерывание, сработает обработчик. В нем будем просто выводить 0 на все пины порта GPIOA - а по факту на второй и третий, получается. И цикл повторяется. Код примерно одинаков и для ARM и для RISC-V и приведен ниже.Да, для опытов у нас будет два процессора ARM, обе stm - так уж вышло, они были под руками - stm32f103 и stm32h750, соответственно, первую запустим на 64 МГц, а вторую на 400 МГц (ну на шине будет всё равно 200 МГц). А вот для RISC-V попалось изделие WCH-IC а именно ch32v307 и он будет у нас на 144 МГц. Кстати, в нем реализовано железячное переключение при прерывании с сохранением регистров, так что если постараться, то можно несколько еще ускорить код, выбросив пару-тройку тактов.Однако для эксперимента компилятор был использован с одной и той же опцией оптимизации -Os и никаких трюков не применялось. Код на ассемблере получился примерно похожий, с ньюансами, конечно, но всё же... Жмем!
https://habr.com/ru/post/718818/