No i tu kolega zrobił małą skuchę - od razu mówię.... tzn dlaczego czasem moi szanowni czytelnicy nie zaglądają do kodów na płycie DVD ???? Ja kody w książce traktuję nieco luźniej - one mają służyć tylko do wyjaśnienia pewnych zagadnień. Czasem niestety przy takiej okazji zdarzy się drobny błąd lub niedomówienie jak np w rozdziale o ADC - proszę sobie np przeczytać to:
http://atnel.pl/domyslna-promocja-do-typu-int.htmlale ok - przejdźmy do problemu kolegi sirk77 i rozwiążmy go do końca
Proszę spojrzeć jaki nagłówek funkcji SuperDebounce znajduje się na płycie DVD:
Cytuj:
void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,
uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,
void (*push_proc)(void), void (*rep_proc)(void) );
Widzi kolega tutaj zasadniczą różnicę ??? wprowadzony został dodatkowy parametr. Jego opis przy funkcji na DVD wygląda tak:
Cytuj:
/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************
* AUTOR: Mirosław Kardaś
* ZALETY:
* - nie wprowadza najmniejszego spowalnienia
* - posiada funkcję REPEAT (powtarzanie akcji dla dłużej wciśniętego przycisku)
* - można przydzielić różne akcje dla trybu REPEAT i pojedynczego kliknięcia
* - można przydzielić tylko jedną akcję wtedy w miejsce drugiej przekazujemy 0 (NULL)
*
* Wymagania:
* Timer programowy utworzony w oparciu o Timer sprzętowy (przerwanie 100Hz)
*
* Parametry wejściowe:
* *key_state - wskaźnik na zmienną w pamięci RAM (1 bajt)
* *KPIN - nazwa PINx portu na którym umieszczony jest klawisz, np: PINB
* key_mask - maska klawisza np: (1<<PB3)
* rep_time - czas powtarzania funkcji rep_proc w trybie REPEAT
* rep_wait - czas oczekiwania do przejścia do trybu REPEAT
* push_proc - wskaźnik do własnej funkcji wywoływanej raz po zwolenieniu przycisku
* rep_proc - wskaźnik do własnej funkcji wykonywanej w trybie REPEAT
**************************************************************************************/
A przykład wykorzystania funkcji w main wygląda tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Widzi kolega te dwie różne zmienne o nazwach k1 i k2 ??? to właśnie te dwa różne bajty w pamięci RAM na potrzeby pracy każdego wywołania funkcji SuperDebounce. Można bowiem powiedzieć, że tutaj funkcja SuperDebounce działa prawie jak obiekt
w języku wyższego rzędu. I każda instancja obiektu potrzebuje swojego kawałka RAM na przechowywanie stanów. Jeśli tego nie ma i kod jest tylko taki jak z książki, to rzeczywiście funkcja będzie działać poprawnie TYLKO na dla JEDNEGO klawisza i nie ma znaczenia czy na tym samym porcie czy nie
ale jeśli użyjemy tej wersji z DVD to proszę bardzo "hulaj dusza" - można jej używać dla dowolnej ilości klawiszy i na dowolnych pinach i portach. Proszę sobie TO właśnie sprawdzić. Mówiąc TO mam na myśli kod na płycie DVD - OK?
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]