Перейти к содержанию
    

Не используемые функции

Установил Keil. Создал проект через STM Cube.

 

При компиляции в проект включаются все функции, даже те которые не используются!!!!!!!

Таким образом не написав ни строчки, только включив одну стандартную библиотеку в проект потраченно уже несколько кило памяти.

Раньше при работе с другими компиляторами( к примеру MPLAB ) такого никогда небыло, компилятор сам автоматом выбрасывал не используемые функции.

Это можно как-то поправить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Библиотеки подключаются, но не используются. Тем самым не расходуется место. Можете попробовать их удалить и убедитесь, что размер бинарника при удалении не меняется

Изменено пользователем IgorKossak
бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При компиляции в проект включаются все функции, даже те которые не используются!!!!!!!

Раньше при работе с другими компиляторами( к примеру MPLAB ) такого никогда небыло, компилятор сам автоматом выбрасывал не используемые функции.

Смотрите внимательно файл карты памяти. Поищите слово remove. Не все так страшно. Но если хоть где в проекте есть printf, это тянет за собой сразу много чего.

Изменено пользователем KnightIgor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрите внимательно файл карты памяти. Поищите слово remove. Не все так страшно. Но если хоть где в проекте есть printf, это тянет за собой сразу много чего.

В том то и дело что ничего нет. Только конфигурация GPIO из стандартной библиотеки которая подключается при создании проекта из STM куба

Изменено пользователем Matic

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В том то и дело что ничего нет. Только конфигурация GPIO из стандартной библиотеки которая подключается при создании проекта из STM куба

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

 

P.S. Попробуйте установить птичку "One ELF Section per Function" в опциях проекта, закладка C/C++, и перекомпилировать.

Изменено пользователем KnightIgor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

map.txt

Птичька уже стояла по умолчанию

 

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

Чего они там инициализируют на столько флеши :wacko:

 

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

 

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

 

Еще один вопрос: как быстро перейти на описание переменной/функции. Опять же привык что во всех современных компиляторах(по крайней мере с которыми мне приходилось работать) Ctrl + ЛМ и попадаешь на инициализацию.

В Keil пока нашёл только в контекстном меню, но это как то не очень удобно.

Можно ли настроить где-то?

Изменено пользователем Matic

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в STM32F030 всего 16К, если на инициализацию 3 тратить, то что дальше будет :)

Да вот ничего особенного и не будет :) Пока не жмет, можно не переживать из-за потери 3кБайт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще один вопрос: как быстро перейти на описание переменной/функции. Опять же привык что во всех современных компиляторах(по крайней мере с которыми мне приходилось работать) Ctrl + ЛМ и попадаешь на инициализацию.

В Keil пока нашёл только в контекстном меню, но это как то не очень удобно.

Можно ли настроить где-то?

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

 

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

 

map.txt

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

Чего они там инициализируют на столько флеши :wacko:

Действительно, много. Я глянул свой проект на F051, так у меня 432 байта... Но не HAL, а STL.

432         58          0         16          0        376   stm32f0xx_rcc.o

Изменено пользователем KnightIgor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто библиотека ФУНКЦИЙ ИНИЦИАЛИЗАЦИИ СЪЕДАЮТ 3000БАЙТ!!!!! :cranky:
Добро пожаловать в мир говнокода и глюкодрома. Теперь нужно выкинуть Cube и начать писать нормальный код.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Для интереса глянул на свое для STM32F103

Управление и универсальная функция инициализация (ноги) GPIO - 196/332* байта ПЗУ

Управление всем тактированием - 356/520*

Драйвер UART (без DMA, на все каналы) - 856/1132*

FreeRTOS - 4150/3318*

 

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

 

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

На STM32F0 (с FreeRTOS) - 21 килобайт (с максимальной оптимизацией)

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

 

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

 

Так что не все так плохо. Нет причин паниковать. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так что не все так плохо. Нет причин паниковать. :)
Так паника не про PIC vs STM32. Паника про качество кода от ST и от всех остальных производителей железа.

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так паника не про PIC vs STM32. Паника про качество кода от ST и от всех остальных производителей железа.

 

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

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

 

А качество кода- это понятие очень субъективное, у каждого оно свое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Говорят, что это почти HAL по избыточности.

Ничего это не HAL. Там как раз, если выкинуть Assert, все довольно компактно. Есть только функции по работе с железом, типа создал структуру с настройками - проинициализировал.

В HAL (cube) совершенно другой уровень абстракции. Там за пользователя написаны обработчики прерываний на несколько страниц, проверяющее все возможные флаги, реализующие стейт машины для приемопередатчиков, вызывающие каллбеки пользователя. Для работы со всем этим, само собой, есть уйма функций верхнего уровня.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...