Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не используемые функции
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Matic
Установил Keil. Создал проект через STM Cube.

При компиляции в проект включаются все функции, даже те которые не используются!!!!!!!
Таким образом не написав ни строчки, только включив одну стандартную библиотеку в проект потраченно уже несколько кило памяти.
Раньше при работе с другими компиляторами( к примеру MPLAB ) такого никогда небыло, компилятор сам автоматом выбрасывал не используемые функции.
Это можно как-то поправить?
RadiatoR
Библиотеки подключаются, но не используются. Тем самым не расходуется место. Можете попробовать их удалить и убедитесь, что размер бинарника при удалении не меняется
KnightIgor
Цитата(Matic @ Nov 23 2015, 13:56) *
При компиляции в проект включаются все функции, даже те которые не используются!!!!!!!
Раньше при работе с другими компиляторами( к примеру MPLAB ) такого никогда небыло, компилятор сам автоматом выбрасывал не используемые функции.

Смотрите внимательно файл карты памяти. Поищите слово remove. Не все так страшно. Но если хоть где в проекте есть printf, это тянет за собой сразу много чего.
Matic
Цитата(KnightIgor @ Nov 23 2015, 16:43) *
Смотрите внимательно файл карты памяти. Поищите слово remove. Не все так страшно. Но если хоть где в проекте есть printf, это тянет за собой сразу много чего.

В том то и дело что ничего нет. Только конфигурация GPIO из стандартной библиотеки которая подключается при создании проекта из STM куба
KnightIgor
Цитата(Matic @ Nov 23 2015, 15:22) *
В том то и дело что ничего нет. Только конфигурация GPIO из стандартной библиотеки которая подключается при создании проекта из STM куба

Киньте MAP файл.

P.S. Попробуйте установить птичку "One ELF Section per Function" в опциях проекта, закладка C/C++, и перекомпилировать.
Matic
Цитата(KnightIgor @ Nov 23 2015, 17:33) *
Киньте MAP файл.

Нажмите для просмотра прикрепленного файла
Птичька уже стояла по умолчанию

да... конфигурация тактироания весит 1176. Походу дело не в компиляторе. Просто библиотека ФУНКЦИЙ ИНИЦИАЛИЗАЦИИ СЪЕДАЮТ 3000БАЙТ!!!!! cranky.gif
Чего они там инициализируют на столько флеши wacko.gif

Похоже эта CMSIS универсальная для всех ARM-ов от ST отсюда и такая раздутость. За переносимость кода платить флешью sm.gif

Надо ручками инициализировать прям в регистры, всётаки не ПК память надо экономить, её не так много в STM32F030 всего 16К, если на инициализацию 3 тратить, то что дальше будет sm.gif

Еще один вопрос: как быстро перейти на описание переменной/функции. Опять же привык что во всех современных компиляторах(по крайней мере с которыми мне приходилось работать) Ctrl + ЛМ и попадаешь на инициализацию.
В Keil пока нашёл только в контекстном меню, но это как то не очень удобно.
Можно ли настроить где-то?
aaarrr
Цитата(Matic @ Nov 23 2015, 18:59) *
в STM32F030 всего 16К, если на инициализацию 3 тратить, то что дальше будет sm.gif

Да вот ничего особенного и не будет sm.gif Пока не жмет, можно не переживать из-за потери 3кБайт.
KnightIgor
Цитата(Matic @ Nov 23 2015, 16:59) *
Еще один вопрос: как быстро перейти на описание переменной/функции. Опять же привык что во всех современных компиляторах(по крайней мере с которыми мне приходилось работать) Ctrl + ЛМ и попадаешь на инициализацию.
В Keil пока нашёл только в контекстном меню, но это как то не очень удобно.
Можно ли настроить где-то?

В Кайле можно все горячие клавиши (но не мышь) переназначить. Для перехода к описанию:

Edit -> Configuration -> Shortcut Keys -> см. Edit: Advanced: Go to Definition of Current Word.

Цитата(Matic @ Nov 23 2015, 16:59) *
Нажмите для просмотра прикрепленного файла
да... конфигурация тактироания весит 1176. Походу дело не в компиляторе. Просто библиотека ФУНКЦИЙ ИНИЦИАЛИЗАЦИИ СЪЕДАЮТ 3000БАЙТ!!!!! cranky.gif
Чего они там инициализируют на столько флеши wacko.gif

Действительно, много. Я глянул свой проект на F051, так у меня 432 байта... Но не HAL, а STL.
Код
432         58          0         16          0        376   stm32f0xx_rcc.o
ataradov
QUOTE (Matic @ Nov 23 2015, 09:59) *
Просто библиотека ФУНКЦИЙ ИНИЦИАЛИЗАЦИИ СЪЕДАЮТ 3000БАЙТ!!!!! cranky.gif
Добро пожаловать в мир говнокода и глюкодрома. Теперь нужно выкинуть Cube и начать писать нормальный код.
Alechek
Цитата(Matic @ Nov 23 2015, 20:59) *
да... конфигурация тактироания весит 1176. Походу дело не в компиляторе. Просто библиотека ФУНКЦИЙ ИНИЦИАЛИЗАЦИИ СЪЕДАЮТ 3000БАЙТ!!!!! cranky.gif

Для интереса глянул на свое для STM32F103
Управление и универсальная функция инициализация (ноги) GPIO - 196/332* байта ПЗУ
Управление всем тактированием - 356/520*
Драйвер UART (без DMA, на все каналы) - 856/1132*
FreeRTOS - 4150/3318*

*(оптимизация вкл/выкл)


Конечно, пока не жмет, или очень быстро надо сделать/попробовать - можно и куб.
Иногда помогает понять, почему собственный код не работает.
Ruslan1
Про размер кода: я тут проектик несложный с PIC на STM32 перевожу. Расчетная часть( много с плавающей точкой) и всякие конечные автоматы те же, просто периферия переписана под новое железо и взаимодействие частей переписано под многозадачность.

На PIC18 проект занимал в флеше 22 килобайт (без RTOS), со средней оптимизацией

На STM32F0 (с FreeRTOS) - 21 килобайт (с максимальной оптимизацией)
не реализовал несколько незатратных действий (вроде поддержки еще одного SPI и простой обработки), ну, может, на 1-2 килобайта кода наскребу еще.

То есть разницы вообще нет. При всей разнице компиляторов, архитектур и разрядности. А если вспомнить, что в STM32 я еще и RTOS добавил- то вообще получается что код сократился.

Так что не все так плохо. Нет причин паниковать. sm.gif
ataradov
QUOTE (Ruslan1 @ Nov 24 2015, 14:11) *
Так что не все так плохо. Нет причин паниковать. sm.gif
Так паника не про PIC vs STM32. Паника про качество кода от ST и от всех остальных производителей железа.

Если писать все по-человечески, то понятно, что все нормально будет.
Ruslan1
Цитата(ataradov @ Nov 24 2015, 22:16) *
Так паника не про PIC vs STM32. Паника про качество кода от ST и от всех остальных производителей железа.

Если писать все по-человечески, то понятно, что все нормально будет.

Я забыл сказать, что тоже SPL использую в STM32. Говорят, что это почти HAL по избыточности. Ну и ничего. Особых издержек по сравнению с PIC без сторонних библиотек не вижу, так как даже с этими наворотами код плотнее чем у PIC18, мне еще плотней пока не нужно. Будет нужно- начну паниковать и выкидывать SPL.

А качество кода- это понятие очень субъективное, у каждого оно свое.
drozel
Цитата(Ruslan1 @ Nov 25 2015, 02:39) *
Говорят, что это почти HAL по избыточности.

Ничего это не HAL. Там как раз, если выкинуть Assert, все довольно компактно. Есть только функции по работе с железом, типа создал структуру с настройками - проинициализировал.
В HAL (cube) совершенно другой уровень абстракции. Там за пользователя написаны обработчики прерываний на несколько страниц, проверяющее все возможные флаги, реализующие стейт машины для приемопередатчиков, вызывающие каллбеки пользователя. Для работы со всем этим, само собой, есть уйма функций верхнего уровня.
Matic
А SPL для STM где найти/скачать можно?
Если не сложно поделитесь ссылочкой
Tarbal
Цитата(Matic @ Nov 26 2015, 16:12) *
А SPL для STM где найти/скачать можно?
Если не сложно поделитесь ссылочкой


Ruslan1 в похожей теме в форуме для начинающих дал наводку на видео уроки по STM. Там все есть.

Вот тема:
http://electronix.ru/forum/index.php?showtopic=131886
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.