Jako długoletni inżynier oprogramowania wbudowanego muszę powiedzieć, że twoje założenie, że usuwanie błędów odbierze trochę mocy obliczeniowej mojej aplikacji , jest po prostu błędne. To nigdy nie będzie prawdą dla żadnego kompetentnie napisanego oprogramowania.
Oczywiście usunięcie wymaga pewnego przetworzenia. Jednak przetwarzanie jest trywialne, a dla danych wejściowych użytkownika będzie się odbywać z tak małą szybkością aktualizacji, że będzie całkowicie pomijalna. Gdybyś potrzebował odbić wejścia z częstotliwością aktualizacji w dziesiątkach kHz, być może przetwarzanie odbicia byłoby znaczące, ale ludzkie naciśnięcie przycisków nie potrzebuje takiej rozdzielczości. W twoim przypadku próbkowanie 100 Hz byłoby z łatwością wystarczająco szybkie i prawie na pewno można by je obniżyć do poziomu 10 Hz bez poważnego wpływu na interakcję użytkownika.
Jeśli próbujesz przetwarzać dane wejściowe w głównej pętli sterującej działającej z częstotliwością dziesiątek kHz, oczywiście będzie to wysysać moc obliczeniową. Prawidłowym rozwiązaniem jest napisanie oprogramowania układowego, które jednak nie robi tego w ten sposób, a nie używanie rozwiązania sprzętowego do naprawiania anty-wzorca programowego. Odpowiednie użycie timerów i priorytetów przerwań zapewni Ci to, czego potrzebujesz.
Możesz zoptymalizować przetwarzanie, upewniając się, że odczyt z powrotem odbywa się w jednym porcie we / wy. Zakładając, że ustawiasz poziomy w kolumnach i odczytujesz wiersze, następnie bit-AND, bit-shift i bit-OR, aby zbudować 16-bitową wartość dla 16 pinów. XOR to z poprzednią 16-bitową wartością, a jeśli jest różna od zera, coś się zmieniło. Prostym algorytmem odbicia jest po prostu ustawienie licznika na wartość, jeśli piny zmienią stan, wybranie stanu, jeśli piny zachowały swój stan, a licznik jest równy zero, i zmniejszenie, jeśli nie jest to zero.
Oczywiście musisz sprawdzić, czy naciśnięto tylko jeden przycisk. Jeśli masz procesor ARM, ARM ma instrukcję raportowania liczby ustawionych bitów, co jest idealne do tego. Wspominam o dalszej optymalizacji.