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

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

On 2/2/2024 at 6:56 PM, Pjotar said:

Хотелось бы узнать, как поступаете с кодом, который генерирует CubeIDE.

Никак. Не пользуюсь генератором кода. Неужели программирование микроконтроллеров на базе ядер Cortex-M или даже ARM7TDMI стало настолько сложным (по сравнению с чем?), что требуются генераторы кода? За 11 лет плотной работы с этими МК мне он ни разу не понадобился. Зато было потрачено множество часов на чтение документации и изучение нюансов работы периферии. Теперь я даже иногда беру на себя смелость утверждать о знании работы микроконтроллеров, могу провести некую аналогию между известными мне семействами и потенциально рассматриваемыми для применения, и это позволяет воздвигнуть некоторые ожидания о достоинствах и недостатках. Другими словами, я предпочитаю развивать свой собственный интеллект там, где это возможно, уместно, перспективно и принесёт мне плоды.

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


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

В 05.02.2024 в 09:29, haker_fox сказал:

Зато было потрачено множество часов на чтение документации и изучение нюансов работы периферии

Вооот.. А надо - сел и поехал. Интеллект нынче работает только в сторону тайм ту маркет. Это не хорошо и не плохо, просто данность.

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

Нормальный руководитель проекта должен обеспечить нормальную интеграцию имеющихся в наличии сотрудников и при этом приемлемое качество продукта. Это точно не путь самодельных велосипедов с кастомными колесами и педалями.

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


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

4 minutes ago, MrYuran said:

А надо - сел и поехал

И упал, споткнувшись на первой кочке невежества.

4 minutes ago, MrYuran said:

Интеллект нынче работает только в сторону тайм ту маркет

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

5 minutes ago, MrYuran said:

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

Ошибаетесь. Хотя бы в том, что утверждаете за многих, если не за всех. Хороший работодатель понимает выгоду от профессионального роста специалиста, который в случае внештатной ситуации будет к ней готов и самостоятельно решит её. Чего не скажешь про потребителя готовых решений в виде кусков кода, который только и умеет, что употреблять, не думая. В этом случае вероятность возгорания проекта весьма велика, и это не метафора. Кто знает, что он там делает? Зарядное устройство или электропривод?

10 minutes ago, MrYuran said:

Нормальный руководитель проекта должен обеспечить нормальную интеграцию имеющихся в наличии сотрудников и при этом приемлемое качество продукта. Это точно не путь самодельных велосипедов с кастомными колесами и педалями.

О чём Вы говорите? Нет, не спорю, путь каждого свой собственный. Если руководитель в угоду модных словечек "тайм ту маркет" занимается поощрением невежества и профессиональной деградации своих подчинённых, то наверное это тоже нужно. Как минимум для познания прекрасного на фоне ужасного; для понимания света на фоне тьмы; для контраста.

20 minutes ago, MrYuran said:

при этом приемлемое качество продукта

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

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


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

Я может быть крамольную мысль скажу, но библиотеки STM и ардуино намного лучше соответствуют целям образования, чем "книги по микроконтроллерам". Именно по структуре кода и оформлению.

А все примеры из книг я бы отнес к категории "как писать не надо"

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


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

Наоборот, если бы посмотрели структуру HAL и генерации кода, то увидели бы, "как Не надо писать". Ибо там соседстуют как старые куски кода, оставшиеся ещё с первых версий, так и новейшие наслоения, которые просто навешиваются на ранее написанные пробные варианты. 

А то, что сейчас идёт период "общества потребления", это уже давно ясно. Никто не заморачивается вообще ничем. Х.. [censored] Тяп-ляп и в продакшн, а если чо, то выпустят обновление, исправляющее часть багов... И врносящее новые баги.так и живем

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


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

Лично для меня самое важное, что есть в Кубе- это его помощь при распределении функций по пинам( Pinout & Configuration). Так как все функции привязаны к конкретным ногам и могут быть перенаправлены на другие только иногда- то такой онлайновый планировщик очень помогает, особенно с учетом жесткой завязки этих интерфейсов и таймеров на определенные каналы DMA под эту функциональность. И при рисовании платы помогает проверить, а возможно ли такие-то функции поменять/перекинуть на другие пины для простоты разводки- дело пары секунд в Кубе.

И опция установки частот тактирования (Clock Configuration) - тут все очень внятно, и нарисованно именно под используемый чип, очень удобно.

Только за эти функции уже благодарен разработчикам Куба. Много нервов и времени экономит.

 

Кодогенератор Куба:

Естественно, пользуюсь (дополнительно к CMSIS) предлагаемыми либами (LL, HAL), но это все просто скопировано в мой проект. Иногда подсматриваю решения в наиболее запущенных случаях: создаю в Кубе проект для работы с непонятной для меня функциональностью, и использую результаты на уровне копирования решений и методов. Но никогда не использовал сгенерированный им код как проект.

 

 

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


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

В некоторой мере да. Использую Куб для посмотреть варианты распиновки доп. функций, где что куда перенести можно. А также для просмотра и подбора вариантов тактирования. 

В остальном - да ну нафик. За 12 лет общения с STM32 не возникает сложностей с начальной настройкой. И даже если нет готового кода, то уж лучше потратить время на его написание, чем на выпиливание HAL-а, который, кстати, не выпиливается из-за чрезмерной внедренности в проект.

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

И да, я ещё помню SPL. 😉Кто-нибудь помнит такое поделие? 

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


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

В 05.02.2024 в 13:18, EdgeAligned сказал:

И да, я ещё помню SPL. 😉Кто-нибудь помнит такое поделие? 

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

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


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

4 hours ago, Ruslan1 said:

Лично для меня самое важное, что есть в Кубе- это его помощь при распределении функций по пинам( Pinout & Configuration)

