Jump to content
    

STM32 CubeIDE Как обращаться нагенерированным кодом

Добрый день!

Хотелось бы узнать, как поступаете с кодом, который генерирует CubeIDE. Работаете в рамках, заданных генератором, сохраняете возможность перегенерировать? Генератор очень удобный для старта проекта, но у меня возникает желание создать чистый проект без зависимости от код-генератора и туда уже ручками всё переносить и допиливать.

Share this post


Link to post
Share on other sites

2 hours ago, Pjotar said:

Добрый день!

Хотелось бы узнать, как поступаете с кодом, который генерирует CubeIDE. Работаете в рамках, заданных генератором, сохраняете возможность перегенерировать? Генератор очень удобный для старта проекта, но у меня возникает желание создать чистый проект без зависимости от код-генератора и туда уже ручками всё переносить и допиливать.

Код генерируется, добавляю что мне нужно. Потом поправляю в кубе и по циклу.
/* USER CODE ...*/

Share this post


Link to post
Share on other sites

3 часа назад, Pjotar сказал:

и туда уже ручками всё переносить и допиливать.

Допиливать Куб - дело муторное. Его можно либо принять таким как есть, либо послать на и в и написать своё, благо оно легко пишется.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Возможно, топикстартера не устраивает стиль оформления текста, способ компоновки файлов. Например, меня тоже оное вообще не устраивает, поэтому я вообще не пользуюсь Кубом. Потому как начинал с STM еще задолго до того, как появился Куб вообще.

Share this post


Link to post
Share on other sites

1 hour ago, EdgeAligned said:

Возможно, топикстартера не устраивает стиль оформления текста, способ компоновки файлов. Например, меня тоже оное вообще не устраивает, поэтому я вообще не пользуюсь Кубом. Потому как начинал с STM еще задолго до того, как появился Куб вообще.

Шашечки, или ехать. Каждый решает сам.

Share this post


Link to post
Share on other sites

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

Ну я заподозрил, что генератор этот чисто как помошник, шпаргалка, генератор примеров, а потом из генератора ташится всё в проект.

Интересно ещё, как собираются проекты в энетрпрайзе? Там же должны быть билдсервера, автотестирование... Проект куба без IDE я так понимаю не очень собирается... там же IDE генерирует makefile вроде?

Just now, x893 said:

Код генерируется, добавляю что мне нужно. Потом поправляю в кубе и по циклу.
/* USER CODE ...*/

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

Share this post


Link to post
Share on other sites

У этого кодогенератора была хорошая и правильная задумка, да вот реализация подвела.

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

Раньше, до 2019 года был отдельный кодогенератор CubeMX, который генерировал код для выбираемой в настройках IDE. Потом, когда ST купили Atollic, они его изгадили и впихнули в него свой кодогенератор, и впихнули так же криво и косо. И теперь сиё творение зовется CubeIDE. И поэтому начинка Куба очень сильно ввязана в проект.

Автотестирование? Ха. К сожалению, в CubeIDE (если не ошибаюсь) так и не удосужились внедрить инструментарий юнит-тестов.

Share this post


Link to post
Share on other sites

34 minutes ago, EdgeAligned said:

до 2019 года был отдельный кодогенератор CubeMX

Как был - так и остался.

34 minutes ago, EdgeAligned said:

К сожалению, в CubeIDE (если не ошибаюсь) так и не удосужились внедрить инструментарий юнит-тестов.

Это только продвинутым менеджерам нужно. Поэтому они и несчастливы.

41 minutes ago, Pjotar said:

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

Error_Handler. И можно сделать её как угодно. Всё в руках создателя.

Share this post


Link to post
Share on other sites

8 минут назад, x893 сказал:

только продвинутым менеджерам нужно. Поэтому они и несчастливы.

Да. Счастливые тестов не наблюдают (не делают).

Share this post


Link to post
Share on other sites

21 hours ago, x893 said:

Error_Handler

И как в ней получить название вызвавшей функции или как-то ещё понять что за ошибка? Типа стектрейса что-то...

Если получится решить этот вопрос - останусь пока в рамках, установленных генератором

Share this post


Link to post
Share on other sites

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

Хотя, чисто технически, при использовании механизмов assert, в код может внедряться информация об именах файлов и номерах строк, соотвествующих проверяемым условиям assert. Это доступно в режиме FULL_ASSERT.

Share this post


Link to post
Share on other sites

On 2/2/2024 at 9:24 PM, Pjotar said:

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

Напишите индусам о своих желаниях. Возможно, они снизойдут до их воплощения. Они уже много лет не исправляют ошибки в ХАЛе. Есть целые сайты с этим, поищите на досуге.

 

Всё, что можно сделать малой кровью, это извлечь из стэка адрес, с которого вызвали Error_Handler(), чтобы в дизассме посмотреть адрес. Ну и __LINE__, __FILE__ и __func__ в помощь.

Share this post


Link to post
Share on other sites

3 часа назад, tonyk_av сказал:

Всё, что можно сделать малой кровью, это извлечь из стэка адрес, с которого вызвали Error_Handler()

..."извлекать из стека" то, чего там может и не быть - так себе идея.

Share this post


Link to post
Share on other sites

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

Куб использует фреймворк FreeMaker (об этом написано в документации), вся информация в xml-ках.

Можно совместить "обманчивую красоту таких систем" и собственные представления о правильности вещей.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...