Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 lip 2026, o 16:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 30 lis 2014, o 23:22 
Offline
Użytkownik

Dołączył(a): 11 maja 2014
Posty: 59
Pomógł: 3

Czy można zapisać poniższy kod z użyciem polecenia case ?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2014, o 23:31 
Offline
Użytkownik

Dołączył(a): 11 maja 2014
Posty: 59
Pomógł: 3

Dzięki za szybką odpowiedź

Ja mam takich warunków if 16 i porostu myślałem że mogę jakoś uprościć mój kod, ale z tego co widzę to zamiast 16 linijek ten warunek miałby 160.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2014, o 00:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

michal98 napisał(a):
(...) ale z tego co widzę to zamiast 16 linijek ten warunek miałby 160.

Możesz jeszcze spróbować napisać taką funkcję:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



ewentualnie taką:
definicja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



zastosowanie w kodzie dla funkcji czy_jest_w_zakresie_tab():
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mam nadzieję, że nic nie pomieszałem.

Pozdrawiam! j23 Jarek

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2014, o 01:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

W gcc można użyć takiej konstrukcji
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2014, o 19:18 
Offline
Użytkownik

Dołączył(a): 11 maja 2014
Posty: 59
Pomógł: 3

Dziękuję za pomoc.

Potrzebowałem tego gdyż programowałem obsługę keypada 4x4 nota katalogowajednym pinem procesora za pomocą ADC. Potrzebowałem użyć zakresu liczb, gdyż jak wiadomo rezystory mogą minimalnie zmieniać swoją rezystancję np. pod wpływem temperatury.

Kod który napisałem :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A oto schemat stworzony w Eagle'u

Obrazek

p1 : Czy kod w C jest napisany poprawnie, bez jakichś błędów których ja nie widzę z uwagi na to, że jestem początkujący ?
p2 : Czy połączenia na schemacie są wykonane prawidłowo ?


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2014, o 20:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Napisałeś

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Źle musisz podać typ argumentu. Ta funkcja będzie korzystała z argumentu typu void. To po pierwsze. Po drugie w funkcji sprawdz() napisałeś

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A więc funkcja zawsze zwróci 0. Napisz tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po trzecie.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ten warunek jest błędy. Kolega jacekk232 wielokropek podał dla przykładu. Musisz to zmienić :)

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2014, o 20:22 
Offline
Użytkownik

Dołączył(a): 11 maja 2014
Posty: 59
Pomógł: 3

Dzięki za odpowiedź.

Zmieniłem typ funkcji z uint8_t na void i usunąłem "return 0;" nie potrzebuje nic zwracać, ponieważ ta funkcja zapisuje wynik do zmiennej globalnej "key"

Warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

działa prawidłowo, a zapisany w każdy inny sposób eclipse podkreśla na pomarańczowo z błędem "Syntax error"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2014, o 20:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

michal98 napisał(a):
działa prawidłowo, a zapisany w każdy inny sposób eclipse podkreśla na pomarańczowo z błędem "Syntax error"


"Każdy inny sposób" tzn. jak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2014, o 20:42 
Offline
Użytkownik

Dołączył(a): 11 maja 2014
Posty: 59
Pomógł: 3

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2014, o 22:19 
Offline
Użytkownik

Dołączył(a): 11 maja 2014
Posty: 59
Pomógł: 3

mokrowski napisał(a):
Powiem wprost.. proszę ... nie pisz takiego kodu! Co z tego że inni piszą jeszcze gorszy (np. tasiemiec switch-case który wyłącza i włącza diody... )

W programowaniu obowiązuje zasada że kod który się powtarza, łamie regułę DRY (ang. Don't Repeat Yourself). U Ciebie jest ,,stado swirch-case" a możesz to zrobić bardzo prosto definiując tablicę z wartościami każdego z warunków i sprawdzając czy dane mieszczą się w zakresie. Indeks dopasowanej komórki tablicy to numer klawisza. Prosto, łatwo i skutecznie bez ,,tasiemca" z switch-case. Zwykłe for po tablicy z 1 if a w środku break po dopasowaniu! I kod mniejszy i szybciej będzie działało niż to.. coś....

PS. Jak miałbym wskazać jaką konstrukcję usunąć z C, to było by to switch-case. W 99% można zastąpić ją czytelniejszym if lub tablicą. Twój przypadek nie należy do tego 1% :-)

PS2. No i jeszcze kwiatki ze zmienną globalną.. eh..

Jaka jest objętość wsadu do MCU teraz? Jak poprawisz na tablicę i przemyślisz zwracanie klawisza w metodzie sprawdz, to zobaczysz że kod _bardzo_ zmaleje :-)



Bardzo dziękuję za uwagę i inną propozycję rozwiązania mojego problemu. Powiem szczerze, że nie podobało mi się wersja z poleceniem case ale nie wpadłem na inne rozwiązanie :D
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kod z instrukcją case zajmował 1646b, a kod z tablicą i instrukcją for 1438b.

Proszę jeszcze o komentarz odnośnie schematu w eagle'u :)
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO