Файлы

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

Проект состоит из нескольких файлов .ino. Лежат в одной папке.
Как исключить один из файлов из компиляции?
Удалить (переименовать) файл из папки?
Или есть другие варианты...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

PANYTA пишет:
Проект состоит из нескольких файлов .ino
Непонятно зачем, а потому непонятно и как отвечать.

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

Не зачем, а почему... :)
Не суть. Чужой проект.
Ну так вышло.

Вопрос остался...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

PANYTA пишет:
Не суть.

Да, как раз суть! Почему они ino? Почему в cpp не переименовать? В них что, во всех есть loop и setup и все должны работать? В чём фишка вообще?

PANYTA пишет:
Вопрос остался...

Вопрос и останется пока будете игнорировать встречные вопросы и отвечать "не суть". Я же вроде понятно сказал, что без понимания этого трудно ответить на Ваш вопрос. Ну, если Вас устроит ответ "не суть", то и ладно, считайте, что я так ответил.

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

PANYTA пишет:
Не зачем, а почему... :) Не суть. Чужой проект. Ну так вышло. Вопрос остался...

'Вопрос не имеет смысла, потому что по правилам, в ардуино-проекте должен быть только один файл INO

А раз их несколько - значит проект писал какой-то "умник", слабо понимающий в предмете.  Это сразу заставляет сомневаться, а стоит ли этот проект того, чтоб его повторять.

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

Ткните носом, пожалуйста, где почитать за эти правила. Или тут расскажите, если можно.
А "умник" вот: https://github.com/jjrobots/B-ROBOT_EVO2/tree/master/Arduino/BROBOT_EVO2 .

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

Обьясняю - Ардуино ИДЕ при сборке проекта собирает все файлы .ino и .cpp из данной директории в один большой файл. При этом файл .ino считается "основным", а все прочие добавляются к нему. При помощи стандартных директив #include и заголовочных файлов типа .h можно управлять, в каком порядке будут собираться файлы.

Если же файлов .ino много - система не знает, какой главный. Кроме того, файлы .ino не поддерживают включения #include и поэтому сборка такого проекта будет хаотичной, и например при смене версии ИДЕ проект может вообше перестать собираться. Все это говорит о том, что если в проекте много .ino - его собирал не слишком одаренный программист, даже если идея проекта сложная и интересная.

Из того, что я написал выше - следует ответ и на самый первый вопрос ветки - исключить файл  .ino из компиляции можно единственным путем - физически удалив ненужный файл из каталога.

Ну и могу посоветовать - не надо копировать чужие кривые проекты - пишите свои!

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Вам сюда - тут по англицки, но гугл в помощь!

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

b707 пишет:

PANYTA пишет:
Не зачем, а почему... :) Не суть. Чужой проект. Ну так вышло. Вопрос остался...

'Вопрос не имеет смысла, потому что по правилам, в ардуино-проекте должен быть только один файл INO

Тут дело такое... .cpp нужно вкомпиливать через .h , а .ino сам подключается просто и легко. Никаких конфликтов не возникает, проблем от отсутствия там loop() или setup() - тоже. Главным считается тот, у которого имя совпадает с названием каталога. ...или может IDE setup() ищет... не экспериментировал. Но компилится всё четко ))

-------------------------------

Tabs, Multiple Files, and Compilation

Allows you to manage sketches with more than one file (each of which appears in its own tab). These can be normal Arduino code files (no visible extension), C files (.c extension), C++ files (.cpp), or header files (.h).

-------------------------------

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Тут дело такое... .cpp нужно вкомпиливать через .h 

Вы, наверное, еще не проснулись.

Ни в одном компиляторе .cpp через .h не "вкомпилируется". Нигде и никогда.

Напишите .cpp, положите в директорию, а всё, что из него нужно - явно опишите в .ino или в другом .cpp  - со словом extern. Всё отлично скомпилируется и соберётсябезо всякого .h

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

sadman41 пишет:

