mokrowski odpowiadając od końca przepraszam Cię, zareagowałem bardzo nieuprzejmie conajmniej. Na swoje usprawiedliwienie mogę dodać że wczoraj był bardzo męczący dzień aczkolwiek to nie jest żadne usprawiedliwienie...
3. brak doświadczenia zdecydowanie cechuję moją osobę, w ciągu ostatnich 3 lat na studiach uczono nas programować w 6 czy 7 językach programowania więc w każdym wiem wystarczająco dużo żeby nie wytrzymywać z nudów czytając książki odnośnie języków programowania, a czasem po prostu miesza się to wszystko i zapomina się o takiej rzeczy jak "&&", a niestety pomimo iż powinni uczyć nas przede wszystkim programować sprzęt to jest to zupełnie pominięte ale za to zrobiłem już ze 3 kalkulatory ...
1-2. to o co zapytałem było elementarne i to nie tylko wg. Ciebie - jest to podstawowa operacja i tłumaczy się to wszędzie jeśli tylko wspomina się o instrukcjach warunkowych niestety dziura w głowie wyżarła tą informację, Twoja odpowiedź faktycznie była staranna i całe szczęście że są jeszcze ludzie którym się chce
Jeszcze odnośnie początkującego - jestem początkującym w AVR ale nie koniecznie w programowaniu, stąd jakaś tam chora ambicja i duma poczuła się dotknięta kiedy zwróciłeś uwagę na konwencję którą raczej znam i zwykle stosuje ale chciałem aby opis problemu był najłatwiejszy z możliwych
0. Co do GND, ehhhh >>westchnął patrząc na swoje rezystory przy przyciskach<<. "Podciąganie programowe" nawet mi nie przyszło do głowy - na szczęście. Element zaskoczenia zawsze jest pozytywny bo sprawdza czujność

nawet jeśli jest zaskoczenie jest niezamierzone.
-1. Co do kodu w asemblerze dzięki za sugestię - byłem, sprawdziłem:)
Faktycznie jestem zdziwiony, ale chyba nie tak jak miałem.
Pozwolę sobie wrzucić tutaj kody w C oraz asemblera wygenerowanego z tych kodów. Dodałem jedynie coś w warunku oraz część else.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i odpowiadający
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
oraz kod oparty na define'ach
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pierwsze moje zaskoczenie dotyczyło instrukcji "call", która wg. specyfikacji atmega8, jeśli dobrze zrozumiałem została usunięta w 2003 roku ze specyfikacji, szczerze powiedziawszy nie wiem co ma to oznaczać tak dokładnie. W sumie zastanawiam się dlaczego usunięto tą instrukcję oraz dlaczego w takim razie kompilator nadal tego używa.
Cytuj:
Removed instructions CALL and JMP from the datasheet.
Kolejna rzecz która mi się podoba w rozwiązaniu z "define" to fakt że omija wszystkie inne warunki jeśli pierwszy powoduje, iż całość się nie powiedzie od razu przeskakując do części else. Poza tym w tych listingach jest mniej więcej to czego się spodziewałem, ale być może nie rozumiem wyższości tych funkcji z tego poziomu.
Postanowiłem jeszcze sprawdzić taki kod, który z punktu widzenia człowieka jest oczywiście bez sensu i aż się prosi aby napisać to lepiej, ale w celach edukacyjnych test odnośnie jakichś usprawnień (wiem że jest to związane z wybranym kompilatorem itd. ale chciałem sprawdzić co się dzieje domyślnie).
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Daje kod wynikowy
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
No i na koniec jest chyba jedno rozwiązanie, które w jakiś tam sposób pogodzi te 2 różne opcje, rozwiązanie które nie wykorzystuje instrukcji call i ret a mimo wszystko daje to możliwości debugowania o czym wspomina
PJS. A tym rozwiązaniem są po prostu funkcje z przedrostkiem inline. W takim przypadku wilk syty i owca cała - chyba.
Dziękuję panom za chęci pomocy pomimo mojej postawy.
Podczas pisania posta (które zajęło dość długo) dostałem ostrzeżenie, przyjmę z pokorą. Mam nadzieję, że będzie mi dane "odpracować w polu" moje zachowanie.
edit. Odnośnie mojego zdziwienia funkcją "call" zdziwienie było spowodowane tym że program był kompilowany pod atmege 16, a specyfikacja w którą patrzyłem była dla atmegi 8 ... po sprawdzeniu kodu wynikowego dla atmegi 8 wszystko w porządku jeśli o to chodzi.