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

39 minutes ago, dimka76 said:

HAL

Гм. Неужели этот код был так бездарно написан? Может быть линковщик не выбрасывал неиспользуемые функции, например? Что-то уж странное отношение размеров кода... Но всё может быть)

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


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

11 минут назад, haker_fox сказал:

Гм. Неужели этот код был так бездарно написан?

Ничего странного. Причина не только в самом Кале, но и в тех кто на нём калокодит. Посмотрите в начало этого топика:

21 час назад, Sergo1799 сказал:
    RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE;
    //Настройка коэффициентов PLL: PLLM = 6; PLLN = 8
    RCC->PLLCFGR |= (RCC_PLLCFGR_PLLM_0 | RCC_PLLCFGR_PLLM_2);
    RCC->PLLCFGR ^= RCC_PLLCFGR_PLLN_4;
    RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_3;

:shok:

Ведь если так не калокодить, но размер кода раз в 6 меньше получится. Что у dimka76 примерно и получилось.

Но - одного без другого не бывает: Каков Кал, таковы и калокодеры, по другому у них не получается.  :unknw:

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


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

On 6/2/2023 at 10:32 AM, jcxz said:

Посмотрите в начало этого топика:

:shok:

Что здесь не так ?

А, вы хотите сказать, что вместо одной строчки можно было бы все в одной строке написать ?

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


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

17 минут назад, haker_fox сказал:

Неужели этот код был так бездарно написан?

Нет, он был написан еще хуже :biggrin:. Когда запускал USB - собрал пример CDC из куба. 24 К флеша только USB CDC+эхо. Написал свой стек, упихал в ~5 К флеша USB CDC + дешифровку AES + прошивку флеша + обработку протокола и логики загрузчика.

4 минуты назад, dimka76 сказал:

Что здесь не так ?

Тупые чтение-модификация-запись в каждой операции вместо одного чтения и одной записи. Или вообще одной-единственной записи константы с нужным состоянием сразу всех битов регистра.

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


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

2 минуты назад, dimka76 сказал:

Что здесь не так ?

В смысле что? Отрубание хвоста по частям, естественно. Вместо одной записи.

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


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

On 6/2/2023 at 10:42 AM, jcxz said:

В смысле что? Отрубание хвоста по частям, естественно. Вместо одной записи.

Я уже выше отредактировал свое сообщение ))

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


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

16 minutes ago, jcxz said:

Каков Кал, таковы и калокодеры, по другому у них не получается.

В целом я с Вами полностью согласен! Но бывают и такие ситуации, когда тебе начальство прямым текстом говорит: не пиши свою писанину (да, примерно так), используй по максимуму CMSIS, драйверы из примеров IAR и т.п. И любые аргументы идут лесом. Типа так быстрее. А когда ты неделю ищешь ошибку в этом г...не (как я искал в IAP, Вы должны помнить), это уже не считается...

А то, что можно получить более крутого специалиста, который сам всё изучил, пусть и потратил на это время, им невдомёк. Поэтому, я отчасти понимаю тех, кто использует куб. Т.е. такие случаи возможны.

18 minutes ago, Сергей Борщ said:

Написал свой стек

Ого! Низко склоняю голову! Для меня написать стек USB - это вершина мастерства!

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


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

On 6/2/2023 at 10:50 AM, haker_fox said:

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

HAL написан с претензией на универсальность. Поэтому в нем для настройки любой периферии присутствует куча условий, который и увеличивают конечный размер кода.
Но даже при всем их стремлении к универсальности, полной универсальности не получается.

Здесь на форуме не редко возникают вопросы как сделать с помощью HAL то что позволяет сделать периферия, но не позволяет сделать сам HAL.
Еще заметил, в этом HAL полностью отсутствует поддержка IEEE 1588, хотя периферия микроконтроллеров STM32 имеет такую поддержку. 

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


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

Что-то странно что 30К заняло..

Два варианта старых проектов на F1: используются PLL, DMA, USB MSD,  SPI, I2C, IAP.

В одном проекте без хала и без CMSIS - 9К, из которых 4К - юсб стек + все системное, и 5К все остальное.

Системные файлы из Кейла, с некоторым допиливанием : startup.s system.c  usbcore.c  usbdesc.c  usbhw.c usbuser.c mscuser.c

 

Почти аналогичный проект на том-же проце но с халом - 15К, из которых сам хал с ЮСБ стеком - 7К,  и 8К - все остальное ("остального" тут сильно побольше, чем в варианте без хала).