Тут дело такое... .cpp нужно вкомпиливать через .h , а .ino сам подключается просто и легко. Никаких конфликтов не возникает, проблем от отсутствия там loop() или setup() - тоже. Главным считается тот, у которого имя совпадает с названием каталога. ...или может IDE setup() ищет... не экспериментировал. Но компилится всё четко ))

 главный по имени каталога, второй подчиненный, -  это пока их два.  А если их пять - как в этом проекте?

Ну и в принципе - делать несколько ИНО в проекте - по определению дурость. И рано или поздно она вылезет, как шило из мешка. В языке есть четки правила работы с исходниками, нафига придумывать какую-то фигню.

Для меня - это показатель уровня программиста. Этот проект явно писал какой-то "веб-дизайнер" или "знаток ассемблера" :)))

Feofan
Offline
Зарегистрирован: 28.05.2017

Переименуйте *.ino, к примеру, в *.txt. Он "исчезнет" из проекта.

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

ЕвгенийП пишет:

Напишите .cpp, положите в директорию, а всё, что из него нужно - явно опишите в .ino или в другом .cpp  - со словом extern. Всё отлично скомпилируется и соберётсябезо всякого .h

Согласен. Если объявления функций из .cpp вытащить в ino - всё закомпилится. Если просто кинуть .ino и .cpp в кучу, а потом вызывать из первого функцию второго - будет выкинута ошибка компиляции. В случае с двумя .ino всё проходит без подпрыгиваний. 

Насколько это по стандарту - судить Вам, как специалисту. Я поделился своими наблюдениями. В мануале к IDE запрета на множественное применение .ino нет.

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

b707 пишет:

 главный по имени каталога, второй подчиненный, -  это пока их два.  А если их пять - как в этом проекте?

...

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

Думаю, что все .ino тупо склеиваются и рассматриваются далее, как один большой.  

И, давайте учитывать, что С/C++ - это одно, а Wiring и Arduino IDE - несколько другое ))

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

sadman41 пишет:

Тут дело такое... .cpp нужно вкомпиливать через .h , а .ino сам подключается просто и легко. Никаких конфликтов не возникает, проблем от отсутствия там loop() или setup() - тоже. Главным считается тот, у которого имя совпадает с названием каталога. ...или может IDE setup() ищет... не экспериментировал. Но компилится всё четко ))

-------------------------------

Tabs, Multiple Files, and Compilation

Allows you to manage sketches with more than one file (each of which appears in its own tab). These can be normal Arduino code files (no visible extension), C files (.c extension), C++ files (.cpp), or header files (.h).

-------------------------------

У меня именно в INO лежат несколько файлов в одном каталоге.
Подтверждаю главный тот что совпадает с названием каталога в котором размещены файлы. Начал ветку читать испугался, что делаю что то не так хотя все и работает. Какие проблемы могут возникнуть с несколькими INO в одном каталоге, ну кроме той, что нельзя определить какой главный, как выясняется главный INO определяется нормально.

b707 пишет:

Все это говорит о том, что если в проекте много .ino - его собирал не слишком одаренный программист, даже если идея проекта сложная и интересная.

Вот тут поподробнее, в чем заключается неодаренность? Как правильно одариться?
Если серньезно, то я понимаю, что INO будут правильно компилиться и собираться только в Arduino IDE или других IDE с плагинами для Arduino. Или есть еще подводные камни?

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

sadman41 пишет:

В мануале к IDE запрета на множественное применение .ino нет.

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

В этом смысле и сборку проекта из кучи файлов .cpp без соответсвующих заголовочных я тоже считаю "говнокодом"... Если хочешь, чтобы файлы подключались без усилий - пиши код в файлах .h, их хотя бы можно с помощью @include собирать в правильном порядке. Ну а наиболее правильно - делать пары файлов .h и .cpp

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

b707 пишет:

В этом смысле и сборку проекта из кучи файлов .cpp без соответсвующих заголовочных я тоже считаю "говнокодом"... Если хочешь, чтобы файлы подключались без усилий - пиши код в файлах .h, их хотя бы можно с помощью @include собирать в правильном порядке. Ну а наиболее правильно - делать пары файлов .h и .cpp

