как компилировать файлы в терминале линукса, если их несколько?

VeD
Offline
Зарегистрирован: 21.02.2016

Один если файл, то я компилирую

avr-gcc -mmcu=микроконтроллер -Os файл.c файл.o

avr-objcopy -j .text -j .data -O ihex файл.o  файл.hex

А если разбит проект на кучу файлов, тогда как быть? 

Logik
Offline
Зарегистрирован: 05.08.2014

надо писать make-файл, в нем уже задать что и откуда брать для компиляции.

andryn
Offline
Зарегистрирован: 08.06.2018

VeD пишет:

А если разбит проект на кучу файлов, тогда как быть? 

Примерно так:

Собираем отдельные файлы:

avr-gcc -mmcu=atmega328p -o "main.o" -c "main.cpp"

avr-gcc -mmcu=atmega328p -o "func.o" -c "func.cpp"

Собираем один elf:

avr-gcc -Wl,--gc-sections -mmcu=atmega328p  -o "./Debug.elf" "main.o" "func.o" -lm

Делаем из него hex:

avr-objcopy -O ihex -R .eeprom "./Debug.elf" "./Debug.hex"

 

VeD
Offline
Зарегистрирован: 21.02.2016

а можно ссылку на документацию по созданию  elf  файла? а то мне не известны команды типа -Wl,--gc-sections

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

VeD пишет:

а можно ссылку на документацию по созданию  elf  файла? а то мне не известны команды типа -Wl,--gc-sections

Нивапрос! ;) ;) ;)

gcc.pdf всего около 1000 страниц. И это не шутка. Нужно если не наизусть, то уверенно знать, где в этой книге искать нужное.

VeD
Offline
Зарегистрирован: 21.02.2016

благодарю :)

VeD
Offline
Зарегистрирован: 21.02.2016

значит так.

Делается данная процедура вот так. К примеру. у вас два файла(я попробовал с двумя).

Сначала нужно скомпилировать си файлы или слинковать. Это для меня одинаково.

avr-gcc -mmcu=atmegaXXX -Os -c первый файл.c

avr-gcc -mmcu=atmegaXXX -Os -c второй файл.c

На выходе получим первый файл.o  и второй файл.o

теперь нужно сделать из этих файлов elf файл

avr-gcc -mmcu=atmegaXXX -Os -o  любое имя.elf  первый файл.o второйфайл.o

после делаем hex  файл

 avr-objcopy -j .text -j .data -O ihex  elf  файл файл.hex

всё.

А как залить прогу через дуде вы знаете.

 

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

значит так.

....

простите, а чем это отличается от того, что вам написали в посте #2 ?

Ну и добавлю - как раз для того, чтобы не набирать это все вручную. и существует make

VeD
Offline
Зарегистрирован: 21.02.2016

Мне написали с кучей магических символов. А я придерживаюсь, делай простое еще проще, а трудное доступным

VeD
Offline
Зарегистрирован: 21.02.2016

Пока я учусь, буду набирать. Так лучше запомню

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:
Мне написали с кучей магических символов. А я придерживаюсь, делай простое еще проще, а трудное доступным

 "Делай простое проще.." - что за бред.  Какие "магические символы"? - это опции линкера.

Вам в сообщении #4 дали ссылку, где описана вся "магия". Вы прочитали, что значат те опции, которые вы выкинули? Вы знаете, для чего они - чтобы так уверенно советовать другим их убрать?

VeD
Offline
Зарегистрирован: 21.02.2016

Честно, не читал. Бегло глянул. Простое проще, пример вернуться в предыдущий каталог линукса можно по прямому пути /бла бла бла/каталог или относительному .. Проще поставить две точки?

VeD
Offline
Зарегистрирован: 21.02.2016

И еще, я не советовал их убрать. Я просто написал пример тех команд, с помощью которых, успешно прошла линковка и компиляция у меня лично.

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:
Честно, не читал. Бегло глянул. Простое проще

простое проще, но не всегда правильнее. Как пример - когда приперло, проще всего поссать в ближайшем подъезде, но приличные люди так не делают  :)

