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



Teraz jest 12 lis 2024, o 18:51


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 ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Składnia: [ Pobierz ] [ Ukryj ]
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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

#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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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ł: Brak zidentyfikowanych użytkowników i 2 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