А кто спорит с тем, что надо делать правильно? Я написал о том, что запрета нет и всё канает.

Сейчас гляну, как там IDE клеит файлы...

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

Andrey12 пишет:

Вот тут поподробнее, в чем заключается неодаренность? Как правильно одариться?

обьясняю. Положим у вас есть проект, в котором один главный ИНО и еще четыре неглавных ИНО - А Б С Д

Пока у вас функции из неглавных файлов используются только в главном - все отлично собирается. Но в более-менее сложных проектах исходники требуют перекрестного включения. Если у вас функции из А должны вызываться в Д, а функции Д - из Б и С и так далее - с помощью ИНО вы эту проблему не решите.

А одарится тут просто - оставьте в проекте ОДИН файл ИНО, а остальные перtименуйте в .h, если в них нет глобальных переменных. Если есть переменные - придется делать пары .cpp .h

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

Сделал три файла:

a.ino

void blinkA() {
  digitalWrite(13, HIGH);
  delay(10000);
  digitalWrite(13, LOW);
}

z.ino

void blinkZ() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
}

compilation_test.ino

void setup() {
  blinkZ();
  blinkA();
}

void loop() {}

На выходе имеем (убрал всякие там #line):

#include <Arduino.h>
void setup();
void loop();
void blinkA();
void blinkZ();
void setup() {
blinkZ();
blinkA();
}

void loop() {}

void blinkA(){
digitalWrite(13, HIGH);
delay(10000);  
digitalWrite(13, LOW);  
}

void blinkZ(){
digitalWrite(13, HIGH);
delay(1000);  
digitalWrite(13, LOW);  
}

IDE 1.8.5

P.S. сейчас еще последнюю IDE стащу с .cc

UPD: IDE 1.8.8 выдает такую же картину. 

 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Т.е. костыль по-прежнему на месте :(

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

ЕвгенийП пишет:

Напишите .cpp, положите в директорию, а всё, что из него нужно - явно опишите в .ino или в другом .cpp  - со словом extern. Всё отлично скомпилируется и соберётсябезо всякого .h

А можно для чайников поподробнее? Сейчас у меня 3 INO файла. В одном из них обработка нажатия клавиш. Одна функция fBtnCheckPress() которая вызывается из "основного" INO файла.

файл incubator.ino

uint8_t btnUp = 2;
bool upPressed = false;

void setup() {
}

void loop() {
  fBtnCheckPress();

  if (upPressed) {
    upPressed = false;
  }
}

файл keyboard.ino

void fBtnCheckPress() {
  // нажатие кнопки низкий уровень, кнопка отпущена высокий уровень.

  // кнопка нажата
  if (!digitalRead(btnUp)) {
    // если отсчета времени нажатия нет то начнем его
    upPressed = true;
  }
}

Результат компиляции

Скетч использует 680 байт (2%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 10 байт (0%) динамической памяти, оставляя 2038 байт для локальных переменных. Максимум: 2048 байт.

Если переименовать keyboard.ino в keyboard.cpp то получаю такие вот ошибки

C:\temp\arduino187\build\sketch\keyboard.cpp: In function 'void fBtnCheckPress()':

keyboard.cpp:5:20: error: 'btnUp' was not declared in this scope

   if (!digitalRead(btnUp)) {

                    ^

keyboard.cpp:5:25: error: 'digitalRead' was not declared in this scope

   if (!digitalRead(btnUp)) {

                         ^

keyboard.cpp:7:5: error: 'upPressed' was not declared in this scope

     upPressed = true;

     ^

C:\temp\Arduino\Progect\sketch_feb05a\sketch_feb05a.ino: In function 'void loop()':

sketch_feb05a:8:18: error: 'fBtnCheckPress' was not declared in this scope

   fBtnCheckPress();

                  ^

exit status 1
'btnUp' was not declared in this scope

 

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

ЕвгенийП пишет:

Т.е. костыль по-прежнему на месте :(

Архитектурное наследие! 

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

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

Это, как раз, понятно. Они как-то убрали этот кривой костыль. Но таковых чайников столько вылезло, что их техю поддержку обрушили. И тогда они вставили костыль обратно. В итоге, хрен теперь опять определишь тип в .ino файле и используешь его в параметрах функций, т.к. предоюъявления они вставляют в начало и объялвние типа оказывается после использования :(

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

Andrey12 пишет:

А можно для чайников поподробнее? Сейчас у меня 3 INO файла.

....

Если переименовать keyboard.ino в keyboard.cpp то получаю такие вот ошибки

Переименуйте keyboard.ino в keyboard.h. в главный файл .ino не забудьте добавить #include "keyboard.h" - никаких ошибок не будет. И, главное - это будет правильно с точки зрения языка и будет работать в любой версии ИДЕ

 

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

ЕвгенийП пишет:

Это, как раз, понятно. Они как-то убрали этот кривой костыль. Но таковых чайников столько вылезло, что их техю поддержку обрушили. И тогда они вставили костыль обратно. В итоге, хрен теперь опять определишь тип в .ino файле и используешь его в параметрах функций, т.к. предоюъявления они вставляют в начало и объялвние типа оказывается после использования :(

Не расстраивайтесь раньше времени. Просто добавится немного путаницы с версиями IDE ))

a.ino

void blinkA(config_t _config) {
  digitalWrite(13, HIGH);
  delay(10000);
  digitalWrite(13, LOW);
}

z.ino

void blinkZ() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
}

compilation_test.ino:

typedef struct {
  uint8_t data[10];
  uint8_t CRC;
} config_t;

void setup() {
//  blinkZ();
//  blinkA();
  attachInterrupt(0, blinkA, RISING);
//  blinkY();
}

void loop() {}

void blinkY(config_t _config) {
  digitalWrite(13, HIGH);
  delay(40000);
  digitalWrite(13, LOW);
}

результат:

#include <Arduino.h>
typedef struct {
  uint8_t data[10];
  uint8_t CRC;
} config_t;

void setup();
void loop();
void blinkY(config_t _config);
void blinkA(config_t _config);
void blinkZ();
void setup() {
//  blinkZ();
//  blinkA();
  attachInterrupt(0, blinkA, RISING);
//  blinkY();
}

void loop() {}

void blinkY(config_t _config) {
  digitalWrite(13, HIGH);
  delay(40000);
  digitalWrite(13, LOW);
}

void blinkA(config_t _config) {
  digitalWrite(13, HIGH);
  delay(10000);
  digitalWrite(13, LOW);
}

void blinkZ() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
}

 

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

b707 пишет:

обьясняю. Положим у вас есть проект, в котором один главный ИНО и еще четыре неглавных ИНО - А Б С Д

Пока у вас функции из неглавных файлов используются только в главном - все отлично собирается. Но в более-менее сложных проектах исходники требуют перекрестного включения. Если у вас функции из А должны вызываться в Д, а функции Д - из Б и С и так далее - с помощью ИНО вы эту проблему не решите.

А одарится тут просто - оставьте в проекте ОДИН файл ИНО, а остальные перtименуйте в .h, если в них нет глобальных переменных. Если есть переменные - придется делать пары .cpp .h

Да так и есть. Разложу на А Б С Д Е

А основной  INO файл,
Б обработка нажатия клавиш
С файл в котором определяется состояние управляющих механизмов
Д файл меню
Е вывод информации на дисплей

Из файла А и С вызываются функции файла E все работает. Я понял что работает сейчас пока Arduino собирает в единый файл все правильно. Так же понятно что Arduino может собрать файл и расположить объявления функций не в том порядке который мне нужен и тогда возникнут проблемы. Спасибо, буду это учитывать. 

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

Вот то, что происходит НА САМОМ ДЕЛЕ:

(я - в своем амплуа - рассказывать "из чего, на самом деле, тетька сделана")

Вот отсюда. Честно говоря, гуглится на раз.

The Arduino environment performs a few transformations to your sketch before passing it to the avr-gcc compiler:

  • All .ino files in the sketch folder (shown in the IDE as tabs with no extension) are concatenated together, starting with the file that matches the folder name followed by the others in alphabetical order, and the .cpp extension is added to the filename.
  • If not already present, #include <Arduino.h> is added to the sketch. This header file (found in the core folder for the currently selected board) includes all the definitions needed for the standard Arduino core.
  • Prototypes are generated for all function definitions in .ino files that don't already have prototypes. In some rare cases prototype generation may fail for some functions. To work around this, you can provide your own prototypes for these functions.
  • #linedirectives are added to make warning or error messages reflect the original sketch layout.

Для инвалидов умственного труда  - объясню:

1.Все файлы с расширением .ino сливаюится в один, певым идет тот, чье имя совпадает с именем папки, далее - по алфавиту. У полученного файла ставится расширение .cpp.

2. добавляем #include <arduino.h>

3. создаем все прототипы функций, причем тут бывают глюки (это не я написал ;) ), поэтому лучше пишите прототипы сами. (еще раз - это - не я, это авторы ИДЕ! ;))) )

