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



Teraz jest 19 kwi 2026, o 13:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 13 lis 2014, o 20:28 
Offline
Nowy

Dołączył(a): 15 paź 2014
Posty: 5
Pomógł: 0

Witam szanownych kolegów

Borykam się od pewnego czasu z regulatorem PID na Atmege8. Atmel dostarcza biblioteki ale wymagają one przeróbek, po dokonaniu kilku okazało się że coś jest nie tak i program się nie kompiluje (gdzieś tkwi błąd), prześledziłem kod i może ktoś bardziej obeznany z językiem będzie w stanie pomóc i wyłapać błąd.
pid_cy.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



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


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


wynik z konsoli
warning: ignoring #pragma vector
../pid_cy.c:67: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
../pid_cy.c: In function 'Get_Reference':
../pid_cy.c:97: warning: implicit declaration of function 'temp_zad'
../pid_cy.c: In function 'Get_Measurement':
../pid_cy.c:109: warning: implicit declaration of function 'ds18b20_ConvertT'
../pid_cy.c:112: warning: implicit declaration of function 'ds18b20_Read'
make: *** [pid_cy.o] Error 1


niepokoi mnie fragment #pragma vector = TIMER0_OVF_vect
__interrupt void TIMER0_OVF_ISR( void )

jak się domyślam jest to związane z przerwaniem tyle że w tej czerwonej linii eclips wskazuje błąd.
Kolejnym pytaniem jest zezwolenie na przerwanie jak się ono odbywa ( linia __enable interrupt ?).


Mam nadzieję że ktoś z was jest w stanie mi pomóc z tym niechlujnym (przez to że jestem nowicjuszem) kodem

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2014, o 21:17 
Offline
Użytkownik

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

Cześć!

Tak analizując kod na szybko poraziła mnie ta funkcja a raczej obsługa przerwania wg. kompilatora IAR

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


Powinno być tak:

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


Oczywiście już nie wnikam czy ciało obsługi przerwania jest poprawne...

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

Kolejny problem to brak pętli głównej programu int main(void) ty masz jakaś funkcję i kompilator za choinkę nie wie gdzie jest owa pętla główna

czyli winno być tak:

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


Co do reszty to nie wypowiadam się bo nie analizowałem dogłębnie bibliotek atmela do PIDa.
Pozdrawiam!

P.S nie widzę nigdzie deklaracji funkcji odpowiedzialnych za obsługę DS18B20 z którego korzystasz w programie a o to też kompilator krzyczy


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2014, o 12:48 
Offline
Nowy

Dołączył(a): 15 paź 2014
Posty: 5
Pomógł: 0

funkcję main mam w innym pliku źródłowym, faktycznie przeoczyłem deklarację funkcji DS18b20.

W dalszym ciągu kompilator wyrzuca
Building target: pid.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,pid.map -mmcu=atmega8 -o "pid.elf" ./ds18b20.o ./hd44780.o ./kbd4x4.o ./main.o ./pid.o ./pid_an.o ./pid_cy.o

./pid_cy.o: In function `__vector_9':
pid_cy.c:(.text+0x0): multiple definition of `__vector_9'
./pid_cy.o:(.bss+0x0): multiple definition of `gFlags'
./pid_cy.o: In function `Set_Input':
pid_cy.c:(.text+0x4e): multiple definition of `Set_Input'
./pid_an.o:pid_an.c:(.text+0xd2): first defined here
./pid_cy.o: In function `Get_Measurement':
pid_cy.c:(.text+0x66): multiple definition of `Get_Measurement'
./pid_cy.o: In function `Get_Reference':
pid_cy.c:(.text+0xd6): multiple definition of `Get_Reference'
./pid_cy.o: In function `Init':
pid_cy.c:(.text+0xde): multiple definition of `Init'
make: *** [pid.elf] Error 1



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2014, o 13:06 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Te błędy oznaczają wielkrotną definicję
Sprawdź we wszystkich plikach czy nie masz
użytych tych samych nazw

_________________
Jestem początkujący i moje porady mogą być błędne



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

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