> achja und der Compiler meckert nicht
Bei mir schon (GCC 4.2.4 und GCC 4.3.2), nämlich in der Zeile
1 | if (key_pressed_2(Taster_2))
|
Da meckert er zurecht folgendes:
1 | warning: passing argument 1 of 'key_pressed_2' makes pointer from integer without a cast
|
Hast du vielleicht alle Warnungen des Compilers abgeschaltet? Das sollte
man nicht tun.
> und wie kann man diesen Bug beseitigen, bin relativ neu in Sachen C.
Am besten nur key_pressed_1 statt key_pressed_2 verwenden ;-)
Das Problem: Ein Input-Pin des Controllers ist allgemein definiert durch
einen 8-Bit-Port und eine Bitnummer innerhalb dieses Ports. Da der Input
in der Funktion mehrfach abgefragt wird, muss ihr in irgendweiner Form
eine Referenz auf das abzufragende Bit übergeben werden (du übergibst
aktuell nur den Wert des Bits). C kennt aber leider keine
Bitreferenzen, weswegen man sich anders behelfen muss, bspw.
- indem man eine Referenz auf den Port (in Form eines Zeigers) und die
Bitnummer als zwei Argumente übergibt (so hast du es in
key_pressed_1 getan),
- indem man die Referenz auf den Port und die Bitnummer in eine Struktur
packt, und diese dann als eine Einheit übergibt oder
- indem man eine Zugriffsfunktion für den betreffenden Input definiert
und diese Zugriffsfunktion als Funktionszeiger an die Entprellfunktion
übergibt.
Da die beiden letztgenannten Alternativen nicht viel zur Lesbarkeit
beitragen, wahrscheinlich den Programmcode vergrößern, einiges an
Verständnis über Strukturen bzw. Funktionszeigern erfordern und neue
potenzielle Fehlerquellen darstellen, würde ich an deiner Stelle einfach
das key_pressed_1 weiterverwenden.
Ganz abgesehen davon taugt deine Entprellroutine nicht sehr viel, da sie
nicht viel mehr tut als mit dem delay_ms die Abfragefrequenz zu
reduzieren. Das bringt zwar schon einen gewissen Verbesserungseffekt,
erschlägt aber bei weitem nicht alle möglichen Fälle. Bspw. sind kurze
Kontaktunterbrechungen bei gedrücktem Taster, wie sie bspw. bei
Kurzhubtastern auftreten können, überhaupt nicht abgedeckt.
Nimm dir Peters Kommentar zu Herzen und schau dir die einschlägigen
Artikel dazu an :)