ВСЁ!!!

----------------------

Теперь понятно, почему второй .ino файл и .cpp по-разному себя ведут?

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

wdrakula пишет:

Теперь понятно, почему второй .ino файл и .cpp по-разному себя ведут?

Сенсей, так какой все ж таки вывод - несколько файлов ИНО в одном проекте - норма или зло? :)

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

b707 пишет:

wdrakula пишет:

Теперь понятно, почему второй .ino файл и .cpp по-разному себя ведут?

Сенсей, так какой все ж таки вывод - несколько файлов ИНО в одном проекте - норма или зло? :)

А рубашку нужно навыпуск носить или заправленной?

Вот и твой вопрос сродни, такой же бессмысленный. "Каждый дрочит, как он хочет" - народная мудрость.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

 какой все ж таки вывод - несколько файлов ИНО в одном проекте - норма или зло? :)

Мне понравилось, как Ворота сделал .ino файл в своём пульсметре. Если не видили, не поленитесь скачать и глянуть. Он там в директории RipplesMeter\RipplesMeter :)

 

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

ЕвгенийП пишет:

Мне понравилось, как Ворота сделал .ino файл в своём пульсметре. Если не видили, не поленитесь скачать и глянуть. Он там в директории RipplesMeter\RipplesMeter :)

 

