Компилятор генерирует довольно высокое использование вспышки

michael_l
Вт 29 ноября 2016 г., 8:02 вечера
Короче говоря. Я попробовал библиотеку Arduinojson, и кажется, что компилятор генерирует дополнительные вещи в файле Flash
#включать <Arduinojson.час>

void setup () {
Сериал.начало (9600);
Сериал.println («Вы знаете, я толстый, я толстый, вы знаете»);

Staticjsonbuffer<200> jsonbuffer;

char json [] =
"{\" Датчик \ ": \" gps \ ", \" Time \ ": 1351824120, \" Data \ ": [48.756080,2.302038]} ";

// jsonObject& root = jsonbuffer.ParseObject (json);

}

void loop () {}
Этот файл Genrates 12KB. Если я расстроен линию с 'parseObject' размер ~ 75 КБ.

Прилагается отличается от cmdline:
C:\Users\michael\.platformio\packages\toolchain-gccarmnoneeabi\bin>arm-none-eabi-nm.exe --size-sort -C -r C:\Users\mika\AppData\Local\Temp\build6e0206c4052a2b088e47e64ac9275fbc.tmp\arduino_json_EEPROM.ino.elf

Даниэфф
Вт 29 ноября 2016 г., 8:34 вечера
Это то же самое, что ViewTopic.PHP?f = 14&t = 1502 , и в основном использование нового/маллока в коде.

Не могли бы вы что -нибудь попробовать: положить это --specs=nano.specs

michael_l
Вт 29 ноября 2016 г., 8:42 вечера
Спасибо за быстрый ответ! Я попробую, но завтра.

Rogerclark
Вт 29 ноября 2016 г., 8:58 вечера
Я думаю, что решение состоит в том, чтобы добавить «новые» функции из кода Arduino Sam.

Я постараюсь сделать это сегодня.

Rogerclark
Вт 29 ноября 2016 г., 11:16 вечера
Попробуйте снова загрузить репо.

Я добавил новый.CPP от Arduino Samd

Похоже, что при использовании «нового» оператора многое использует флэш -память

Однако у меня нет кода, чтобы проверить его с.

Rogerclark
Вторник 29 ноября 2016 г. 11:18
Редактировать.

Только что попробовал это так

Adafruit_PCD8544 *display = new Adafruit_PCD8544(27, 28, 29);

michael_l
Ср 30 ноября 2016 г., 5:15 утра
Rogerclark написал:Попробуйте снова загрузить репо.

Я добавил новый.CPP от Arduino Samd

Похоже, что при использовании «нового» оператора многое использует флэш -память

Однако у меня нет кода, чтобы проверить его с.

Даниэфф
Ср 30 ноября 2016 г., 5:48
Это связано с тем, что Arduinojson использует еще более сложный буферный новый в jsonbufferallocated.HPP, а не стандартный новый: void *operator new(size_t n, JsonBuffer *jsonBuffer) throw() { ... List.hpp: new (_buffer) node_type();

Rogerclark
Ср 30 ноября 2016 г., 6:19
Я не уверен, что Nano-Spec исправит это.

Re: новый.CPP

Я использую тот, который из Arduino Sam Core, поэтому я подозреваю, что JSON Lib также будет иметь аналогичные проблемы с использованием вспышки на этом ядре.

Помимо времени, необходимого для загрузки, 75K, вероятно, в порядке, потому что даже синие таблетки обычно имеют 120 тыс

КСТАТИ.
Я оставлю новый новый.CPP на месте, как для большинства вещей, это, вероятно, лучше, чем ничего.

michael_l
Ср 30 ноября 2016 г., 6:53
@Roger: текущий проект занимает до 60 КБ вспышки и добавление еще 60 тыс. Также я планировал использовать дополнительную вспышку для хранения. BU, я только что получил несколько флэш -чипсов Winbond SPI, так что не беспокойтесь. Интересно, есть ли проект, который позволил бы вам использовать FAT32 или какую -либо другую файловую систему в SPI Flash Chip.

В любом случае.. Вставка немного больше информации об этом -specs = nano.Спецификация, которую я нашел здесь:

http: // pabigot.GitHub.io/bspacm/newlib.HTML

Кажется, существуют разные варианты Newlib, и если мы инструктируем «Nano», меньший LIBC связан в. Не знал об этом до сих пор. Я расскажу, если найду какое -то странное поведение, используя это
Оптимизация пространства с newlib-nano

Несмотря на то, что Newlib был разработан для встроенных систем, он исторически был непригодным для микроконтроллеров из -за относительно больших требований к памяти, E.глин. 1 Kib SRAM для поддержки Malloc, 25 киб Flash для поддержки Printf и т. Д.

С добавлением варианта, называемого Newlib-Nano, это уже не так. Newlib-nano был реализован специально для ARM в инструментах GNU для встроенных рук процессоров, и некоторые из его улучшений были объединены вверх по течению.

Добавив -specs = nano.спецификации к команде ссылки GCC, LIBC уменьшенного размера связан в. Эффект этого является значительным. Размер классической программы «Hello», составленной для комплекта EFM32GG-STK3700 с традиционным Newlib под 4_8-2013Q4:

LLC [56] $ RM App.Axf; сделать с помощью_nano = 0 приложение.Аксф
ARM-None-Eabi-GCC -O приложение.AXF -L/PRJ/ARM/BSPACM // Плата/EFM32GG -STK3700 -GGDB -WL, -GC -SECTION -SECTION -WL, -T,/PRJ/ARM/BSPACM // Toolchain/GCC/GCC_ARM.ld -l/prj/arm/bspacm // device/efm32/efm32gg/efm32gg990f1024 -mthumb -mcpu = cortex -m3 system_efm32gg.o Main.o startup_armcm3.o periph_config.o -Wl,-Start-Group -lc -Lemlib -lbspacm-fdops -lbspacm -Wl,-конечная группа
приложение размером с Arm-None-Eabi.Аксф
Текстовые данные BSS DEC HEX FILENAME
27832 2340 116 30288 7650 приложение.Аксф

Та же программа, связанная с Newlib-Nano, составляет треть The Flash, а одна десятая часть SRAM:

LLC [57] $ RM App.Axf; делать с помощью_nano = 1 приложение.Аксф
ARM-None-Eabi-GCC -O приложение.AXF -L/PRJ/ARM/BSPACM // Плата/EFM32GG -STK3700 -GGDB -WL, -GC -SECTION -SECTION -WL, -T,/PRJ/ARM/BSPACM // Toolchain/GCC/GCC_ARM.ld -l/prj/arm/bspacm // device/efm32/efm32gg/efm32gg990f1024 -specs = nano.Spects -mthumb -mcpu = Cortex -M3 System_efm32gg.o Main.o startup_armcm3.o periph_config.o -wl,-Start-Group -lc_s -Lemlib -lbspacm-fdops -lbspacm -wl,-конечная группа
приложение размером с Arm-None-Eabi.Аксф
Текстовые данные BSS DEC HEX FILENAME
8720 232 72 9024 2340 приложение.Аксф

Rogerclark
Ср 30 ноября 2016 г. 8:18
Майкл

ХОРОШО.

Большинство людей только в конечном итоге используют 20-30 тыс., Поэтому добавление 50K по -прежнему не является проблемой, но я ценю, что вам нужно также использовать вспышку.

Вы можете попробовать использовать собственное официальное ядро ​​STM (которое мы изменили для поддержки синей таблетки F103)
(См. Пост в ветке объявлений) - но я подозреваю, что у него будет такая же проблема

Вы пробовали собрать тот же код для Arduino Zero или Arduino Due, или даже для AVR. Было бы интересно узнать, как сравниваются эти ядра.

Вы также можете попробовать загрузить Teensy Core (не уверен, что это все еще отдельная IDE или установленное ядро), поскольку Пол прикладывает много усилий в поддержку подростковой экосистемы

Даниэфф
Ср 30 ноября 2016 г., 9:06
Rogerclark написал: Вы можете попробовать использовать собственное официальное ядро ​​STM (которое мы изменили для поддержки синей таблетки F103)
(См. Пост в ветке объявлений) - но я подозреваю, что у него будет такая же проблема

michael_l
Ср 30 ноября 2016 г., 9:28
Даниэфф написал:Rogerclark написал: Вы можете попробовать использовать собственное официальное ядро ​​STM (которое мы изменили для поддержки синей таблетки F103)
(См. Пост в ветке объявлений) - но я подозреваю, что у него будет такая же проблема

Пито
Ср 30 ноября 2016 г., 11:53
Интересно, есть ли проект, который позволил бы вам использовать FAT32 или какую -либо другую файловую систему в SPI Flash Chip. https: // github.com/greiman/ramdisk
Можно использовать со SPI Fram/Mram/SRAM и, возможно, со Flash (после некоторых изменений).
Я не проверял это.

michael_l
Ср 30 ноября 2016 г., 19:19
Пито написал:Интересно, есть ли проект, который позволил бы вам использовать FAT32 или какую -либо другую файловую систему в SPI Flash Chip. https: // github.com/greiman/ramdisk
Можно использовать со SPI Fram/Mram/SRAM и, возможно, со Flash (после некоторых изменений).
Я не проверял это.

michael_l
Чт, 01 декабря 2016 г., 17:16
Rogerclark написал:Майкл

ХОРОШО.

Большинство людей только в конечном итоге используют 20-30 тыс., Поэтому добавление 50K по -прежнему не является проблемой, но я ценю, что вам нужно также использовать вспышку.

Вы можете попробовать использовать собственное официальное ядро ​​STM (которое мы изменили для поддержки синей таблетки F103)
(См. Пост в ветке объявлений) - но я подозреваю, что у него будет такая же проблема

Вы пробовали собрать тот же код для Arduino Zero или Arduino Due, или даже для AVR. Было бы интересно узнать, как сравниваются эти ядра.

Вы также можете попробовать загрузить Teensy Core (не уверен, что это все еще отдельная IDE или установленное ядро), поскольку Пол прикладывает много усилий в поддержку подростковой экосистемы

Giancarlocp
Ср 14 декабря 2016 г. 11:59 вечера
Базовый тест на использование памяти на Generic STM32F103C8 (64 -килограммовая вспышка)
Я использую Arduino 1.6.13, я установил «Arduino Zero» из «Manager» доски
и GitHub.com/rogerclarkmelbourne/arduino_stm32 в Ubuntu 16.04 64 бит.

- Программа A:
void setup () {}
void loop () {}

- Программа B:
int main () {}

Добавление -specs = nano.Спецификации в платформе STM32F1/.txt 'в конце линии, начиная с:
рецепт.в.комбинировать.шаблон = ... --Spects = nano.спецификации

=== Ubuntu 16.04 64 бит (нет нано.спецификации)
А
Sketch использует 12 428 байт (18%) пространства для хранения программ. Максимум составляет 65 536 байтов.
Глобальные переменные используют 2816 байтов динамической памяти.
Беременный
Sketch использует 9 468 байтов (14%) пространства для хранения программ. Максимум составляет 65 536 байтов.
Глобальные переменные используют 2632 байта динамической памяти.
=== Ubuntu 16.04 64 -бит (с нано.спецификации)
А
Sketch использует 10 892 байта (16%) пространства для хранения программ. Максимум составляет 65 536 байтов.
Глобальные переменные используют 1848 байтов динамической памяти.
Беременный
Sketch использует 7 932 байта (12%) пространства для хранения программ. Максимум составляет 65 536 байтов.
Глобальные переменные используют 1664 байта динамической памяти.

Перед Нано.спецификации
2016-12-14-181059_848x290.png
2016-12-14-181059_848x290.PNG (9.86 киб) просмотрено 531 раз

Mrburnette
Чт 15 декабря 2016 г., 3:51
У нас было это обсуждение ранее, но, возможно, оно было на старом ардуино.CC Forum.

В любом случае - ничего не приходит бесплатно:
https: // www.сообщество.рука.com/IoT/ulced ... кровать-4-7

Вы торгуете скоростью для оптимизации размера, а также некоторые функции. Вероятно, это не повлияет на начинающих программистов, IMO.

Однако, если у кого -то есть 128 тыс. Флэш и 20K SRAM и и программа работает должным образом при составлении без флага Nano, нет необходимости уменьшить флеш -след... Не то чтобы вы получите чек в почте от ST за то, что они не используют всю вспышку!

Что -то вроде одного из тех «каких -либо» движений для меня.

К вашему сведению ... Cypress PSOC автоматически по умолчанию на Nano... Но затем Cypress настаивает на источнике только C, хотя C ++ может быть настроен.

Луча

Даниэфф
Чт 15 декабря 2016 г. 5:39 утра
Giancarlocp написал:Где все эта память?

Пито
Чт 15 декабря 2016 г. 9:31 утра
Прохладный! Интересно - различия в размере..
..Использование анализатора..

Giancarlocp
Чт 15 декабря 2016 г. 11:25 утра
Я заметил, что в моем старом ноутбуке 32Bits есть разница (Ubuntu 14.04) и мои новые 64 бит (Ubuntu 16.04).
Я сделал те же шаги (описанные ранее), в тот же день (одинаково обновленный), чтобы установить все инструменты в обеих системах.

Я прикрепил 4 файла карты в zip, все скомпилированы с Nano.спецификации.
sketch_dec14x был составлен в Ubuntu16.04_64bit, где 'x' - это 'a' или 'b'
sketch_dec15x был составлен в Ubuntu14.04_32bit

=== Ubuntu 14.04 32 бит (нет нано.спецификации)
А
Sketch использует 6 132 байта (9%) пространства для хранения программы. Максимум составляет 65 536 байтов.
Глобальные переменные используют 1 984 байта динамической памяти.
Беременный
Sketch использует 4604 байта (7%) пространства для хранения программ. Максимум составляет 65 536 байтов.
Глобальные переменные используют 1896 байтов динамической памяти.
=== Ubuntu 14.04 32 бит (с нано.спецификации)
А
Sketch использует 4676 байтов (7%) пространства для хранения программ. Максимум составляет 65 536 байтов.
Глобальные переменные используют 1016 байтов динамической памяти.
Беременный
Sketch использует 3148 байт (4%) пространства для хранения программ. Максимум составляет 65 536 байтов.
Глобальные переменные используют 928 байтов динамической памяти.

Даниэфф, спасибо за анализатор.
Rogerclark, спасибо за arduino_stm32.

Стивестронг
Чт 15 декабря 2016 12:51
Разница между «dec14x» и «dec15x» заключается в том, что «dec14x» содержит USB Serial+CDCACM+Core, который «dec15x» не.

Разница между «dec1xa» и «dec1xb» заключается в том, что «dec1xa» содержит основную.CPP, но не отказался от некоторых разделов, связанных с ADC, NVIC и RCC.

Giancarlocp
Чт 15 декабря 2016 г. 14:41
Stevestrong, спасибо за судебно -медицинскую диагностику.
Как вы определяете это? И что еще важнее, где/как настроить эти варианты?

Суммировать результаты.
______________________________________________
ЗагрузитьStlinkЗагрузитьСериал˙diff(ST-SE)
спецификации˙˙˙a˙˙b˙˙a˙˙b˙˙a˙˙b
-12 4289 4686,13246046 2964864
нано10 8927,9324676314862164784
˙diff˙1,536153614561456
Отредактировано после ответа Даниэффа.

Даниэфф
Чт 15 декабря 2016 г. 14:52
На Ubuntu 14 x32 вы, скорее всего, выбрали другой метод загрузки, который не компилируется USB -сериал в код.
Дважды проверьте, что на обоих компьютерах вы выбрали одни и те же платы и методы загрузки.

Стивестронг
Чт 15 декабря 2016 г. 15:23
Giancarlocp написал:Как вы определяете это?

michael_l
Пт 23 декабря 2016 г. 13:51
Хорошо, я только что узнал, что если я использую -specs = nano.Спецификация я теряю функцию «sprintf».

Mrburnette
Пт 23 декабря 2016 г. 16:47
michael_l написал:Хорошо, я только что узнал, что если я использую -specs = nano.Спецификация я теряю функцию «sprintf».

michael_l
Пт 23 декабря 2016 г., 17:36
Mrburnette написал:michael_l написал:Хорошо, я только что узнал, что если я использую -specs = nano.Спецификация я теряю функцию «sprintf».