VeD пишет:
И еще, я не советовал их убрать. Я просто написал пример тех команд, с помощью которых, успешно прошла линковка и компиляция у меня лично.

Опять же, понятие "успешно" очень относительно. Чтобы разобраться, кто из нас прав, предлагаю поставить следующий эксперимент - возьмите какой-нибудь проект, только не блинк, а что-то посложнее - и соберите его сначала с этими "магическими опциями", а потом -  без. И сравните размер получившейся прошивки в обеих случаях.

 

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

нормально у него все будет, кроме математики, он про нее забыл (-lm). А оптимизация и сборка мусора - важно лишь для больших проектов.

Важно только -lm, остальное освоит по ходу пьесы.

VeD
Offline
Зарегистрирован: 21.02.2016

Вызвал я в терминале gcc --help  и  avr-gcc --help, команды lm  там нет

andryn
Offline
Зарегистрирован: 08.06.2018

VeD пишет:

Вызвал я в терминале gcc --help  и  avr-gcc --help, команды lm  там нет

Попробуйте вызвать: avr-gcc -v --help

И тогда увидите:

-l LIBNAME, --library LIBNAME
                            Search for library LIBNAME
VeD
Offline
Зарегистрирован: 21.02.2016

спасибо. охота топором разрубить ардуино и ноутбук выкинуть с балкона. На винде и  atmel studio  все это проще. а что Вы скажете про Geany?

andryn
Offline
Зарегистрирован: 08.06.2018

VeD пишет:

а что Вы скажете про Geany?

Я не пробовал, но люди пользуют: https://www.google.ru/search?q=Geany+AVR

Можно и Eclipse: https://www.google.ru/search?q=Eclipse+AVR

Можно что-то из платного попробовать: https://www.google.ru/search?q=CLion+AVR

Зависит от ваших предпочтений.

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

спасибо. охота топором разрубить ардуино и ноутбук выкинуть с балкона. На винде и  atmel studio  все это проще. а что Вы скажете про Geany?

что именно проще?

VeD
Offline
Зарегистрирован: 21.02.2016

atmel studio проект сама собирает. я как бы и не думал что столько нужно знать

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Стесняюсь спросить: при таком уровне познаний, чем именно тебе Ардуино ИДЕ не угодила?

При моем уровне - меня устраивает... хм...

VeD
Offline
Зарегистрирован: 21.02.2016

ее не использую,  причина программирую через  usbasp. а кстати да. для линукса она же тоже есть. я считал что работать в терминале проще . хотя если постоянно пользоваться командами и знать зачем они,  то реально наверно будет проще. но дело в том что я английский знаю на уровне средней школы. так что документацию иностранную читать дико

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

VeD пишет:

ее не использую,  причина программирую через  usbasp. 

Это не причина, в Arduino IDE тоже можно программировать через usbasp.

VeD
Offline
Зарегистрирован: 21.02.2016

Ну хорошо. Допустим, я ее установлю и буду пользоваться. Но как научиться этому в терминале? Про английский я уже писал. Да даже взять тот же goole translate, все равно некоторое не понятно, а именно, зачем оно тут и как работает.

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:
Ну хорошо. Допустим, я ее установлю и буду пользоваться. Но как научиться этому в терминале? Про английский я уже писал. Да даже взять тот же goole translate, все равно некоторое не понятно, а именно, зачем оно тут и как работает.

прочитать, блин.  Какого еще совета ты ждешь??

Либо гугл-транслятором, либо выучить английский. Люди, вон, с китайского гуглом переводят, а ты английский прочитать не в силах, который в школе учил.

Не говоря уж о том, что в наше время не знать хотя бы один иностранный язык - ХОТЯ БЫ АНГЛИЙСКИЙ - стыдно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

VeD пишет:

 ...дело в том что я английский знаю на уровне средней школы. так что документацию иностранную читать дико

Прости, но не решив эту проблему тебе стоит поменять хобби... вышивание нормально, резьба по дереву, возможно.

