Ненужные вещи из библиотеки, связанные

Арпрос
Солнце 04 февраля 2018 г. 15:05
Если я включаю один файл заголовка из библиотеки, насколько я могу судить все код и данные из библиотеки, связаны, даже вещи, которые совершенно не имеют значения.

Например: #include "usb_generic.h" void setup() {} void loop() {}

Арпрос
Солнце 04 февраля 2018 г. 16:19
Хорошо, я понял, что происходит. Когда библиотека определяет экземпляр класса, код конструктора для экземпляра связан, даже если на этот экземпляр никогда не ссылается на что -либо еще, и этот код конструктора может привлечь кучу других вещей в. Моя библиотека USBHID определяет множество удобств (E.глин., Клавиатура, композитория и т. Д.). Я не уверен, как это лучше.

victor_pv
Солнце 04 февраля 2018 г. 16:28
Возможно, оставьте экземпляры из файлов класса, поэтому пользователь определяет в эскизе, если они будут использоваться?

Арпрос
Солнце 04 февраля 2018 г. 16:33
[victor_pv - Солнце 04 февраля 2018 г. 16:28] - Возможно, оставьте экземпляры из файлов класса, поэтому пользователь определяет в эскизе, если они будут использоваться?
Это сработает, но я хочу сделать это как можно более дружелюбным для пользователя и имитировать, как работает ядро. Ядро определяет множество таких удобств, как Serial, Serial1 и т. Д.

Mrburnette
Солнце 04 февраля 2018 г. 16:36
Ответ, который вам не понравится, используйте только C для всего.
[Арпрос - Солнце 04 февраля 2018 г. 16:33] - Это сработает, но я хочу сделать это как можно более дружелюбным для пользователя и имитировать, как работает ядро. Ядро определяет множество таких удобств, как Serial, Serial1 и т. Д.
Я подозреваю, что простой использование для конечных пользователей Arduino была то, почему C ++ был избран для Arduino, но они все еще спорят об этом на Arduino.скандал

Если вы пойдете на поиски в Интернете, избегайте того, что было до-Ардуино 1.5.8 Потому что 1.5.8 Версия принципиально изменила большую часть средней методологии. https: // www.Ардуино.cc/en/main/oldsoftw ... ASES#1.5.х Октябрь 2014 года

Но это не проблема STM32, даже у подростков Dudes/Dudettes есть проблемы.

Луча

Стивестронг
Солнце 04 февраля 2018 г., 17:35
Вы можете попытаться отредактировать платформу.txt, добавив "-спецификации"Директивы компилятора: compiler.c.elf.extra_flags="-L{build.variant.path}/ld" -specs=nosys.specs -specs=nano.specs

Арпрос
Солнце 04 февраля 2018 г., 17:46
[Стивестронг - Солнце 04 февраля 2018 г., 17:35] - Вы можете попытаться отредактировать платформу.txt, добавив "-спецификации"Директивы компилятора:
Да, это уменьшает размер.

Я все еще хотел. Было бы неплохо, если бы был какой -то способ определить экземпляр класса, который будет связан только в случае ссылки на класс. Но стандарты C ++, по -видимому, требуют, чтобы, если экземпляр создается, его конструктор вызывается, и, следовательно, по крайней мере, конструктор должен быть связан в связи с. И тогда любые виртуальные функции также должны быть связаны вместе с конструктором.

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

Mrburnette
Пн, 05 февраля 2018 г., 4:19
[Арпрос - Солнце 04 февраля 2018 г., 17:46] - ...
Есть ли способ разделить библиотеку Arduino, поэтому в зависимости от того, какие файлы заголовков вы включаете, только часть библиотеки включена?
Вы можете поместить любую библиотеку в свою локальную папку эскиза .... .рука .Файлы CPP становятся вкладками. Вы ссылаетесь на них в #include "./файл.xxx ", а не использование скобки <...>

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

Луча

Арпрос
Пн, 05 февраля 2018 г., 4:38 утра
Кажется, что проблема заключалась в том, что конструктор для класса, который содержит виртуальную функцию, заставляет виртуальные функции быть связанными, даже если они никогда не вызывают код. Поскольку классы, у которых у меня были удобные примеры, были виртуальные функции, это означало, что многие ненужные кода получали связанный. Я закончил переписать без виртуальных функций, и было сохранено много оперативной памяти и вспышки.

Mrburnette
Пн, 05 февраля 2018 г., 13:37
[Стивестронг - Солнце 04 февраля 2018 г., 17:35] - ...
Я использую это в моем репо, это значительно уменьшает размер кода до сих пор без боковых проблем.
Нооб предупреждение:
Компилятор GCC и связанные с ними программные инструменты удивительно сложны... Вот почему Arduinoide скрывает этот беспорядок от среднего пользователя. Пожалуйста, поймите, если вы отклоняетесь от дефолтов, вы сами (на мой взгляд). Для этих любознательных, здесь доступен список вариантов: https: // gcc.гну.org/onlinedocs/gcc/option-index.HTML


Луча

michael_l
Пн, 05 февраля 2018 г. 16:51
[Стивестронг - Солнце 04 февраля 2018 г., 17:35] - Вы можете попытаться отредактировать платформу.txt, добавив "-спецификации"Директивы компилятора: compiler.c.elf.extra_flags="-L{build.variant.path}/ld" -specs=nosys.specs -specs=nano.specs

Рик Кимбалл
Пн, 05 февраля 2018 г., 21:47
[michael_l - Пн, 05 февраля 2018 г. 16:51] - По крайней мере, формат printf %не будет работать. Но есть возможность включить %F, но не может вспомнить, что с моей головы.
ViewTopic.PHP?f = 3&t = 1241&начало = 20#p38392

SPI DMA функции