Обсуждаем контроллеры компании Atmel.
Ответить

AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 19:05:12

В общем, компилятор выдает ошибки, типа
Код:
 avr_test.c: In function 'setup':
avr_test.c:5:2: error: 'DDRB' undeclared (first use in this function)
  DDRB |= (1 << PB4);

Что говорит о том что он не видит .h файлы.
Сами .h файлы физически есть, в /usr/avr/include
Когда-то я этот успешно решил, но что я тогда сделал - убей, не помню. где-то в линуксе писал пути к этим бибилиотекам. Пробовал установливать PATH в /usr/avr и /usr/avr/include, но не помогает.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 19:41:03

А почему они там, а не в /usr/lib/avr/include/ ?
Ну можно, конечно, в makefile прописать -I/usr но это как-то странно

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 20:07:37

Что говорит о том что он не видит .h файлы.

Нет. Конкретно сообщение выше говорит о том, что DDRB не определено. Что скорее всего означает, что вы забыли сделать #include <avr/io.h>
Если бы этого файла не было бы, компилятор ругался именно на отсутствие вкладываемого .h файла через #include, что если и было, то вы показали не ту ошибку.

Добавлено after 1 minute 21 second:
PS: Но на всякий случай путь для #include прописывается в переменной окружения CPATH, а не PATH.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 20:12:03

COKPOWEHEU писал(а):А почему они там, а не в /usr/lib/avr/include/

Не знаю, это не я, это пакетный менеджер. А че он там делает, я не разбираюсь.
В любом случае, скопировать их в /usr/lib/avr/include тоже не помогло.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 20:14:08

Shuspano, не с той стороны заходите, не страдайте ерундой. В сообщении об ошибке ни слова о не нахождении .h файла.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 20:15:10

NStorm писал(а):Что скорее всего означает, что вы забыли сделать #include <avr/io.h>

Это слишком просто. Разумеется, я не забыл

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 20:21:00

Значит ключиками компилятора забыли указать -mmcu.

Добавлено after 2 minutes 4 seconds:
Если бы gcc не мог найти файла по #include, он бы ругнулся так:
Код:
fatal error: avr/io.h: No such file or directory

и дальше не стал бы даже пытаться скомпилировать файл!
Значит проблема не в нахождении файла, а в его "содержимом". В данном случае avr/io.h содержит очень много #ifdef зависящих от модели МК, которая как раз передается ключиком -mmcu правильным. Если этого не сделать, файл для компилятора подключится, но окажется условно почти пустым. Поэтому и такие ошибки могут быть.

Добавлено after 2 minutes 41 second:
А, ну еще вариант конечно что -mmcu есть, но там указана модель МК в которой в принципе нет DDRB. Какая-нибудь тинька малоногая, к примеру.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 20:36:34

Во, все. Подключил диск с вендой, скопировал библиотеки от вендового тулчейна. Так больше не ругается. Теперь иначе:
Код:
lester@sex-machine ~/hwd/AVR $ avr-gcc -Os -mmcu=attiny13 avr_test.c
In file included from avr_test.c:2:0:
/usr/avr/include/util/delay.h:90:3: warning: #warning "F_CPU not defined for <util/delay.h>" [-Wcpp]
 # warning "F_CPU not defined for <util/delay.h>"
   ^
avr_test.c:4:0: warning: "F_CPU" redefined [enabled by default]
 #define F_CPU 9600000UL
 ^
In file included from avr_test.c:2:0:
/usr/avr/include/util/delay.h:91:0: note: this is the location of the previous definition
 # define F_CPU 1000000UL
 ^

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 20:44:06

#define F_CPU должен стоять ДО #include <util/delay.h>.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 20:54:18

благодарю, все работает.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Вт мар 30, 2021 22:17:40

#define F_CPU должен стоять ДО #include <util/delay.h>
Вот не надо тащить повсюду ардуинские привычки!
F_CPU должен быть описан в makefile ключом коспилятора, например,
-DF_CPU=12000000

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 06:34:40

COKPOWEHEU, какие нахрен ардуиновские привычки? Когда именно там его и задают в Makefile. Кто сказал, что "должен"?

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 07:44:05

NStorm, те самые, которые заставляют выбирать странные решения.
Представьте, что вы написали библиотеку - придется еще к ней в заголовочный файл вписывать частоту. А потом в один прекрасный момент забудете и будет у вас одна периферия считать что частота камня 1 МГц, а вторая - что 8 МГц.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 08:51:52

COKPOWEHEU, а ничего, что именно в ардуине F_CPU вручную вписывать не надо, оно ключиком -D задается исходя из описалова в boards.txt? Я в курсе, что задавать это лучше в Makefile, только у ТС явно было уже задано в файле, исходя из ошибки.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 09:22:25

Я в курсе, что задавать это лучше в Makefile, только у ТС явно было уже задано в файле, исходя из ошибки.
И поэтому вы вместо того чтобы подсказать "как надо" подсказали "абы как лишь бы работало"?

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 09:38:07

COKPOWEHEU, а ничего, что именно в ардуине F_CPU вручную вписывать не надо, оно ключиком -D задается исходя из описалова в boards.txt?

И кто "скажет" make'у, что нужные дефайны требуется брать из некоего файла?
Более идеальным вариантом было бы Makefile генерировать cmake'ом, но для мелкоты и так сойдет.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 10:10:42

Может есть какой-то правильный способ, я не знаю. Но мне не хочется все усложнять, работает и ладно, и так сойдет.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 11:56:54

COKPOWEHEU, вот вам новые претенденты, до которых можно докопаться:
Изображение

И кто "скажет" make'у, что нужные дефайны требуется брать из некоего файла?

Система сборки IDE генерит Makefile на основе boards.txt. Как там правильнее, пойди расскажи на arduino.cc, это они придумали, а не мы.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 12:31:06

И кто "скажет" make'у, что нужные дефайны требуется брать из некоего файла?
make по умолчанию выполняет скрипт из makefile, ему ничего для этого говорить не надо.
Или вы о чем спрашивали-то? Кто в makefile будет частоту прописывать? Программист, очевидно. Так же как прочие ключи компиляции, имя камня и список исходников.

Re: AVR-GCC (Linux) не видит заголовочные файлы.

Ср мар 31, 2021 17:13:53

Система сборки IDE генерит Makefile на основе boards.txt

В общем, все не как у людей!
Ответить