Jeśli twój kod nie działa, ponieważ prędkość zegara zmniejsza się, brzmi to tak, jakbyś utrzymywał wszystkie przerwane źródła przy życiu (zagnieżdżone przerwy) podczas obsługi procedury przerwania. Z włączonymi przez cały czas wszystkimi przerwaniami, wyskoczysz z jakiegoś kodu i przejdziesz do przerwania wyższego rzędu, jeśli taki wystąpi, powracając do przerwania niższego rzędu, gdy zakończy się przerwa najwyższego rzędu.
Może to prowadzić do poważnych problemów z synchronizacją, jeśli priorytety przerwania nie są odpowiednio zarządzane, szczególnie w przypadku portów komunikacyjnych, takich jak karta SD UART &. Jeśli założymy, że GPIO jest podłączone na zewnątrz twojego pudełka, wtedy przerwy GPIO będą się zdarzać "na życzenie" w rejestratorze danych i nie można ich przewidzieć, więc utrzymywanie tych procedur bardzo krótkich jest korzystne.
Może to prowadzić do ustawienia maksymalnej szybkości przełączania GPIO dla tych zewnętrznych pinów, dzięki czemu kod pozostaje ważny (na przykład maksymalnie 100 Hz na dowolnym zewnętrznym pinie wejściowym i maksymalnie 2 kHz na wszystkich wejściach).
Jeśli chcesz zredukować prąd, pracujesz w trybie aktywnym z wyższą częstotliwością zegara, zmieniając kod tak, aby wszystkie procedury były sterowane zdarzeniami i przechodziły w tryb uśpienia lub oczekiwania na resztę czasu, aby zmniejszyć prąd zasilania. Kilka mikrokontrolerów ma bardzo niski prąd w trybach oczekiwania o 75% trybu aktywnego (wyłączony procesor, włączone urządzenia peryferyjne), ale większość zmniejsza prąd tylko o ~ 20-30% z trybu aktywnego.
Jeden lub dwóch mikro dostawców może nawet utrzymywać urządzenia peryferyjne w trybach głębokiego uśpienia z szybkim wybudzaniem, ale większość mikro zwykle wyłącza wszystkie urządzenia peryferyjne w trybie głębokiego uśpienia i zezwala tylko na GPIO, WDT, POR , BOR lub RTC, aby obudzić mikro.