Это не гонор и не поза. Электроника и программирование - области полного доминирования английского языка.

Пользоваться нужно, конечно, простой Ардуино ИДЕ, пока не поймешь зачем именно тебе нужно что-то иное. Ключи линковки и компиляции - можно посмотреть в настройках ИДЕ и потом спокойно прочитать, что они значат.

На английском ;).

============================

Говоря про себя - я использую только Линух. Винда у меня есть только на виртуалках: 10 для одного банка в кабинете, и на компе в лаборатории  - ХР для USB осцилографа. На остальных 4 компах дома - простой Минт, это вариант Убунты.

USBASP, конечно, нормально работает под Линухом. И СТлинк для стм32 и Еклисп, для некоторых тем. И LTSpice для моделирования и т.д.

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

"Ну хорошо. Допустим, я ее установлю и буду пользоваться."

Занавес. То есть ты её ещё даже не установил, но уже осуждаешь?!? круть.. до такого даже я не догадался.

Дуй на arduino.cc качай дистриб под линукс, распаковывай куда-нить в хомяке и тыкай на файло arduino.sh - это "батник" для запуска. Сиди и наслаждайся. Больше ничего не требуется. Даже драйвера ставить не надо. На твой век - более чем достаточно. :)

А не, надо будет. Включи себя в группу dialout, что разрешает писать в usb-порты. Вродже этого достаточно, не помню уже.

И ещё: если линух локализован нормально, то ИДЕ будет на родном языке локали автометом.

И ещё2: а ещё лучше, после установки зайди на гитхаб, разыщи там проект Ardublock от tawelli, качни jar последней сборки и воткни его куда следует (папка со скетчами, подпапка tools и т.д.) Далее в инструментах выбираешь tools/Ardublock и пишешь на привычном Lego scratch .. ну почти. Все в картинках, понятно удобно и даже по-русски большая часть. В общем для возраста 9-11 лет самое то.

VeD
Offline
Зарегистрирован: 21.02.2016

А как ты учил английский?все слова подряд учить жизни не хватит

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

VeD пишет:

спасибо. охота топором разрубить ардуино и ноутбук выкинуть с балкона. 

Just do it.

VeD
Offline
Зарегистрирован: 21.02.2016

Я перевел как делай по справедливости. А оказалось. Просто сделай это.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

VeD пишет:
Просто сделай это.

Да. 

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:
А как ты учил английский?все слова подряд учить жизни не хватит

"все слова подряд" ты и по русски не знаешь. Из чего простой вывод - учи те, что используются в нужной области. Самый простой метод, имхо, просто читать интересные тебе тексты, пытаясь перевести их самостоятельно. Если что непонятно - пользоватся словариком. Но не переводить гуглем. Гугль, во-первызх, переводит отвратно (английский еще туда-сюда, а другие языки - это жуть), а во-вторых, пользуясь автопереводчиком - никогда ничему не научишься.

И не ссы - английский, особенно технический - очень простой язык.

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

И не ссы - английский, особенно технический - очень простой язык.

Так думают все, кому еще не отвечал индус из техсаппорта )))

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

sadman41 пишет:

Так думают все, кому еще не отвечал индус из техсаппорта )))

Оффтоп.

Мне как-то индус свое резюме на английском прислал на должность Project Coordinator (походу спутал меня с кем-то). Что интересно, довольно грамотно было написано, наверно помогал кто-то :D

b707
Offline
Зарегистрирован: 26.05.2017

Jeka_M пишет:

Мне как-то индус свое резюме на английском прислал на должность Project Coordinator (походу спутал меня с кем-то). Что интересно, довольно грамотно было написано, наверно помогал кто-то :D

Ребята, не надо зазнаваться :) большинству из нас до индусов очень далеко :)

"пиджин инглиш" или как там его :) -  ужасен с точки зрения снобистких носителей английского - т.е. англичан и американцев. А вообще-то, для иностранца - индусы в массе своей очень хорошо владеют английским, не надо забывать что английский в Индии один из государственных языков.