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 14 cze 2025, o 16:04


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
    Autor Wiadomość
     Tytuł: Multi_led
    PostNapisane: 28 kwi 2012, o 12:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lis 2011
    Posty: 302
    Lokalizacja: Kraków
    Pomógł: 6

    Dzień dobry.
    Zacząłem przerabiać bibliotekę do obsługi wyświetlacza 7 segmentowego do własnych potrzeb.
    Chciałem zrobić, aby obsługa przerwania timera0 znajdowała się w pliku main.c.
    Zrobiłem, ale mam problem z błędami.
    Wydaje mnie się, że jest to problem z odwołaniem się do tablicy cyfry z pliku main. c do pliku d_led.c.
    Nie wiem jak to wykonać.
    Proszę o pomoc.
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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

    _________________
    Zapraszam:
    filiporlo.blogspot.com



    Ostatnio edytowano 28 kwi 2012, o 13:29 przez filipo96, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 13:04 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    Mam pytanie: czy kolega pobrał sobie aktualizacje kodu źródłowego do multipleksowania wysiwtelacza 7-segmentowego?

    Jak nie to proszę abyś tutaj zajrzał topic27.html.

    Ogólnie to pokaż jakie komunikaty o błędach daje eclipse(bo rozumiem ze z niego korzystasz...).

    Pozdrawiam Michał!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 13:28 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lis 2011
    Posty: 302
    Lokalizacja: Kraków
    Pomógł: 6

    Tak używam eclipse oto błędy.
    **** Build of configuration Release for project 03_Multi_LED ****

    make all
    Building file: ../d_led.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF"d_led.d" -MT"d_led.d" -c -o"d_led.o" "../d_led.c"
    Finished building: ../d_led.c

    Building file: ../main.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
    ../main.c: In function '__vector_10':
    ../main.c:73: warning: implicit declaration of function 'pgm_read_byte'
    ../main.c:73: error: 'cyfry' undeclared (first use in this function)
    ../main.c:73: error: (Each undeclared identifier is reported only once
    ../main.c:73: error: for each function it appears in.)
    make: *** [main.o] Error 1

    _________________
    Zapraszam:
    filiporlo.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 15:15 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    Słuchaj, "wrzuć" procedurę obsługę przerwania z powrotem do pliku d_led.c bo tam znajduje się zmienna tablicowa cyfry, bo jak masz procedurę obsługi przerwania w main.c to kompilator nie widzi tej zmiennej tablicowej cyfry.

    Jak to zrobisz to daj znać o efektach ok?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 15:48 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lis 2011
    Posty: 302
    Lokalizacja: Kraków
    Pomógł: 6

    Właśnie nie chcę mieć obsługi przerwania w d_led.c, lecz w main.c.
    Chciałbym to przerwanie wykorzystać do innych rzeczy.
    Wiem, że są inne, ale chciałbym tak mieć.
    Chciałbym dowiedzieć się jak dostać się z poziomu main.c do tablicy cyfry w d_led.c.

    _________________
    Zapraszam:
    filiporlo.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 15:56 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 lut 2012
    Posty: 243
    Lokalizacja: wlkp
    Pomógł: 2

    Spróbuj dodać przy definicji tablicy specyfikator extern.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 16:03 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lis 2011
    Posty: 302
    Lokalizacja: Kraków
    Pomógł: 6

    Dalej to samo.

    **** Build of configuration Release for project 03_Multi_LED ****

    make all
    Building file: ../d_led.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF"d_led.d" -MT"d_led.d" -c -o"d_led.o" "../d_led.c"
    ../d_led.c:26: warning: 'cyfry' initialized and declared 'extern'
    Finished building: ../d_led.c

    Building file: ../main.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
    ../main.c: In function '__vector_10':
    ../main.c:73: warning: implicit declaration of function 'pgm_read_byte'
    ../main.c:73: error: 'cyfry' undeclared (first use in this function)
    ../main.c:73: error: (Each undeclared identifier is reported only once
    ../main.c:73: error: for each function it appears in.)
    make: *** [main.o] Error 1

    _________________
    Zapraszam:
    filiporlo.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 16:07 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lis 2011
    Posty: 302
    Lokalizacja: Kraków
    Pomógł: 6

    Jak definicję z extern przeniosłem do d_led.h sypnął mniejszą ilością błędów, ale wtedy ma problem z PROGMEM.
    Dobrze było by gdyby ta tablica była by jednak zapisana we FLASH-u.

    **** Build of configuration Release for project 03_Multi_LED ****

    make all
    Building file: ../d_led.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF"d_led.d" -MT"d_led.d" -c -o"d_led.o" "../d_led.c"
    Finished building: ../d_led.c

    Building file: ../main.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
    ../main.c: In function '__vector_10':
    ../main.c:73: warning: implicit declaration of function 'pgm_read_byte'
    Finished building: ../main.c

    Building target: 03_Multi_LED.elf
    Invoking: AVR C Linker
    avr-gcc -Wl,-Map,03_Multi_LED.map -mmcu=atmega32 -o"03_Multi_LED.elf" ./d_led.o ./main.o
    ./main.o: In function `__vector_10':
    main.c:(.text+0x58): undefined reference to `pgm_read_byte'
    make: *** [03_Multi_LED.elf] Error 1

    _________________
    Zapraszam:
    filiporlo.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 17:07 
    Offline
    Moderator
    Avatar użytkownika

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

    Panie kolego kochany ;) autorze .... przecież w pliku d_led.c korzystasz z wbudowanych funkcji pgm_read_byte() ..... i spójrz pan na dołączane pliki nagłówkowe w związku z tym w tym pliku ----> widzisz tam przypadkiem:

    Kod:
    #include <avr/pgmspace.h>


    więc jak myślisz dlaczego masz błędy że nie rozpoznane jest polecenie pgm_read_byte() w main.c ???? hmmmm bo nie masz dołączonego tego pliku w main.c

    Cytuj:
    main.c:(.text+0x58): undefined reference to `pgm_read_byte'


    natomiast jeśli chcesz mieć tablicę widoczną w main.c to wystarczy jej UWAGA!!!! deklarację (czyli ze słówkiem extern) przenieść do d_led.h czyli dodać:

    Kod:
    extern uint8_t cyfry[];


    i zobacz można to zrobić nawet bez specyfikatora PROGMEM ponieważ chodzi tylko o to żeby zasygnalizować że taka nazwa jak cyfry[] znajduje się gdzieś w całym projekcie.

    _________________
    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  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 17:35 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lis 2011
    Posty: 302
    Lokalizacja: Kraków
    Pomógł: 6

    Dziękuję.
    Deklarację przenosiłem, ale zapomniałem, że w taki razie w main.c też muszę dołączyć
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Jeszcze raz dobrze zrozumiałem, że pgmspace.h mam zostawić w d_led.c dopisać do main.c i zostawić PROGMEM przy tablicy?

    _________________
    Zapraszam:
    filiporlo.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 20:46 
    Offline
    Moderator
    Avatar użytkownika

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

    #include <avr/pgmspace.h>

    to trzeba dołączać do tych plików gdzie korzystasz pan z funkcji, które zawarte są w tej bibliotece. Jeśli zatem przenosisz wszystkie linie kodu zawierające funkcje pgm_read_byte() do main.c to jaki sens jest zostawiać tego inkluda w d_led.c ??? chociaż jego pozostawienie i tak nic złego nie narobi przecież ;)

    druga sprawa - już pisałem skoro w pliku d_led.c masz DEFINICJĘ zmiennej tablicowej:

    Kod:
    uint8_t cyfry[] PROGMEM = { ...... }


    no to w pliku nagłówkowym d_led.h, który przecież inkludujesz w main.c możesz dodać DEKLARACJĘ TEJ ZMIENNEJ tak:

    Kod:
    uint8_t cyfry[];


    albo tak:

    Kod:
    uint8_t cyfry[] PROGMEM;


    to żadna różnica bo to tylko deklaracja.


    Ale żebyś nie myślał - że taką DEKLARACJĘ można zrobić tylko i wyłącznie w d_led.h - zamiast tego mógłbyś ją zrobić równie dobrze w main.c ..... tyle że to nie byłoby takie logiczne jeśli chodzi o cały projekt rozumiesz ? ponieważ ona pochodzi jakby z plików d_led.*

    _________________
    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  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 21:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lis 2011
    Posty: 302
    Lokalizacja: Kraków
    Pomógł: 6

    Mnie się wydaje, że jest sens bo w d_led.c używamy słówka PROGMEM przy tablicy cyfry .

    _________________
    Zapraszam:
    filiporlo.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Multi_led
    PostNapisane: 28 kwi 2012, o 21:59 
    Offline
    Moderator
    Avatar użytkownika

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

    filipo96 napisał(a):
    Mnie się wydaje, że jest sens bo w d_led.c używamy słówka PROGMEM przy tablicy cyfry .


    No tak ;) .... i bardzo dobrze

    _________________
    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  
     Tytuł: Re: Multi_led
    PostNapisane: 29 kwi 2012, o 06:35 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lis 2011
    Posty: 302
    Lokalizacja: Kraków
    Pomógł: 6

    Jeszce raz dziękuję za pomoc.

    _________________
    Zapraszam:
    filiporlo.blogspot.com



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 12 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