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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 11 lip 2025, o 19:30


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 25 wrz 2018, o 15:24 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    zubik napisał(a):
    if(a <= sizeof &tab_menu)a++;

    A co to tutaj sobie kolega wymyślił ? Co to ma niby wg ciebie oznaczać to sizeof w tej linijce ?

    _________________
    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 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2018, o 16:26 
    Offline
    Użytkownik

    Dołączył(a): 10 lip 2015
    Posty: 334
    Pomógł: 32

    sizeof(tab_menu) - wyliczy wielkość tablicy.
    Nazwa tablicy jest wskaźnikiem na nią.



    Ostatnio edytowano 25 wrz 2018, o 16:41 przez HomoChemicus, łącznie edytowano 2 razy

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2018, o 16:30 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    zubik napisał(a):
    Hmmmm myślałem że jak pobiorę adres tablicy to sizeof bez problemu wyliczy jej koniec. Czyli trzeba na nią ustawić wskaźnik i dopiero wtedy wyliczać rozmiar

    Troszkę karkołomnie jak dla mnie podchodzisz do tematu. Z jednej strony tablica jest wielowymiarowa - więc nie ma tak hej-hop z sizeof a szczególnie jak chodzi o stringi - a jak domniemuję ty tak w ogóle chcesz sizeo'em dostać jeszcze "gwiazdkę z nieba" czyli rozmiar jednego z wymiarów tej tablicy - pewnie się da ale nie tak.

    Zamiast tego powołaj że sobie pan zmienną idx i za jej pomocą chodź po tablicy, uprzednio definiując sobie jakąś stałą mówiącą o tym ile masz pozycji menu

    _________________
    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 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2018, o 19:05 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

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

    Po pierwsze chciałbym zwrócić uwagę, że ustalając wartość MAX_TAB_STR nie uwzględniłeś znaku terminującego ('\0'), który jest automatycznie dołączany przez kompilator. MAX_TAB_STR powinno być w Twoim przypadku równe 18 (chyba, że ta spacja na końcu "AUTO FULL POMIAR " to pomyłka).
    Po drugie, definiując w ten sposób tablicę uzyskasz taki efekt, że kiedy dodasz bardzo krótki ciąg znaków, i tak zajmie on 18 bajtów.

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


    W ten sposób uzyskasz tablicę tab_menu umieszczoną we FLASH zawierającą wskaźniki do ciągów znaków we FLASH.
    Przykładowe użycie tej tablicy:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Nie musisz obliczać, jaką wartość przypisać do MAX_TAB_STR i dodatkowo każdy ciąg znaków zajmuje tylko tyle miejsca we FLASH ile jest konieczne. Wadą jest to, że tracisz dodatkowe 2 bajty (potrzebne na wskaźnik) na każdy dodany ciąg znaków.



    Ostatnio edytowano 25 wrz 2018, o 19:26 przez andrews, łącznie edytowano 2 razy

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2018, o 19:23 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Jak chcesz mogę spróbować odtworzyć ten usunięty post. Nie chciałem Ci psuć zabawy ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2018, o 19:45 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    zubik napisał(a):
    Pewnie będę chciał zobaczyć twoją funkcję ale wpierw pokażę swoje wypociny

    ..a ja się już pospieszyłem i przywróciłem...
    Może już tak zostawmy, po prostu tego nie czytaj :)

    zubik napisał(a):
    Cytuj:
    Po drugie, definiując w ten sposób tablicę uzyskasz taki efekt, że kiedy dodasz bardzo krótki ciąg znaków, i tak zajmie on 18 bajtów.


    Hmm w sumie wiedziałem o tym ale uznałem że flascha mam pod dostatkiem jednak nie jest to eleganckie rozwiązanie


    Niezupełnie o to mi chodziło, że to nieeleganckie rozwiązanie. To, które rozwiązanie jest lepsze, zależy od tego, na jakich danych operujesz.
    Jeśli masz ciągi znaków o bardzo zbliżonej długości, to Twoje rozwiązanie może być lepsze, bo nie potrzebujesz tablicy dodatkowych wskaźników.
    Jeśli ciągi znaków znacznie różnią się długością, lepiej zrobić tak jak pokazałem. Trzeba to po prostu przekalkulować...

    Jeśli masz mało ciągów i dużo FLASHa, to obydwa rozwiązania są dobre ;)


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2018, o 23:37 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    nie obraź się ale hmmm masakra trochę ..... to IF'owanie nazw

    posługiwanie się indeksami jest nie tylko szybsze, wygodniejsze ale i optymalniejsze ;)

    Nie wspominając o tym, że wciąż popełniasz karygodne błędy o których wspomniał andrews - ten twój sposób definiowania napisów ....

    _________________
    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 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 wrz 2018, o 05:50 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Zdecydowanie przekombinowałeś ;)

    Kod, który napisałeś ma za zadanie obliczyć ilość ciągów w tablicy, czyli jej pierwszy wymiar. Miałoby to sens, gdyby rozmiar tablicy zmieniał się w trakcie wykonywania programu, a przecież tak nie jest. W tym przypadku ilość ciągów można obliczyć na etapie kompilacji, nie trzeba angażować do tego celu mikrokontrolera.

    zubik napisał(a):
    Cytuj:
    sizeof(tab_menu) - wyliczy wielkość tablicy.
    Nazwa tablicy jest wskaźnikiem na nią.

    Tak ale moja tablica jest dwuwymiarowa


    W niczym to nie przeszkadza. Nadal możesz zlecić kompilatorowi, aby obliczył pierwszy wymiar (czyli ilość ciągów w tablicy) na etapie kompilacji na przykład tak:
    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: 26 wrz 2018, o 10:04 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    To oczywiste, że masz taki błąd, bo masz definicję tablicy w jednym pliku, a sizeof pewnie używasz w innym pliku źródłowym, w którym widoczna jest jako typ niekompletny (extern).
    Możesz sobie np. stworzyć doidatkową zmienną w pliku, w którym masz zdefiniowaną tablicę:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    a w pliku nagłówkowym "napisy.h" dodać:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Stała strings_count będzie wtedy zwierać wartość oznaczającą pierwszy wymiar tablicy tab_menu, czyli liczbę ciągów i będzie dostępna w innych plikach źródłowych.



    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: 9 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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


    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO