LINUX.ORG.RU

#include

 


1

1

Здравствуйте. Система Open Suse Leap 15.0. Установил avr-gcc (SUSE Linux) 7.3.1 20180323 [gcc-7-branch revision 258812], avr-libc. Пытаюсь скомпилировать исходник на си, выдает ошибку: d.c:2:10:

fatal error: avr/io.h: No such file or directory
 #include <avr/io.h>
          ^~~~~~~~~~
compilation terminated.
Нашел файл io.h: 
find /usr/ -name io.h | grep avr
find: ‘/usr/share/polkit-1/rules.d’: Отказано в доступе
/usr/src/linux-4.4.159-73/arch/avr32/include/asm/io.h
/usr/src/linux-4.4.159-73/arch/avr32/mach-at32ap/include/mach/io.h
/usr/avr/sys-root/include/avr/io.h
При компиляции добавил опцию -l с описанием последнего пути выданного find, все равно таже ошибка. Пожалуйста, помогите.



Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от mickey_mouse

message стало меньше

Попробуй всё-таки грепнуть:

$ cd /usr/avr/sys-root/include
$ grep -r "#define F_CPU" *.h
$ grep -r "#define TCCR0" *.h
$ grep -r "#define TIMSK" *.h

Deleted
()
Ответ на: комментарий от mickey_mouse

ни один из grep's ни чего не нашел.

Плохо. Значит всё это ты должен определить сам. Гони на github.com, вбивай в поиск avr и ищи что-то подходящее.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

«вбивай в поиск avr». Please, можно поконкретнее. avr - слишком неопределенно (и схемотехника, и программирование).

mickey_mouse
() автор топика
Ответ на: комментарий от mickey_mouse

«вбивай в поиск avr».

Ну вбей «gcc-avr» и выбери «C» или «C++»

Deleted
()
Ответ на: комментарий от Deleted

Маловероятно, но есть ещё вариант же, что между define и самим именем стоит не пробел, а там или несколько даже и потому не грепает. Стоит искать по чему-то вроде grep -P "#define[\t\s]*F_CPU" (ну и с остальными так же соответственно).

Reineke
()
Ответ на: комментарий от Deleted

Сделал простую операцию, вместо «cd /usr/avr/sys-root/include» ввел «cd /usr/avr/sys-root/include/avr»

grep -r "#define TIMSK" *.h
io1200.h:#define TIMSK  _SFR_IO8(0x39)
io2313.h:#define TIMSK  _SFR_IO8(0x39)
io2323.h:#define TIMSK  _SFR_IO8(0x39)
io2333.h:#define TIMSK  _SFR_IO8(0x39)
io2343.h:#define TIMSK  _SFR_IO8(0x39)
io43u32x.h:#define TIMSK        _SFR_IO8(0x39)
io43u35x.h:#define TIMSK        _SFR_IO8(0x39)
io4414.h:#define TIMSK  _SFR_IO8(0x39)
io4433.h:#define TIMSK  _SFR_IO8(0x39)
io4434.h:#define TIMSK  _SFR_IO8(0x39)
io76c711.h:#define TIMSK        _SFR_IO8(0x37)
io8515.h:#define TIMSK  _SFR_IO8(0x39)
io8534.h:#define TIMSK  _SFR_IO8(0x39)
io8535.h:#define TIMSK  _SFR_IO8(0x39)
io90pwm161.h:#define TIMSK1  _SFR_IO8(0x01)
io90pwm1.h:#define TIMSK0  _SFR_MEM8(0x6E)
io90pwm1.h:#define TIMSK1  _SFR_MEM8(0x6F)
io90pwm216.h:#define TIMSK0  _SFR_MEM8(0x6E)
io90pwm216.h:#define TIMSK1  _SFR_MEM8(0x6F)
io90pwm2b.h:#define TIMSK0 _SFR_MEM8(0x6E)
io90pwm2b.h:#define TIMSK1 _SFR_MEM8(0x6F)
io90pwm316.h:#define TIMSK0  _SFR_MEM8(0x6E)
io90pwm316.h:#define TIMSK1  _SFR_MEM8(0x6F)
io90pwm3b.h:#define TIMSK0 _SFR_MEM8(0x6E)
io90pwm3b.h:#define TIMSK1 _SFR_MEM8(0x6F)
io90pwm81.h:#define TIMSK1 _SFR_IO8(0x01)
io90pwmx.h:#define TIMSK0  _SFR_MEM8(0x6E)
io90pwmx.h:#define TIMSK1  _SFR_MEM8(0x6F)
io90scr100.h:#define TIMSK0 _SFR_MEM8(0x6E)
io90scr100.h:#define TIMSK1 _SFR_MEM8(0x6F)
io90scr100.h:#define TIMSK2 _SFR_MEM8(0x70)
ioa5272.h:#define TIMSK0  _SFR_MEM8(0x6E)
ioa5272.h:#define TIMSK1  _SFR_MEM8(0x6F)
ioa5505.h:#define TIMSK0  _SFR_MEM8(0x6E)
ioa5505.h:#define TIMSK1  _SFR_MEM8(0x6F)
ioa6612c.h:#define TIMSK0  _SFR_MEM8(0x6E)
ioa6612c.h:#define TIMSK1  _SFR_MEM8(0x6F)
ioa6612c.h:#define TIMSK2  _SFR_MEM8(0x70)
ioa6613c.h:#define TIMSK0  _SFR_MEM8(0x6E)
ioa6613c.h:#define TIMSK1  _SFR_MEM8(0x6F)
ioa6613c.h:#define TIMSK2  _SFR_MEM8(0x70)
ioa6614q.h:#define TIMSK0  _SFR_MEM8(0x6E)
ioa6614q.h:#define TIMSK1  _SFR_MEM8(0x6F)
ioa6614q.h:#define TIMSK2  _SFR_MEM8(0x70)
ioa6616c.h:#define TIMSK0  _SFR_MEM8(0x6E)
ioa6616c.h:#define TIMSK1  _SFR_MEM8(0x6F)
ioa6617c.h:#define TIMSK0  _SFR_MEM8(0x6E)
ioa6617c.h:#define TIMSK1  _SFR_MEM8(0x6F)
ioa664251.h:#define TIMSK0  _SFR_MEM8(0x6E)
ioa664251.h:#define TIMSK1  _SFR_MEM8(0x6F)
ioat94k.h:#define TIMSK _SFR_IO8(0x39)
iocanxx.h:#define TIMSK0 _SFR_MEM8(0x6E)
iocanxx.h:#define TIMSK1 _SFR_MEM8(0x6F)
iocanxx.h:#define TIMSK2 _SFR_MEM8(0x70)
iocanxx.h:#define TIMSK3 _SFR_MEM8(0x71)
iom103.h:#define TIMSK  _SFR_IO8(0x37)
iom1284.h:#define TIMSK0  _SFR_MEM8(0x6E)
iom1284.h:#define TIMSK1  _SFR_MEM8(0x6F)
iom1284.h:#define TIMSK2  _SFR_MEM8(0x70)
iom1284.h:#define TIMSK3  _SFR_MEM8(0x71)
iom1284p.h:#define TIMSK0 _SFR_MEM8(0x6E)
iom1284p.h:#define TIMSK1 _SFR_MEM8(0x6F)
iom1284p.h:#define TIMSK2 _SFR_MEM8(0x70)
iom1284p.h:#define TIMSK3 _SFR_MEM8(0x71)
iom1284rfr2.h:#define TIMSK0                          _SFR_MEM8(0x6E)
iom1284rfr2.h:#define TIMSK0_struct _SFR_MEM8_STRUCT(0x6e, struct __reg_TIMSK0)
iom1284rfr2.h:#define TIMSK1                          _SFR_MEM8(0x6F)
iom1284rfr2.h:#define TIMSK1_struct _SFR_MEM8_STRUCT(0x6f, struct __reg_TIMSK1)
iom1284rfr2.h:#define TIMSK2                          _SFR_MEM8(0x70)
iom1284rfr2.h:#define TIMSK2_struct _SFR_MEM8_STRUCT(0x70, struct __reg_TIMSK2)
iom1284rfr2.h:#define TIMSK3                          _SFR_MEM8(0x71)
iom1284rfr2.h:#define TIMSK3_struct _SFR_MEM8_STRUCT(0x71, struct __reg_TIMSK3)
iom1284rfr2.h:#define TIMSK4                          _SFR_MEM8(0x72)
iom1284rfr2.h:#define TIMSK4_struct _SFR_MEM8_STRUCT(0x72, struct __reg_TIMSK4)
iom1284rfr2.h:#define TIMSK5                          _SFR_MEM8(0x73)
iom1284rfr2.h:#define TIMSK5_struct _SFR_MEM8_STRUCT(0x73, struct __reg_TIMSK5)
iom128a.h:#define TIMSK   _SFR_IO8(0x37)
iom128.h:#define TIMSK     _SFR_IO8(0x37)
iom128rfa1.h:#define TIMSK0                          _SFR_MEM8(0x6E)


и дальше еще столько же
подскажите, под утро что-то плохо соображаю.
mickey_mouse
() автор топика
Ответ на: комментарий от mickey_mouse

По-моему всё банально в том, что на твоём контроллере нет регистров TIMSK и TCCR0. Но есть TIMSK0 и TCCR0A вместо них. Либо всё-таки какая-то борода с хедером и чёт не заинклудилось. Но это всё не точно. Проверь даташит на свой МК - точно ли ты юзаешь правильные регистры.

Reineke
()
Ответ на: комментарий от mickey_mouse

и дальше еще столько же

Ну вот. Теперь у тебя куча вариантов. Отбрасываешь TIMSK[0-9], и пошёл по списку:

#include <avr/io1200.h>

Улучшений нет? Тогда следующий по списку.

PS: Но я бы посторался выделить те хэды, которые содержат все необходимые определения и начал бы с них.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от mickey_mouse

А ещё бы я грепнул /usr/avr/sys-root/include/avr/io.h на наличие #ifdef в теле которого могут оказаться все необходимые инклюды. Ну чем чёрт не шутит. Сделал одно определение и в дамках.

Deleted
()
Ответ на: комментарий от Reineke

Всё правильно говоришь. Для того, чтобы откомпилять под авр надо вручную добавить дефайн F_CPU (так как частота конкретного контроллера не может быть заранее известна компилятору), указать какой у тебя контроллер через -mmcu и заинклудить io.h, который иклудит нужный файл с дефайнами регистров контроллера, указанного в -mmcu.

Compiler optimizations disabled

Нужно добавить оптимизацию, чтобы убрать этот ворнинг, типа [inlne]-O2.

d.c:66:1: error: 'TCCR0' undeclared
d.c:82:1: error: 'TIMSK' undeclared

У меги328 нет таких регистров. Либо тс взял исходник не от своего контроллера, либо указывает не тот контроллер в -mmcu.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.