спасибо, глянул. Мне нравится :)

Не подумайте. что претендую на тот же уровень - но я в своих проектах примерно так и пишу :)

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

wdrakula пишет:

Вот и твой вопрос сродни, такой же бессмысленный. "Каждый дрочит, как он хочет" - народная мудрость.

не согласен. Несколько .ino в проекте - суксь :)

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

Блин. Нафига я подписался на уведомления в теме... 25 писем за два часа...   :)

Помечаю тему как "решённую". Ответ - "физически удалив ненужный файл".

PS. Где таки почитать за "правильно с точки зрения языка"?

Не с точки зрения даже самого опытного юзера, а именно Языка.

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

PANYTA пишет:

Блин. Нафига я подписался на уведомления в теме...

это было и вправду неосмотрительно - вы теперь от этих уведомлений не избавитесь, они не выключаются :)

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

Которого Языка?

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

b707 пишет:

Не подумайте. что претендую на тот же уровень - но я в своих проектах примерно так и пишу :)

А я в свой для юзеровских плагинов подкладываю второй ino. Так меньше вопросов возникает у "модификаторов".

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

Язык, это который C (C++).

А чё, тут в самом деле нет кнопки "отписаться"?

АУ, модераторы? Птичку внизу снимаю...

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

Если ориентироваться на C*, но требуется остаться в оставаясь в концепции Arduino, то распихивать всё по карма... файлам .h/.c/.cpp и инклюдить в основной .ino.

Отписаться просто - в каждом письме тыкайте на "Отписаться". Действие производится несколько раз - по количеству постов "с галочкой". Такой энджин у форума, что поделаешь. 

 

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

энджин глюпый, или ...

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

sadman41 пишет:

распихивать всё по карма... файлам .h/.c/.cpp и инклюдить в основной .ino.