Когда-то это всё делалось в xls-файлике от STM, а щас раздулось до монструозного Куба с его ХАЛом.

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


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

Итого, выявлено три способа использования генерированного кода:

1. С негодованием отвергнуть

2. Пользоваться и спокойно решать свои задачи

3. Написать свой кодогенератор

Чтение документации на CubeMX тоже никто не отменял

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


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

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

 

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


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

On 2/5/2024 at 3:38 PM, tonyk_av said:

Когда-то это всё делалось в xls-файлике от STM, а щас раздулось до монструозного Куба с его ХАЛом.

После "xls-файлика", они сделали MicroXplorer , тогда еще небыло HAL, был SPL (впрочем, нынешние халовские LL - это практически и есть SPL), но Микроэксплорер с ним не работал и никакой кодогенерации не делал  - он только ноги расставлял. И это было весьма удобно.

Потом на него навесили хал и кодогенерацию, и обозвали получившееся "CubeMX".

Если посмотреть в любом текстовом редакторе  файл кубика (.ioc), то в нем до сих пор первая строка:

"#MicroXplorer Configuration settings - do not modify".

 

Что касается изначального вопроса топикстартера, то лично я кубом расставляю ноги, настраиваю периферию (причем не факт что я этими настройками потом воспользуюсь), настраиваю клоки. Затем:

1) генерю проект и компилирую его (чисто на всякий случай, чтобы знать что оно собралось).

2) в директории проекта создаю поддиректорию My_Application

3) в ней создаю файл my_application.c (ну и потом тут, и в других моих директориях будут остальные  мои .c/.h)

4) в него копирую инклуды из main.c, и далее пишу:

	void SystemClock_Config(void); // это прототип функции из main.c
	//-------------------
	void My_App(void){
	      HAL_Init();
	      SystemClock_Config();
	//  дальше будет мой код.
	}
	[code]
	 
	5) В main.c дописываю 4 строки:
	[code]
	/* USER CODE BEGIN Includes */
void My_App(void);                  // 1 - это прототип моей функции из my_application.c   <<<<<<<<
	/* USER CODE END Includes */
	...
	int main(void){
	  /* USER CODE BEGIN 1 */
   MyApp();  //  2 - вызов моей функции   <<<<<<<<<<<<
  #if 0         //  3 - закрываю все ихнее    <<<<<<<<<<<<
  /* USER CODE END 1 */
	далее все оставляю и потом:
	    /* USER CODE BEGIN 3 */
	  }
    #endif  // 4 -  конец закрытой части   <<<<<<<<<<<<<
  /* USER CODE END 3 */
}
	

 

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

В такой системе я в любой момент могу перегенерить все кубом заново, и это не затронет ничего моего.  Могу перенести все мое в другой проект, для другой платы или другого проца.

Практика показала, что так удобно и достаточно оперативно. Особенно, если надо что-то быстро попробовать и ответить на вопрос "а что если?" или "как это сделать?" - тут неважно что программа не сильно оптимальная. Допустим мне надо попробовать какой-то чип, работающий по i2c, и с которым есть непонятни в документации - ну пофиг что калокуб при этом не совсем оптимально настроит какую-то переферию, которая будет исползоваться для проверок - не в ней же суть мероприятия.

 

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


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

У меня все проекты обычно на несколько вариантов железок (с разной распиновкой и набором периферии) и использовать код Куба напрямую нельзя. То есть в одном проекте, процедуры инициализации сразу на 4-5 вариантов железки. Поэтому я обычно генерирую кубом код вне дерева проекта, а потом, в свой проект беру ручками то, что нужно из нагенерированного.

 

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


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

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

У меня все проекты обычно на несколько вариантов железок (с разной распиновкой и набором периферии) и использовать код Куба напрямую нельзя. То есть в одном проекте, процедуры инициализации сразу на 4-5 вариантов железки. Поэтому я обычно генерирую кубом код вне дерева проекта, а потом, в свой проект беру ручками то, что нужно из нагенерированного.

А если завтра понадобится в проект добавить ещё один вариант "железки", с микроконтроллером не STM32 (и не его китайским аналогом) ?  :dash2:

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


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

44 minutes ago, jcxz said:

А если завтра понадобится в проект добавить ещё один вариант "железки", с микроконтроллером не STM32

Электроника у меня хобби, профессионально я бугалтерию программирую. Но и в поделках применяю подходы из работы. А подход следующий - для всех прикладных потребностей описываются интерфейсы удобные для реализации бизнеслогики которую делаем, и их реализации - адептеры к имеющимся библиотекам.

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

Соответсвенно я пишу интерфейсы для редкого считывания АЦП, вывода текста, получения колбэков от таймера, изменения скважности шима. И работая с абстракным прикладным АПИ реализую бизнеслогику прибора, чистую от всяких аппаратных нюансов вроде регистров.

А реализция этого АПИ, тоесть адаптеры к допустим HAL и freertos отдельно рядышком. И да, из безнеслогики даже от конкретной РТОС напрямую не завишу.

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

P.S. сейчас перечитал и понял что ответ на Ваш вопрос не озвучил, потому-что мне он кажется очевидым и тут вроде у инженеров согласие в подходе - делаем по возможности хорошо, а то что сейчас не надо не делаем. А в хорошо сделаном проекте можно и саму логику легко поменять, и на другие библиотеки его перевести. Я ваще считаю хочешь сделать быстро - делай хорошо, а абыкак дольше налаживать и дебажить будешь. И иногда оцениваю, можно ли потенциально проект "перенести на другую железку", но пока оно не надо и пользы не даёт в имеющихся требованиях - ни малейшего усилия к этому

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


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

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

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

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

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

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

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

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

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

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