Конечно, тут хал+юсб с халом занимает 7К, почти вдвое больше чем 4К в первом варианте. Но первый вариант был не только бех хала, но и без CMSIS, и там было все ужато до посинения.

 

P.S. Я вообще не часто использую хал, в основном для разных быстрых временных тестовых поделок, где главное - побыстрее получить результат. Это именно для эксперименов. Требований к памяти в них как правило никаких, а если есть требования к скорости - ну так этот кусок можно и полностью свой написать.

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

Но иногда я генерю кубом всю или почти всю начальную инициализацию, ибо для какого-нибудь F7 или H7, с прошивкой в сотни килобайт, займет эта инициализация 10К или 30К - глубоко пофиг, да и как правило, у меня основное место во флеше в таких проектах занимает не столько код, сколько RO-данные (массивы, таблицы). Вот работу в реалтайме с некоторой периферией, как правило прихдится делать свою, в хале в угоду универсальности "для всех случаев", многое сделано крайне не оптимально или просто  через ж-пу.

 

 

 

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


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

On 6/2/2023 at 11:13 AM, Allregia said:

Что-то странно что 30К заняло..

Ладно, взбодрил тот самый проект, о котором я писал выше.

Действительно, в изначальном состоянии была выключена оптимизация. Включил, получил почти 17 кБайт. 

Еще раз напомню, это только заготовка проекта.

Мой проект без HAL, переработанный, полностью завершенный и использующий тот же набор периферии, что изначальный проект-заготовка на HAL, на выходе имеет 5,1 кБайт.

 

Еще, вот вывод размеров объектных файлов для начального проекта-заготовки на HAL с включенной оптимизацией.

Spoiler
   text    data     bss     dec     hex filename
    536       5       0     541     21d release_1/obj/stm32f4xx_hal.o
    710       0       0     710     2c6 release_1/obj/stm32f4xx_hal_cortex.o
   1592       0       0    1592     638 release_1/obj/stm32f4xx_hal_dma.o
   2828       0       0    2828     b0c release_1/obj/stm32f4xx_hal_dma_ex.o
    546       0       0     546     222 release_1/obj/stm32f4xx_hal_exti.o
    920       0       0     920     398 release_1/obj/stm32f4xx_hal_flash.o
    708       0       0     708     2c4 release_1/obj/stm32f4xx_hal_flash_ex.o
    844       0       0     844     34c release_1/obj/stm32f4xx_hal_gpio.o
    462       0       0     462     1ce release_1/obj/stm32f4xx_hal_pwr.o
    236       0       0     236      ec release_1/obj/stm32f4xx_hal_pwr_ex.o
   1758       0       0    1758     6de release_1/obj/stm32f4xx_hal_rcc.o
    860       0       0     860     35c release_1/obj/stm32f4xx_hal_rcc_ex.o
  10232       0       0   10232    27f8 release_1/obj/stm32f4xx_hal_tim.o
   3508       0       0    3508     db4 release_1/obj/stm32f4xx_hal_tim_ex.o
   4308       0       0    4308    10d4 release_1/obj/stm32f4xx_hal_uart.o
    116       0       0     116      74 release_1/obj/stm32f4xx_it.o
    142       4       0     146      92 release_1/obj/system_stm32f4xx.o
    270       4       8     282     11a release_1/obj/syscalls.o
    812       0       0     812     32c release_1/obj/stm32f4xx_hal_msp.o
    494       0       0     494     1ee release_1/obj/startup_stm32f405xx.o

 

Что-то конечно еще компоновщик выкинет. Но, тем не менее.

Вот такая цена универсальности.

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


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

Ну у Вас так получилось,  5/17, под F4.

У меня выше приведено под F1 - 4/7.

В любом случае, для F4 я бы сильно не огорчался потерявшимися 12К.

 

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


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

On 6/2/2023 at 3:30 PM, Allregia said:

В любом случае, для F4 я бы сильно не огорчался потерявшимися 12К.

С одной стороны возможность сэкономить память, а с другой стороны - больше кода при инициализации, следовательно он дольше выполняется,

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

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


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

Вы тут прекрасно общаетесь между собой. Это хорошо. Но тем товарищам, которые упоминали про "калокод" отвечу, что задачи упихать код в минимум памяти не стоит, проект делается пока на отладке. Критически важные прерывания я делаю по всем правилам. А умничать может каждый вмеру своей калости)

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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