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 17 lip 2025, o 18:04


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
    Autor Wiadomość
    PostNapisane: 4 lis 2013, o 23:04 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 paź 2011
    Posty: 108
    Pomógł: 0

    hmm, w pliku main.c mam taką strukturę:

    Kod:
    typedef struct {
       uint8_t temp1;
       uint8_t temp2;
       uint8_t min1;
       uint8_t min2;
       uint8_t hist;
    }ST;


    oczywiście przepisałem je do ramu

    Kod:
    //ST eep_dane EEMEM;
    //ST ram_dane;


    Dwie z tych zmiennych muszę zmieniać w funkcjach znajdujących się w innym pliku projektu. W tej chwili realizuję to przez zmienne pomocnicze, jednak wolałbym operować bezpośrednio na np. ram_dane.hist. Jak to zrobić ?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 lis 2013, o 00:20 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 05 sty 2013
    Posty: 272
    Pomógł: 3

    A gdzie je definiujesz? Bo jeżeli są globalne to powinieneś mieć dostęp.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 lis 2013, o 08:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 paź 2011
    Posty: 108
    Pomógł: 0

    jak umieszczam całość czyli:

    Kod:
    typedef struct {
       uint8_t temp1;
       uint8_t temp2;
       uint8_t min1;
       uint8_t min2;
       uint8_t hist;
    }ST;

    ST eep_dane EEMEM;
    ST ram_dane;


    w pliku nagłówkowym , to kompilator zgłasza błąd:

    " multiple definition of `eep_dane'"

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 lis 2013, o 10:32 
    Offline
    Moderator
    Avatar użytkownika

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

    ixxl napisał(a):
    w pliku nagłówkowym , to kompilator zgłasza błąd:

    " multiple definition of `eep_dane'"


    A czytałeś w Bluebooku co to jest DEFINICJA a co to jest DEKLARACJA zmiennych ? Bo to od razu rozwiązałoby ci sprawę ...

    Tak samo o podziale projektu na pliki - tym bardziej że masz tam ładną tabelkę i pokazane jak to robić...

    Bez zrozumienia różnicy co to deklaracja a co to definicja zmiennych wciąż będziesz miał z tym problemy.

    _________________
    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: 5 lis 2013, o 19:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 paź 2011
    Posty: 108
    Pomógł: 0

    Mirku, oczywiście (albo wydaje mi się) wiem co to jest deklaracja i definicja. Ze zwykłymi zmiennymi nie mam problemu. Jednak pierwszy raz zmierzyłem się na poważnie ze strukturami i się zgubiłem :(

    z tego co rozumiem , to

    Kod:
    typedef struct {
       uint8_t temp1;
       uint8_t temp2;
       uint8_t min1;
       uint8_t min2;
       uint8_t hist;
    }ST;


    jest definicja typu strukturalnego , natomiast

    Kod:
    ST eep_dane EEMEM;
    ST ram_dane;


    deklaracja zmiennych ?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 lis 2013, o 01:35 
    Offline
    Moderator
    Avatar użytkownika

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

    ixxl napisał(a):
    Kod:
    ST eep_dane EEMEM;
    ST ram_dane;


    deklaracja zmiennych ?


    no widzisz ;) ... nie nie nie .... to jest panie DEFINICJA zmiennych .... toż definiujesz je w pliku *.c (źródłowym) i od razu kompilator rezerwuje pamięć

    więc przypomnij sobie jednak z bluebooka bo jak widzisz miałem rację że będzie się to ciągnąć za tobą ....

    tak jak mówi kolega wyżej

    a gdy dasz to w pliku nagłówkowym ale ze specyfikatorem extern to dopiero będzie DEKLARACJA bo wtedy kompilator nie rezerwuje pamięci na te zmienne tylko rozgłasza ich nazwy w innych modułach gdy się inkluduje plik *.h

    czyli:

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


    w tym samym pliku nagłówkowym oczywiście umieść swoją definicję typu ST (chociaż nazwa typu dwu-literowa to też mega porażka) ale dasz dłuższą i coś mówiącą nazwę i będzie ok ;)

    _________________
    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 19 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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO