реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Не используемые функции, Keil
Matic
сообщение Nov 23 2015, 12:56
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 155
Регистрация: 30-06-10
Пользователь №: 58 210



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

При компиляции в проект включаются все функции, даже те которые не используются!!!!!!!
Таким образом не написав ни строчки, только включив одну стандартную библиотеку в проект потраченно уже несколько кило памяти.
Раньше при работе с другими компиляторами( к примеру MPLAB ) такого никогда небыло, компилятор сам автоматом выбрасывал не используемые функции.
Это можно как-то поправить?
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Nov 23 2015, 13:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



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

Сообщение отредактировал IgorKossak - Nov 23 2015, 13:22
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Nov 23 2015, 13:43
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



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

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

Сообщение отредактировал KnightIgor - Nov 23 2015, 13:56
Go to the top of the page
 
+Quote Post
Matic
сообщение Nov 23 2015, 14:22
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 155
Регистрация: 30-06-10
Пользователь №: 58 210



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

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

Сообщение отредактировал Matic - Nov 23 2015, 14:23
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Nov 23 2015, 14:33
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



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

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

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

Сообщение отредактировал KnightIgor - Nov 23 2015, 15:12
Go to the top of the page
 
+Quote Post
Matic
сообщение Nov 23 2015, 15:59
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 155
Регистрация: 30-06-10
Пользователь №: 58 210



Цитата(KnightIgor @ Nov 23 2015, 17:33) *
Киньте MAP файл.

Прикрепленный файл  map.txt ( 47.99 килобайт ) Кол-во скачиваний: 405

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

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

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

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

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

Сообщение отредактировал Matic - Nov 23 2015, 15:55
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 23 2015, 16:04
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Matic @ Nov 23 2015, 18:59) *
в STM32F030 всего 16К, если на инициализацию 3 тратить, то что дальше будет sm.gif

Да вот ничего особенного и не будет sm.gif Пока не жмет, можно не переживать из-за потери 3кБайт.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Nov 23 2015, 16:45
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(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) *
Прикрепленный файл  map.txt ( 47.99 килобайт ) Кол-во скачиваний: 405

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

Действительно, много. Я глянул свой проект на F051, так у меня 432 байта... Но не HAL, а STL.
Код
432         58          0         16          0        376   stm32f0xx_rcc.o


Сообщение отредактировал KnightIgor - Nov 23 2015, 16:47
Go to the top of the page
 
+Quote Post
ataradov
сообщение Nov 23 2015, 17:52
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (Matic @ Nov 23 2015, 09:59) *
Просто библиотека ФУНКЦИЙ ИНИЦИАЛИЗАЦИИ СЪЕДАЮТ 3000БАЙТ!!!!! cranky.gif
Добро пожаловать в мир говнокода и глюкодрома. Теперь нужно выкинуть Cube и начать писать нормальный код.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Nov 24 2015, 06:15
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



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

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

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


Конечно, пока не жмет, или очень быстро надо сделать/попробовать - можно и куб.
Иногда помогает понять, почему собственный код не работает.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 24 2015, 20:11
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



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

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

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

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

Так что не все так плохо. Нет причин паниковать. sm.gif
Go to the top of the page
 
+Quote Post
ataradov
сообщение Nov 24 2015, 20:16
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



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

Если писать все по-человечески, то понятно, что все нормально будет.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 24 2015, 20:39
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



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

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

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

А качество кода- это понятие очень субъективное, у каждого оно свое.
Go to the top of the page
 
+Quote Post
drozel
сообщение Nov 25 2015, 05:00
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(Ruslan1 @ Nov 25 2015, 02:39) *
Говорят, что это почти HAL по избыточности.

Ничего это не HAL. Там как раз, если выкинуть Assert, все довольно компактно. Есть только функции по работе с железом, типа создал структуру с настройками - проинициализировал.
В HAL (cube) совершенно другой уровень абстракции. Там за пользователя написаны обработчики прерываний на несколько страниц, проверяющее все возможные флаги, реализующие стейт машины для приемопередатчиков, вызывающие каллбеки пользователя. Для работы со всем этим, само собой, есть уйма функций верхнего уровня.
Go to the top of the page
 
+Quote Post
Matic
сообщение Nov 26 2015, 13:12
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 155
Регистрация: 30-06-10
Пользователь №: 58 210



А SPL для STM где найти/скачать можно?
Если не сложно поделитесь ссылочкой
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01917 секунд с 7
ELECTRONIX ©2004-2016