Оптимизация в CubeIDE

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Demon
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Оптимизация в CubeIDE

Сообщение Demon »

Переношу один старый проект с avr( 10k CVAVR) на STM32F030 c 16кB. И четверти не перенес он уже ругается что region `FLASH' overflowed by 628 bytes. Нехватает флэш. Ткните носом где настройки оптимизации.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Оптимизация в CubeIDE

Сообщение Аlex »

https://yandex.ru/search/?text=STM32Cub ... _safe&lr=5
https://www.programmersought.com/article/28015767015/

Вы серьёзно ? Меньше минуты понадобилось для поиска. :facepalm:
ub3taf
Встал на лапы
Сообщения: 103
Зарегистрирован: Сб фев 20, 2016 17:43:39
Откуда: Нижний Новгород
Контактная информация:

Re: Оптимизация в CubeIDE

Сообщение ub3taf »

Ну так вы с с 8 бит или 16 бит переносите на 32мк, соответственно памяти у вас всяко е хватит.
u37
Сверлит текстолит когтями
Сообщения: 1196
Зарегистрирован: Пн май 01, 2017 20:01:45

Re: Оптимизация в CubeIDE

Сообщение u37 »

Смените настройку в IDE на STM32F030*6
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

Re: Оптимизация в CubeIDE

Сообщение AVI-crak »

[uquote="Demon",url="/forum/viewtopic.php?p=4375249#p4375249"]Переношу один старый проект с avr[/uquote]
Я очень сильно сомневаюсь что проект для avr написан без ассемблера, и с чётким разделением на слои: периферия/драйвер/системные функции/уровень юзера.
Потому как такие проекты портируются за один вечер, вне зависимости от размера.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Оптимизация в CubeIDE

Сообщение Мурик »

Не забыли включить оптимизацию в т. ч. LTO?
Надеюсь HAL не используете?
Аватара пользователя
The_Blind_WatchMaker
Родился
Сообщения: 14
Зарегистрирован: Вт ноя 29, 2022 12:17:58
Откуда: Деревенский

Re: Оптимизация в CubeIDE

Сообщение The_Blind_WatchMaker »

[uquote="AVI-crak",url="/forum/viewtopic.php?p=4375363#p4375363"][uquote="Demon",url="/forum/viewtopic.php?p=4375249#p4375249"]Переношу один старый проект с avr[/uquote]
Я очень сильно сомневаюсь что проект для avr написан без ассемблера, и с чётким разделением на слои: периферия/драйвер/системные функции/уровень юзера.
Потому как такие проекты портируются за один вечер, вне зависимости от размера.[/uquote]
А туториал есть как приучить программиста к лотку правильному разделению на слои?
____________________________
Поделиться рецептом можно в ЛС
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

Re: Оптимизация в CubeIDE

Сообщение AVI-crak »

[uquote="The_Blind_WatchMaker",url="/forum/viewtopic.php?p=4391995#p4391995"]А туториал есть[/uquote]
Это кошку можно к лотку приучить, а человека уже намного сложнее. Если человек привык гадить - то для него это норма.
Делить на слои проект одной страницы - очень сложно. В том плане что самого кода мало, функций мало, и буквально всё связано. Обычно в таких одностраничных проектах - махание ножками распределяется на половину функций. И эти функции невозможно перевести в категорию "железо", потому как они ещё и логику периферии выполняют, а сверху логику основного цикла. В таких случаях проще пристрелить уродца, и переписывать с нуля.

Для начала надо написать простые функции работы с уровнем железа. При использовании хала, или чего-то подобного - такой набор функций уже есть. Значит пишем уровень логики периферии - те самые функции, что работают через железо с внешними интерфейсами. Можно в один файл, а можно файл под каждый тип логики. Они в любом случае пересекаться не должны. Уже сейчас вместо нескольких тысяч переменных и функций от чистого cmsis и hall - поле видимости будет включать только ваши функции и ваши данные. По сути у вас уже получился уровень драйвера, например функции записи чтения флеша по i2c шине.

Следующий уровень - логика общего алгоритма, это ещё не главный цикл, но очень близко к нему. Например функция моргания светиком при успешном обновлении данных во внешней памяти, работа со звуком, работа с экраном, и так далее. Полностью автономные функции, которые могут выполнять по настоящему полезную работу, не мешая другим функциям!!!
Кстати, некоторые сложные интерфейсы дотягиваются до этого уровня. Как например usb, инетнет, ваяфая, и кан. Они реально сложные, и писать их с нуля нет смысла - проще использовать готовое.

Следующий уровень системный - то что объединяет и разделяет весь написанный бардак в иерархию уровней доступа. Потому как очень многие вещи должны выполняться в строгой последовательности, иначе фигня получится. Писать заново рутинные последовательности каждый раз - максимально глупо. К таким вещам относятся файловые системы на разных носителях, алгоритмы работы с файфаем, простым радио, им так далее. И опять - подобное проще взять уже готовое.

Ну и самое важное - тот самый говонокод который будет всем этим зоопарком рулить - уровень пользователя, он-же главный цикл.
Например дождаться подключения флешкарты, запустить файловый интерфейс с переводом управления пользователю, и выполнять команды из главного цикла. Например воспроизведение звука, моргание светиком, махание лапками, и всё что душе угодно. Именно здесь используется самый верхний уровень, и всё ему подчиняется.

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

И ещё, подготовка железа выполняется в функции SystemInit(), которая должна вызываться раньше main(). Многие рутинные вещи обязательно нужно перенести именно туда, чтоб не отсвечивали.
Ответить

Вернуться в «ARM»