dobra ok, powiem tak - twój kod z pierwszego postu MUSI działać i działa

mój błąd, że jakoś za szybko rzuciłem okiem na tą twoją funkcję okiem nie zwracając uwagi na zdefiniowaną w niej zmienną automatyczną
Kod:
uint8_t n=0;
ja po prostu raczej pisałem to z myślą o ew użyciu wskaźników do funkcji (callbacku) w takiej twojej funkcji klawisz() i dlatego przy nie zwróceniu uwagi na to n=0 albo może wydało mi się że to też jest u ciebie static (wtedy także by nie działała twoja funkcja), pomyślałem że całkiem coś pokiełbasiłeś - no ale teraz przyjrzałem się temu z rana na świeżo i widzę, że nie .... twoja funkcja z pierwszego postu NORMALNIE DZIAŁA tylko ty masz problem gdzieś indziej....
najbardziej zdziwiło mnie twoje pytanie:
qutrit napisał(a):
Poza tym dlaczego w warunku if(klawisz(plus)) nie mogę wstawić średnika za funkcją bo wyskakuje błąd ?
tzn jak chciałeś to wpisać u siebie tak ????????
Cytuj:
if( klawisz(plus); )
no coś ty ? a co to miałoby znaczyć ? no sam spójrz przecież kompilator słusznie krzyczy że to błąd. Przecież średnik jest po to aby zakończyć linię a ty chcesz go w środku warunku IF dać ?
ale ok .... teraz skupmy się (cały czas trzymając się twojego pierwszego postu) nad tym dlaczego tobie ta twoja własna funkcja klawisz() nie działa a u mnie i teoretycznie i praktycznie działa. Powodów może być kilka, ale lepiej by było gdybyś pokazał większy kawałek tamtego twojego kodu - bo mogę tylko przypuszczać, że:
1. nie dałeś podciągnięcia programowego ani zewnętrznego linii klawisza do VCC, czyli zakładając że u ciebie "plus" to było np:
Kod:
#define plus (1<<PC7)
to nie zrobiłeś w kodzie np:
Kod:
PORTC |= plus; // podciągamy linię klawisza do VCC
wtedy mógł się warunek albo cały czas spełniać albo działać w kratkę bo na wejściu był pływający stan HiZ
być może też masz switcha z jakimś strasznie długimi drganiami albo zepsutego wręcz, i powinieneś był wydłużyć ten czas key_lock zgodnie z opisem na blogu, tyle że też nie powinna ci się wciąż zwiększać zmienna d++ chyba że się tak uparłeś na ten średnik po IF że w rzeczywistości swój kod napisałeś wtedy nieco inaczej niż pokazałeś czyli tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a widać, że kodu tutaj raczej nie kopiowałeś i wklejałeś tylko pisałeś z ręki (tak mi się wydaje) bo napisałeś While zamiast while a tego by ci kompilator też nie przepuścił

więc generalnie w całym kodzie mogłeś zrobić jeszcze więcej błędów

-------------------------------------
No i teraz dalej - bierzemy się za twój drugi post i PIERWSZY przykład - jeśli to jest cały kod main.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
tak nawiasem powiedz mi w czym ty piszesz swoje kody źródłowe ??? przypadkiem nie w AVR Studio dzięki któremu nie widzisz połowy warningów i błędów ??? bo wystarczy spojrzeć na twój kod na górze:
Cytuj:
main();
{
....
średnik w linii z main() ???? a gdzie w ogóle int main(void) { ....
ale ok pisz jak chcesz i w czym chcesz - w każdym bądź razie ten pierwszy przykład z drugiego postu tak samo MUSI działa tylko nie u ciebie bo co ? bo tu już WYRAŹNIE w main.c przynajmniej widać że nie masz podciągnięcia programowego linii klawisza do VCC. No chyba że fizycznie masz tam gdzieś w swoim układzie rezystorami zewnętrznymi podciągniętą tą linię klawisza ????
W każdym bądź razie - pamiętaj - OBA TE przypadki twoje (u ciebie rzekomo nie działające) nie tylko MUSZĄ działać teoretycznie (czyli dobrze sobie to wymyśliłeś)

to jeszcze działają praktycznie bo sam sprawdziłem na swoim podręcznym zestawie ATB - mam teraz z rańca chwilkę czasu.
------------------------------
za to ten przykład na końcu gdzie dałeś key_lock=254; to szok - to by oznaczało jednak że nie zrozumiałeś jak działa ten przykład

... przecież w tym przypadku W OGÓLE ale to w NAJMNIEJSZYM stopniu nie reagujesz na DRGANIA STYKÓW przecież. Więc ten ostatni przykład gdzie niby zrozumiałeś - to jednak jest najgorszy.
uuuff ale się rozpisałem - sprawdź sobie dwa pierwsze tak jak opisałem i wszystko będzie ci działać

i jeśli piszesz w AVR Studio to szybko zamień to na Eclipse