Гриш, с файлами .с в ИДЕ какая-то засада, во всяком случае в моей 1.6.12

Подробно не вникал, но при использовании в проекте старых библиотек Ардуино приходилось менять .c на .cpp - иначе не собирался.

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

b707 пишет:

Подробно не вникал, но при использовании в проекте старых библиотек Ардуино приходилось менять .c на .cpp - иначе не собирался.

По рассказам у нас wdrakula главный, но я могу предположить, что на каком-то этапе развития IDE .cpp стало компилиться через g++, а .c через что-то еще. Раньше, может, всё одному компилеру скармливалось, поэтому в .c допустимо было включать что-то из наворотов C++.  Или правила для компилятора задавались разные... Но я тут, скорее всего, уже не копенгаген, так далеко в кроличью нору не падал (может и вообще чушь написал )). Надо конкретный пример расковырять - тогда станет понятно что почём. 

Но, в соответствии с вышеприведенной выдержкой мануала, IDE не возражает против тех и других расширений.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

wdrakula пишет:

Вот и твой вопрос сродни, такой же бессмысленный. "Каждый дрочит, как он хочет" - народная мудрость.

Благодарю, успокоили!

ЕвгенийП пишет:

Мне понравилось, как Ворота сделал .ino файл в своём пульсметре. Если не видили, не поленитесь скачать и глянуть. Он там в директории RipplesMeter\RipplesMeter :)

Красота, особенно ino файл! Мне до такого далеко, но буду стремиться.

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

sadman41 пишет:

По рассказам у нас wdrakula главный, но я могу предположить, что... .cpp стало компилиться через g++, а .c через что-то еще.

Рассказываю: ;))))

Да, так оно и есть, в пакете GCC g++ - компилятор С++, gcc - компилятор С.

Вот кусок из  platform.txt, там указаны команды компиляции и сценарий их вызова для разных файлов.

compiler.c.cmd=avr-gcc
compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects
...
compiler.cpp.cmd=avr-g++
compiler.cpp.flags=-c -g -Os {compiler.warning_flags} -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto
...

## Compile c files
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"

## Compile c++ files
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"

 

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

Можно ещё вопросик?

В "инструментах" есть Compiler LTO.

Шо це таке?

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

PANYTA пишет:

Можно ещё вопросик?

В "инструментах" есть Compiler LTO.

Шо це таке?

Ты про шо? 0_0

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

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

А тебе мама разрешила в интернете всякую каку собирать? ;)))) (шутка)

Это не "искаропки" IDE. Ты в нее всяку фигню добавлял? Кайся! (снова шутка)

----

LTO - это опция "-flto" среди флагов компилятора, смотри мой пост выше.

Обозначает Линк Тайм Оптимизейшн. Если задал вопрос, то тебе еще рано знать, что это такое. (а вот это уже не шутка! ;))) )

Без него размер будет больше... но ведь размер - не главное! Остальное - спрашивай у старших. ;))))))

 

PANYTA
PANYTA аватар
Offline
Зарегистрирован: 27.01.2019

Ну и шутки у тебя... (не шутка...)

Понимаю так: если LTO  Enabled, то размер прошивки уменьшается (в ущерб быстродействию).

Я неправ?

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

PANYTA пишет:

Ну и шутки у тебя... (не шутка...)

Понимаю так: если LTO  Enabled, то размер прошивки уменьшается (в ущерб быстродействию).

Я неправ?

Неправ, не в ущерб. К быстродействию вообще никак не относится.

Слушай! Если тебе серьёзно интересно - почитай в сети про LTO.

Ведь везде говорят - если не знаешь что это и зачем - не влезай. Ты форум со справочной перепутал? Не ты первый. Если ты не знаешь, зачем тебе его выключать - то тебе не нужно его выключать. Всё. Точка. Это ответ на вопрос на доступном тебе уровне. Пока ты не столкнешься с глюками, ЛТО  тебе только помогает.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

С LTO размер, конечно, поменьше, вот только работает не всегда.

Т.е. линковщик что-то пытается сделать, но у него это не всегда получается.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, хоть старается.