Шаблоны ускоряют Arduino I / O
простым забывать, однако Arduino использует C ++. Как правило, часть C ++ находится в библиотеках, а также в рамках, а также многие люди, как правило, имеют тенденцию кодировать свои основные программы, использующие стиль C, просто используя объекты библиотеки, такие как расширения языка C-языка. [FREDLLLLLL] Совсем недавно выпустил библиотеку шаблона дизайна для ускорения Arduino I / O, а также поделившись на Github.
Если вы когда-либо делали что-либо специальность с Arduino, вы, скорее всего, понимаете, что в то время как DigitalWrite удобно, он имеет большое значение закурс, чтобы убедиться, что PIN-код конфигурации, а также это добавляет накладные расходы на каждый вызов. Версии шаблона дизайна [Fredlllllllllllllllllllllllllllllls могут переключать указать PIN-код в два циклах. Вы можете резать это пополам, если вы не против беспокоить указать другие контакты в точном же порту.
Вы можете использовать постоянную, чтобы включить штифт, как это:
Переключатель <1> ();
Если вам не нравится использовать магические номера (и это умно), вы можете определить постоянную:
const uint8_t ledpin = 1;
SULVERON ();
Поскольку вы, скорее всего, захотите выполнить некоторые элегантные синхронизации, также есть шаблон дизайна NOP, который позволяет вам задержать установленное количество циклов. Вот несколько тестовых кодов из Reddit, который производит квадратную волну на 1,3 МГц, например:
const uint8_t mypin = 5;
недейственная петля () {
CLI (); // отключить прерывания, поскольку они будут облажаться с синхронизацией
делать {
SwitchExclusive (); // 1 цикл
NOP <5> (); // 5 циклов
SwitchOffportOfpin (); // 1 цикл
NOP <3> (); // 3 циклов
} В то время как (1) // прыгайте назад, чтобы сделать 2 цикла
}
Очевидно, что это не максимум, потому что в цикле есть восемь циклов задержки.
Вы не требовались понимать много о шаблонах, чтобы использовать эту библиотеку, однако, если вы хотите понять больше, мы накрыли их в прошлом. Мы отмечали до того, что DigitalWrite около пятидесяти раз медленнее, чем доступ прямой порт, а также другие операции ввода / вывода не намного лучше. Было бы увлекательно проверить, если шаблоны могут сделать другие операции гораздо более эффективными.