ATNEL tech-forum https://forum.atnel.pl/ |
|
Problem z strukturą https://forum.atnel.pl/topic20848.html |
Strona 1 z 1 |
Autor: | ELEKTRON105 [ 9 cze 2018, o 04:45 ] |
Tytuł: | Problem z strukturą |
Proszę o podpowiedz w czym tkwi błąd lub niezrozumienie do końca struktur. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Mam taki o to kod, w którym to ma się wyświetlać na linijce LED liczba w zależności od x . W tym problem że na lcd jest wyświetlana liczba x ,lecz ni jak się to ma do odwzorowania na pasku led. Jeżeli zamiast x wstawie np. 3 to OK. na linijce jest wyświetlana ta liczba, a jeżeli zamiast niej wpiszę x to jest już zupełnie co innego wyświetlane choć niby to też liczba 3. Czego tu nie kumam w czym problem . Proszę o wskazówkę. |
Autor: | janusz17 [ 9 cze 2018, o 07:27 ] |
Tytuł: | Re: Problem z strukturą |
Na początku przypisujesz zmiennej x wartość zapisaną w ram_cfg.poziom, następnie masz szereg warunków if() gdzie do zmiennej ram_cfg.poziom wpisujesz jakąś inną wartość w zależności od tego , który if jest spełniony. I teraz powinieneś do x wpisać tą nową wartość ram_cfg.poziom. Tymczasem wyświetlasz na LCD wartość x , która była przypisana na samym początku. |
Autor: | Daro69 [ 9 cze 2018, o 07:38 ] |
Tytuł: | Re: Problem z strukturą |
Witam, Chodzi o kolejność. Program jest wykonywany linijka po linijce. 1. ify zapisują do struktury 2. teraz do x zapisz to co jest w strukturze 3. wyświetl x. Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka |
Autor: | ELEKTRON105 [ 9 cze 2018, o 08:02 ] |
Tytuł: | Re: Problem z strukturą |
No dobra może inaczej x =3 ,na wyświetlaczu pokazuje 3 czyli ta sama liczba jest w nawiasie kwadratowym to dlaczego z tablicy jest pobierana zupełnie inną wartość. |
Autor: | janusz17 [ 9 cze 2018, o 08:25 ] |
Tytuł: | Re: Problem z strukturą |
A co w tej tablicy jest zapisane? |
Autor: | ELEKTRON105 [ 9 cze 2018, o 09:09 ] |
Tytuł: | Re: Problem z strukturą |
W tablicy są liczby które mają zapalać ledy na porcie A i tak też działa ale tylko jeżeli wpisze fizycznie jakąś liczbę ale jeżeli za pośrednictwem zmiennej x to już zupełnie inna liczba jest wyświetlana z tablicy. Nie potrafię już jaśniej tego opisać ------------------------ [ Dodano po: 3 minutach ] uint8_t const tablicy[ ] PROGMEM={ 1,2,4,8,16 } Tak wygląda tablica. Nie mam teraz komputera pod ręką żeby skopiować dokładniej kody |
Autor: | andrews [ 9 cze 2018, o 09:46 ] |
Tytuł: | Re: Problem z strukturą |
Jeśli zdefiniowałeś tablicę w pamięci FLASH przy użyciu atrybutu PROGMEM, do odczytu jej elementów musisz użyć makra pgm_read_byte(): język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Opcjonalnie możesz zdefiniować tablicę we FLASH przy użyciu kwalifikatora __flash i odczytywać jej elementy tak, jak masz w tej chwili: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Możesz wybrać, który sposób jest dla Ciebie wygodniejszy |
Autor: | mirekk36 [ 9 cze 2018, o 11:33 ] |
Tytuł: | Re: Problem z strukturą |
a ja od siebie dodam, że poza oczywiście słusznymi uwagami kolegów wyżej, NAJWAŻNIEJSZE to nauczyć się jak TESTOWAĆ własny kod .... bo jeśli piszesz, że masz x=3 a wyświetla ci się CAŁKIEM inna wartość z tej komórki tablicy to oznacza że robisz jakiegoś TRAGICZNEGO BABOLA ... i co ? a gdyby nie było forum to nie da się tego samemu sprawdzić ? No da się i to bardzo prosto albo chociaż zbliżyć się do problemu. OCZYWIŚCIE ZAKŁADAM że ta twoja tablica TabPozytyw[] jest zdefiniowana w pamięci RAM ???? bo jeśli we FLASH - to robisz tego MEGA BABOLA o którym wyżej napisał kolega andrews - czyli nie stosujesz do odczytu pgm_read_byte() UWAGA! język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. i wywalasz na PORTB - i sprawdzasz czy się pokaże na PORTB binarnie liczba 17 .... No toż jeśli mi to zadziała to wiem, że bzdurnie myślałem, że źle tablice obsługuję, że coś nie rozumiem z tablicami - bo działa tak jak ma działać ... TAK czy NIE ? Dzięki temu posunąłem się do przodu z rozwiązaniem zagadki bo wiem, że problem leży gdzie indziej w moim kodzie. TAK TAK wiem - to bardzo prosty i niektórzy powiedzą, że durny test - tymczasem niestety początkujące osoby NAWET takiego testu nie są w stanie wymyślić - więc go podpowiadam. --------------------------------- ok ale co dalej ? no to spójrzmy na ten kod z pierwszego postu Cytuj: uint8_t x = ram_cfg.poziom; // <----- tutaj przypisujesz wartość zmiennej x ze struktury ram_cfg.poziom .... załóżmy że była tam w ram_cfg.poziom wartość = 4 // no to teraz w tej sekcji - wartość ram_cfg.poziom zmieni ci załóżmy wartość na 6 bo załóżmy że STAN4_ON był wysoki // pomijam już fakt, że tu powinny być wszędzie else po pierwszym IF'ie wg mnie if(STAN0_ON)ram_cfg.poziom = 0; if(STAN1_ON)ram_cfg.poziom = 1; if(STAN2_ON)ram_cfg.poziom = 2; if(STAN3_ON)ram_cfg.poziom = 3; if(STAN4_ON)ram_cfg.poziom = 4; if(STAN5_ON)ram_cfg.poziom = 5; if(STAN6_ON)ram_cfg.poziom = 6; if(STAN7_ON)ram_cfg.poziom = 7; // <---- no i teraz czego się spodziewasz ??? jakiej wartości x ??? na pewno będzie to stara wartość jeszcze z przed tych IF'ów PORTB = TabPozytyw[x]; lcd_locate(1,0); lcd_int(x); ------------------------ [ Dodano po: 6 minutach ] a jeśli tablica TabPozytyw() - jest zdefiniowana we Flashu za pomocą PROGMEM to przecież MUSISZ pan to zrobić tak do PORTB |
Autor: | ELEKTRON105 [ 9 cze 2018, o 17:56 ] |
Tytuł: | Re: Problem z strukturą |
Panowie no i oczywiście działa .Wiem to są podstawy i zdaję sobie sprawę że to nawet śmieszne pytać się na forum o takie rzeczy no ale jakoś nie dałem rady znów wpaść na ten ogromy babol . zazdroszczę wam takiej wiedzy ale to też mnie motywuje do dalszej nauki, tej pięknej sztuki jaką jest programowanie w "C". Dziękuję Wam |
Autor: | micky [ 10 cze 2018, o 09:06 ] |
Tytuł: | Re: Problem z strukturą |
W skrócie to: książki, czytać, praktykować |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |