[Решено] [Libmaple F4] очень большой размер эскизов при использовании Malloc ()

victor_pv
Чт 17 августа 2017 г. 14:25
[Решение в этом посте] http: // www.STM32duino.com/viewtopic.PHP ... 093#P33153

Я только что заметил, когда проверял некоторую проблему с Slaeber из другой ветки, которая составил этот эскиз из Rick производит около 13 КБ в Maple Mini, но более 60 КБ в универсальном F4 с использованием последнего репо Стива.
Но я мог тестировать только в Слове, потому что обе мои установки Arduino 1.6.1 и 1.8.3 не смог компилировать для F4 с разными ошибками, я думаю, что путь слишком длинный или что -то в этом роде. Поэтому, хотя я пытаюсь решить это, будет признателен, если кто -то еще попытается скомпилировать этот набросок с Arduino IDE и посмотреть, что такое размер кода.
Ссылка на публикацию с тестовым кодом:
ViewTopic.PHP?F = 41&t = 2434&начало = 50#P33019

Рик Кимбалл
Чт 17 августа 2017 г. 14:43
Проблема, наверное, та же самая обсуждалась здесь:

http: // www.STM32duino.com/viewtopic.PHP?f = 3&T = 1904

Изменения на платформу.TXT был неровным, потому что некоторые люди используют Freertos

https: // github.com/rogerclarkmelbourne/ ... Проблемы/296

fpistm
Чт 17 августа 2017 г. 15:17
Со Стивом Репо и рукой GCC 6

Maple Mini: Sketch uses 17524 bytes (15%) of program storage space. Maximum is 110592 bytes. Global variables use 3976 bytes (22%) of dynamic memory, leaving 13432 bytes for local variables. Maximum is 17408 bytes.

victor_pv
Чт 17 августа 2017 г. 15:34
Спасибо, ребята, по крайней мере, это подтверждает.
Рецепт F4 по-прежнему включает в себя-whole-archive, который может иметь какое-то отношение к включению USB, даже если не используется, но есть больше, чем USB-код, поэтому я сделал тест, добавив сериал.начинать и серийно.Печать и добавить примерно на 5-7 КБ больше.
Wehn я вернусь домой, я проверю .карта файл, чтобы попытаться увидеть, что еще втягивается.

@RICK, поскольку исправление в этом потоке не было добавлено в ядро, F1 не использует его, а тот же эскиз занимает только 13 КБ или около того, должно быть что -то еще, что затрагивает размер настолько большего на F4.
Я постараюсь сделать еще несколько тестов, когда вернусь домой, и, надеюсь.

@Fredericer, вы пробовали собирать то же самое с официальным ядром STM в Arduino? Если да, то какой размер кода?

fpistm
Чт 17 августа 2017 г. 16:15
С arduino_core_stm32 и arm gcc 6 (примечание: с -ос флага и -фно -threadsafe -statics для C и CPP):

Для диско F407G: Sketch uses 11092 bytes (1%) of program storage space. Maximum is 1048576 bytes. Global variables use 2552 bytes (1%) of dynamic memory, leaving 194056 bytes for local variables. Maximum is 196608 bytes.

victor_pv
Пт 18 августа 2017 г. 12:15
От моего .Файл карты, некоторые из крупнейших кусков - это: .text 0x080044d8 0x5784 c:/sloeber/arduinoplugin/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/lib/armv7e-m\libstdc++.a(cp-demangle.o) 0x08009b7c __cxa_demangle

fpistm
Пт 18 августа 2017 г., 5:30 утра
Кажется, Libstdc ++ добавляется Slaeber в опции ссылки. Это действительно нужно?

victor_pv
Пт 18 августа 2017 г. 14:18
Я сделал еще несколько тестирования.
Комментируя новый звонок (), подносят размер эскиза до 12 КБ
// глупо = новый тупой;

Линия с Malloc () не оказывает существенного влияния, эта:
buffer = (char *) malloc (1024);

При проверке .Файл карты, который я вижу, вытягивают из STDC ++, так что это то, что тянет эту библиотеку. Затем он сделал поиск в репо для нового, так как я помню, что в ядре была реализация, и обнаружил, что это было только в репо F1, Роджер добавил ее некоторое время назад:
https: // github.com/rogerclarkmelbourne/ ... 2A824D80B7

Добавление этого файла в F4 решает проблему при составлении его в Sloeber, но мой Arduino IDE все еще не работает, поэтому не могу проверить на нем.

Сможет ли кто -то также проверить и подтвердить его в Arduino Ide также? У меня не было времени, чтобы устранить проблемы с IDE, так как вместо этого я использовал время для устранения неполадок в этом размере, так как это все равно повлияло на оба IDE.

fpistm
Пт 18 августа 2017 г. 15:28
Я добавил новый.CPP затем для общего F407V: Sketch uses 14052 bytes (2%) of program storage space. Maximum is 514288 bytes. Global variables use 7384 bytes (5%) of dynamic memory, leaving 123688 bytes for local variables. Maximum is 131072 bytes.

