-
1. Data: 2013-03-26 21:34:57
Temat: avr-gcc - pomijanie "-mmcu" i złe pliki z definicjami
Od: Jakub Rakus <s...@o...pl>
Witajcie,
Jest sobie program na atmega8, coś tam mierzy na ADC, mierzy temp. przez
DS18B20, wyświetla wszystko na 7-segment i przełącza kilka przekaźników.
A problem jest taki - avr-gcc nie wiedzieć czemu (chyba) przy kompilacji
używa nieprawidłowych plików z definicjami rejestrów procesora.
Oczywiście na początku pliku mam #include <avr/io.h>, a kompilator
wywołuje z -mmcu=atmega8. Tylko, że np. taka linijka jest w ogóle pomijana:
ADCSRA = _BV(ADEN)|_BV(ADPS1)|_BV(ADPS2);
Są też błędy (a może raczej braki) przy konfiguracji innych rejestrów
(np. timerów), nie rozpoznaje mi niektórych nazw rejestrów/bitów. IDE
którego używam (CodeBlocks pod Ubuntu), pozwala mi na podejrzenie, w
którym pliku znajdują się definicje użytych nazw rejestrów/bitów - i tu
ciekawostka, wypluwa mi że definicje wziął z pliku ioat94k.h - tak jakby
w ogóle olał parametr mmcu i wybrał sobie pierwszy lepszy plik do
którego odnosi się avr/io.h. Przejrzałem ten plik (ioat94k) dokładnie -
takie nazwy nie są tam zdefiniowane (w końcu to inny procek), dla
porównania podejrzałem w iom8.h - tutaj oczywiście są. Więc faktycznie z
jakiegoś nieznanego mi powodu zostaje wywołany nieprawidłowy plik z
definicjami - dlaczego?
Walczę z tym od wczoraj i skończyły mi się pomysły, próbowałem zmieniać
ustawienia wywołania avr-gcc, ale nie ma efektów.
--
Pozdrawiam
Jakub Rakus
-
2. Data: 2013-03-26 21:49:21
Temat: Re: avr-gcc - pomijanie "-mmcu" i złe pliki z definicjami
Od: Zbych <z...@o...pl>
W dniu 26.03.2013 21:34, Jakub Rakus pisze:
> Witajcie,
>
> Jest sobie program na atmega8, coś tam mierzy na ADC, mierzy temp. przez
> DS18B20, wyświetla wszystko na 7-segment i przełącza kilka przekaźników.
> A problem jest taki - avr-gcc nie wiedzieć czemu (chyba) przy kompilacji
> używa nieprawidłowych plików z definicjami rejestrów procesora.
> Oczywiście na początku pliku mam #include <avr/io.h>, a kompilator
> wywołuje z -mmcu=atmega8. Tylko, że np. taka linijka jest w ogóle pomijana:
> ADCSRA = _BV(ADEN)|_BV(ADPS1)|_BV(ADPS2);
> Są też błędy (a może raczej braki) przy konfiguracji innych rejestrów
> (np. timerów), nie rozpoznaje mi niektórych nazw rejestrów/bitów. IDE
> którego używam (CodeBlocks pod Ubuntu), pozwala mi na podejrzenie, w
> którym pliku znajdują się definicje użytych nazw rejestrów/bitów - i tu
> ciekawostka, wypluwa mi że definicje wziął z pliku ioat94k.h - tak jakby
> w ogóle olał parametr mmcu i wybrał sobie pierwszy lepszy plik do
> którego odnosi się avr/io.h.
-mmcu=xxx, to opcja kompilatora a nie IDE, więc skąd Codeblocks ma
wiedzieć, w którym pliku szukać definicji?
> Walczę z tym od wczoraj i skończyły mi się pomysły, próbowałem zmieniać
> ustawienia wywołania avr-gcc, ale nie ma efektów.
Po prostu przejrzyj plik *.lss i sprawdź, czy kompilator zrobił to co
napisałeś (co niekoniecznie będzie się pokrywało z tym co chciałeś).
-
3. Data: 2013-03-26 22:54:16
Temat: Re: avr-gcc - pomijanie "-mmcu" i złe pliki z definicjami
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Jakub Rakus <s...@o...pl> napisał(a):
> Witajcie,
> Jest sobie program na atmega8, coś tam mierzy na ADC, mierzy temp. przez
> DS18B20, wyświetla wszystko na 7-segment i przełącza kilka przekaźników. A
> problem jest taki - avr-gcc nie wiedzieć czemu (chyba) przy kompilacji
> używa nieprawidłowych plików z definicjami rejestrów procesora. Oczywiście
> na początku pliku mam #include <avr/io.h>, a kompilator wywołuje
> z -mmcu=atmega8. Tylko, że np. taka linijka jest w ogóle
> pomijana: ADCSRA = _BV(ADEN)|_BV(ADPS1)|_BV(ADPS2);
Na pewno? Nie spotkałem się jeszcze z tym, żeby kompilator sobie coś
pomijał. Skąd wiesz, że pimija? W jaki sposób testowałeś?
> Są też błędy (a może raczej braki) przy konfiguracji innych rejestrów (np.
> timerów), nie rozpoznaje mi niektórych nazw rejestrów/bitów.
Jak nie rozpoznaje? Jeśli nie rozpoznaje, to znaczy, że kompilacja kończy
się błędem.
> IDE którego używam (CodeBlocks pod Ubuntu), pozwala mi na podejrzenie, w
> którym pliku znajdują się definicje użytych nazw rejestrów/bitów - i tu
> ciekawostka, wypluwa mi że definicje wziął z pliku ioat94k.h - tak jakby w
> ogóle olał parametr mmcu i wybrał sobie pierwszy lepszy plik do którego
> odnosi się avr/io.h. Przejrzałem ten plik (ioat94k) dokładnie - takie
> nazwy nie są tam zdefiniowane (w końcu to inny procek), dla porównania
> podejrzałem w iom8.h - tutaj oczywiście są. Więc faktycznie z jakiegoś
> nieznanego mi powodu zostaje wywołany nieprawidłowy plik z definicjami -
> dlaczego?
Jest sobie warunek:
#if defined (__AVR_AT94K__)
# include <ioat94k.h>
Nie masz czasem zdefiniowanego __AVR_AT94K__?
> Walczę z tym od wczoraj i skończyły mi się pomysły, próbowałem zmieniać
> ustawienia wywołania avr-gcc, ale nie ma efektów.
Dużo nie wymyślimy bez źródeł, przede wszystkim Makefile.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 2 days, 3 hours, 48 minutes and 21 seconds
-
4. Data: 2013-03-27 21:56:06
Temat: Re: avr-gcc - pomijanie "-mmcu" i złe pliki z definicjami
Od: Jakub Rakus <s...@o...pl>
W dniu 26.03.2013 21:49, Zbych pisze:
>
> -mmcu=xxx, to opcja kompilatora a nie IDE, więc skąd Codeblocks ma
> wiedzieć, w którym pliku szukać definicji?
Ale tą opcje wybieram poprzez ustawienia projektu w IDE i na podstawie
tychże ustawień Codeblocks wywołuje kompilator z odpowiednimi opcjami.
Wszystkie użyte w programie funkcje/zmienne/definicje które są
zdefiniowane/zadeklarowane w plikach innych niż main.c a dołączonych do
niego dyrektywą include mogę sobie podejrzeć prawoklikiem na danej
funkcji/zmiennej/definicji - nie dociekam jak to rozwiązali programiści
piszący IDE, wiem tylko że dopiero po kompilacji mogę robić taki
podgląd, dopóki program nieskompilowany tego podglądu nie ma. Być może
jest tak, że ten podgląd szwankuje, a błąd leży gdzie indziej.
>
> Po prostu przejrzyj plik *.lss i sprawdź, czy kompilator zrobił to co
> napisałeś (co niekoniecznie będzie się pokrywało z tym co chciałeś).
>
Ehh, chciałem tego uniknąć, bo jest spory... no ale zajrzałem i widzę,
że teoretycznie w asemblerze mam jak trzeba, czyli problem leży gdzieś
indziej, tylko nie mam pomysłu gdzie - wiem tylko, że wszystko zaczęło
się tak kaszanić po tym jak dodałem konfigurację timer2 jako PWM,
poprzez dwie proste linijki (na początek żeby widzieć w ogóle przebieg
na nodze):
TCCR2 = _BV(WGM21)|_BV(COM21)|_BV(CS20);
OCR2 = 127;
Z jakiegoś powodu na porcie jest stan niski, konfiguracja pinu PB3/OC2
ustawiona kilka linijek wcześniej jako wyjście z pull-down.
--
Pozdrawiam
Jakub Rakus
-
5. Data: 2013-03-29 16:15:03
Temat: Re: avr-gcc - pomijanie "-mmcu" i złe pliki z definicjami
Od: Kicer <...@...c>
Jakub Rakus wrote:
> W dniu 26.03.2013 21:49, Zbych pisze:
>>
>> -mmcu=xxx, to opcja kompilatora a nie IDE, więc skąd Codeblocks ma
>> wiedzieć, w którym pliku szukać definicji?
>
> Ale tą opcje wybieram poprzez ustawienia projektu w IDE i na podstawie
> tychże ustawień Codeblocks wywołuje kompilator z odpowiednimi opcjami.
Tak jak napisal Zbych, parser w ide nie wie gdzie ma wejść, bo za to
odpowiedzialne jest makro automagicznie tworzone przez kompilator w czasie
kompilacji na podstawie mmcu, a którego ide nie zna. Popatrz sobie jak
wyglądają pliki które includujesz (np io.h) - sa tam dziesiątki ifdefów
sprawdzające obecnosc roznych makr np __AVR_ATtiny4313__ .
pozdrawiam
--
Michał Walenciak
gmail.com kicer86
http://kicer.sileman.net.pl
gg: 3729519