Пито
Пт 18 августа 2017 г. 15:39
Arduino Ide 1.6.14 и более старый репо Стива (15 апреля), вариант generic_f407v, тест Рика выше (прокомментировано световые), без исправления, без патча: Linking everything together... "C:\Users\pito\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-g++" -Os -Wl,--gc-sections -mcpu=cortex-m4 "-TC:\Users\pito\MyCode\Arduino\hardware\Arduino_STM32SerBuff\STM32F4SS\variants\generic_f407v/ld/jtag.ld" "-Wl,-Map,C:\Users\pito\AppData\Local\Temp\arduino_build_423602/RICK_TEST.ino.map" "-LC:\Users\pito\MyCode\Arduino\hardware\Arduino_STM32SerBuff\STM32F4SS\variants\generic_f407v/ld" -o "C:\Users\pito\AppData\Local\Temp\arduino_build_423602/RICK_TEST.ino.elf" "-LC:\Users\pito\AppData\Local\Temp\arduino_build_423602" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "C:\Users\pito\AppData\Local\Temp\arduino_build_423602\sketch\RICK_TEST.ino.cpp.o" "C:\Users\pito\AppData\Local\Temp\arduino_build_423602\core\stm32_isrs.S.o" "C:\Users\pito\AppData\Local\Temp\arduino_build_423602\core\stm32_vector_table.S.o" "C:\Users\pito\AppData\Local\Temp\arduino_build_423602\core\wirish\start.S.o" "C:\Users\pito\AppData\Local\Temp\arduino_build_423602\core\wirish\start_c.c.o" "C:\Users\pito\AppData\Local\Temp\arduino_build_423602\core\generic_f407v.cpp.o" "C:\Users\pito\AppData\Local\Temp\arduino_build_423602/core\core.a" -Wl,--end-group c:/users/pito/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/lib/armv7e-m\libnosys.a(sbrk.o): In function `_sbrk': sbrk.c:(.text._sbrk+0x30): warning: undefined reference to `end' "C:\Users\pito\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-objcopy" -O binary "C:\Users\pito\AppData\Local\Temp\arduino_build_423602/RICK_TEST.ino.elf" "C:\Users\pito\AppData\Local\Temp\arduino_build_423602/RICK_TEST.ino.bin" Sketch uses 70,464 bytes (13%) of program storage space. Maximum is 514,288 bytes. Global variables use 15,568 bytes of dynamic memory.

Рик Кимбалл
Пт 18 августа 2017 г. 16:05
[victor_pv - Пт 18 августа 2017 г. 14:18] - При проверке .Файл карты, который я вижу, вытягивают из STDC ++, так что это то, что тянет эту библиотеку. Затем он сделал поиск в репо для нового, так как я помню, что в ядре была реализация, и обнаружил, что это было только в репо F1, Роджер добавил ее некоторое время назад:
https: // github.com/rogerclarkmelbourne/ ... 2A824D80B7
Если вы собираетесь добавить вещи .... Это может быть хорошим дополнением к новым.CPP:
inline void * operator new( size_t sz, void * here ) { return here; } inline void * operator new[]( size_t sz, void * here ) { return here; }

victor_pv
Пт 18 августа 2017 г., 17:55
Рик, наверное, мы должны добавить его в F1.
Я добавлю функции в новый F1 и F4.Файлы CPP и отправлять PRS.

РЕДАКТИРОВАТЬ:
И просто угадывает в примере выше, это:
Дамптер;
на самом деле должно быть:
DIMP_PTR;

victor_pv
Пт 18 августа 2017 г. 18:32
Рик, ты успешно проверил это?
Я не могу использовать эти операторы, даже с версией libstd ++ (удалить новый.CPP): ..\malloc_test.ino:41:33: error: no matching function for call to 'operator new(sizetype, unsigned int [12])' dumb_ptr = new(memory_buffer) dumbclass; ^ ..\malloc_test.ino:41:33: note: candidate is: :0:0: note: void* operator new(unsigned int) :0:0: note: candidate expects 1 argument, 2 provided

Рик Кимбалл
Пт 18 августа 2017 г. 18:58
Извините, если вы включите этот код в новый.CPP .. «Встроенный», вероятно, получил его оптимизирован. Я проверил этот код с размещением новых встроенных функций в .INO -файл.

Лучше всего - поместить эти функции в «новые.h "и есть ардуино.H включает в себя "новый.h "что -то, чтобы сделать еще один день. Забудьте, что я когда -либо упоминал; )

victor_pv
Пт 18 августа 2017 г. 20:36
Я думал, что у Libstdc ++ будет декларация, как и для других «новых» операторов. Удивительно, но я вижу функции в файле «новый» в папках GCC, но даже не составленные и дал ошибку выше.
Что ж, мы будем работать над этим в какой -то момент, на данный момент я отправлю пиар, чтобы просто добавить новый.CPP на F4, чтобы он не тянул Libstdc ++, тогда мы можем посмотреть на добавление этого как отдельный PR.

Рик Кимбалл
Пт 18 августа 2017 г. 8:50 вечера
Если человек собирается использовать C ++ Новый со встроенными чипсами, он может сделать себя хорошо, чтобы понять пулы памяти и новые для классов.

У Книга Скотта Мейерса C ++ есть отличные советы там.

Поиск Google: Скотт Мейерс Эффективный C ++ Pool FileType: PDF

victor_pv
Пт 18 августа 2017 г. 20:59
У меня есть эффективное второе издание C ++ на полке ;) на полпути через...
Есть много советов о занятиях, что гораздо больше, чем у моего мозга, нужно помнить...

Ядро F401 ветвь на GitHub SheepDoll

SPI на STM32F4