haker_fox 61 5 февраля Опубликовано 5 февраля · Жалоба On 2/2/2024 at 6:56 PM, Pjotar said: Хотелось бы узнать, как поступаете с кодом, который генерирует CubeIDE. Никак. Не пользуюсь генератором кода. Неужели программирование микроконтроллеров на базе ядер Cortex-M или даже ARM7TDMI стало настолько сложным (по сравнению с чем?), что требуются генераторы кода? За 11 лет плотной работы с этими МК мне он ни разу не понадобился. Зато было потрачено множество часов на чтение документации и изучение нюансов работы периферии. Теперь я даже иногда беру на себя смелость утверждать о знании работы микроконтроллеров, могу провести некую аналогию между известными мне семействами и потенциально рассматриваемыми для применения, и это позволяет воздвигнуть некоторые ожидания о достоинствах и недостатках. Другими словами, я предпочитаю развивать свой собственный интеллект там, где это возможно, уместно, перспективно и принесёт мне плоды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 5 февраля Опубликовано 5 февраля · Жалоба В 05.02.2024 в 09:29, haker_fox сказал: Зато было потрачено множество часов на чтение документации и изучение нюансов работы периферии Вооот.. А надо - сел и поехал. Интеллект нынче работает только в сторону тайм ту маркет. Это не хорошо и не плохо, просто данность. Никому не интересны ваши годы саморазвития, особенно за счет работодателя, у которого проект горит. Нормальный руководитель проекта должен обеспечить нормальную интеграцию имеющихся в наличии сотрудников и при этом приемлемое качество продукта. Это точно не путь самодельных велосипедов с кастомными колесами и педалями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 5 февраля Опубликовано 5 февраля · Жалоба 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: при этом приемлемое качество продукта Здесь, пожалуй, добавлю. Иногда действительно ответственные проекты держатся на паре-тройке инициативных участников проекта, которые изучают материалы своей профессии в свободное или рабочее время, постоянно обогащают себя новыми знаниями и навыками. Нередко в этих людях таится и доля ответственности, умение её взять на себя в сложной ситуации или предложить новое, авангардное решение возникшей нестандартной задачи. Кругозор этих людей позволяет дать ответ на вопрос почти в любой области, хотя и поверхностный иногда, при необходимости углублённый до нужного значения. И хороший руководитель выделяет их в ядро разработчиков. Все остальные при этом выполняют работу "принеси-подай". К сожалению, подобную ситуацию наблюдаю у себя на работе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 5 февраля Опубликовано 5 февраля · Жалоба Я может быть крамольную мысль скажу, но библиотеки STM и ардуино намного лучше соответствуют целям образования, чем "книги по микроконтроллерам". Именно по структуре кода и оформлению. А все примеры из книг я бы отнес к категории "как писать не надо" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 5 февраля Опубликовано 5 февраля · Жалоба Наоборот, если бы посмотрели структуру HAL и генерации кода, то увидели бы, "как Не надо писать". Ибо там соседстуют как старые куски кода, оставшиеся ещё с первых версий, так и новейшие наслоения, которые просто навешиваются на ранее написанные пробные варианты. А то, что сейчас идёт период "общества потребления", это уже давно ясно. Никто не заморачивается вообще ничем. Х.. [censored] Тяп-ляп и в продакшн, а если чо, то выпустят обновление, исправляющее часть багов... И врносящее новые баги.так и живем Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 5 февраля Опубликовано 5 февраля · Жалоба Лично для меня самое важное, что есть в Кубе- это его помощь при распределении функций по пинам( Pinout & Configuration). Так как все функции привязаны к конкретным ногам и могут быть перенаправлены на другие только иногда- то такой онлайновый планировщик очень помогает, особенно с учетом жесткой завязки этих интерфейсов и таймеров на определенные каналы DMA под эту функциональность. И при рисовании платы помогает проверить, а возможно ли такие-то функции поменять/перекинуть на другие пины для простоты разводки- дело пары секунд в Кубе. И опция установки частот тактирования (Clock Configuration) - тут все очень внятно, и нарисованно именно под используемый чип, очень удобно. Только за эти функции уже благодарен разработчикам Куба. Много нервов и времени экономит. Кодогенератор Куба: Естественно, пользуюсь (дополнительно к CMSIS) предлагаемыми либами (LL, HAL), но это все просто скопировано в мой проект. Иногда подсматриваю решения в наиболее запущенных случаях: создаю в Кубе проект для работы с непонятной для меня функциональностью, и использую результаты на уровне копирования решений и методов. Но никогда не использовал сгенерированный им код как проект. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 5 февраля Опубликовано 5 февраля · Жалоба В некоторой мере да. Использую Куб для посмотреть варианты распиновки доп. функций, где что куда перенести можно. А также для просмотра и подбора вариантов тактирования. В остальном - да ну нафик. За 12 лет общения с STM32 не возникает сложностей с начальной настройкой. И даже если нет готового кода, то уж лучше потратить время на его написание, чем на выпиливание HAL-а, который, кстати, не выпиливается из-за чрезмерной внедренности в проект. Хотя, затея с кодогенератором очень правильная по принципу, но реализация вышла далеко не удачной. И да, я ещё помню SPL. 😉Кто-нибудь помнит такое поделие? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 5 февраля Опубликовано 5 февраля · Жалоба В 05.02.2024 в 13:18, EdgeAligned сказал: И да, я ещё помню SPL. 😉Кто-нибудь помнит такое поделие? Раньше внизу центральной страницы электроникса высвечивались дни рождения, и было видно, что основная масса примерно одного поколения старперы ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 5 февраля Опубликовано 5 февраля · Жалоба 4 hours ago, Ruslan1 said: Лично для меня самое важное, что есть в Кубе- это его помощь при распределении функций по пинам( Pinout & Configuration) Когда-то это всё делалось в xls-файлике от STM, а щас раздулось до монструозного Куба с его ХАЛом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 6 февраля Опубликовано 6 февраля · Жалоба Итого, выявлено три способа использования генерированного кода: 1. С негодованием отвергнуть 2. Пользоваться и спокойно решать свои задачи 3. Написать свой кодогенератор Чтение документации на CubeMX тоже никто не отменял Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 7 февраля Опубликовано 7 февраля · Жалоба Коллеги, оффтоп выделил в отдельную тему. Просьба при необходимости именно там продолжать обсуждение последствий от лени чтения документации на микроконтроллеры)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 8 февраля Опубликовано 8 февраля · Жалоба 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, и с которым есть непонятни в документации - ну пофиг что калокуб при этом не совсем оптимально настроит какую-то переферию, которая будет исползоваться для проверок - не в ней же суть мероприятия. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quasar 20 26 февраля Опубликовано 26 февраля · Жалоба У меня все проекты обычно на несколько вариантов железок (с разной распиновкой и набором периферии) и использовать код Куба напрямую нельзя. То есть в одном проекте, процедуры инициализации сразу на 4-5 вариантов железки. Поэтому я обычно генерирую кубом код вне дерева проекта, а потом, в свой проект беру ручками то, что нужно из нагенерированного. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 26 февраля Опубликовано 26 февраля · Жалоба 3 часа назад, Quasar сказал: У меня все проекты обычно на несколько вариантов железок (с разной распиновкой и набором периферии) и использовать код Куба напрямую нельзя. То есть в одном проекте, процедуры инициализации сразу на 4-5 вариантов железки. Поэтому я обычно генерирую кубом код вне дерева проекта, а потом, в свой проект беру ручками то, что нужно из нагенерированного. А если завтра понадобится в проект добавить ещё один вариант "железки", с микроконтроллером не STM32 (и не его китайским аналогом) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pjotar 0 26 февраля Опубликовано 26 февраля · Жалоба 44 minutes ago, jcxz said: А если завтра понадобится в проект добавить ещё один вариант "железки", с микроконтроллером не STM32 Электроника у меня хобби, профессионально я бугалтерию программирую. Но и в поделках применяю подходы из работы. А подход следующий - для всех прикладных потребностей описываются интерфейсы удобные для реализации бизнеслогики которую делаем, и их реализации - адептеры к имеющимся библиотекам. Например, в моей в поделке медленный текстовый экранчик, ручки регулировки на потенциометрах, замер интервалов между импульсами, выходной шим. Соответсвенно я пишу интерфейсы для редкого считывания АЦП, вывода текста, получения колбэков от таймера, изменения скважности шима. И работая с абстракным прикладным АПИ реализую бизнеслогику прибора, чистую от всяких аппаратных нюансов вроде регистров. А реализция этого АПИ, тоесть адаптеры к допустим HAL и freertos отдельно рядышком. И да, из безнеслогики даже от конкретной РТОС напрямую не завишу. Потенциально это позволяет проще мигрировать и на дуругую железку или сделать кросмикроконтроллерность, но я не планирую, просто так удобнее ваще со всех сторон. Другое дело что в ембеддед мире и на СИ мне тяжело делать красивый стройный проект, получается страшное по сравнению с высокоуровневыми языками, ну это другое P.S. сейчас перечитал и понял что ответ на Ваш вопрос не озвучил, потому-что мне он кажется очевидым и тут вроде у инженеров согласие в подходе - делаем по возможности хорошо, а то что сейчас не надо не делаем. А в хорошо сделаном проекте можно и саму логику легко поменять, и на другие библиотеки его перевести. Я ваще считаю хочешь сделать быстро - делай хорошо, а абыкак дольше налаживать и дебажить будешь. И иногда оцениваю, можно ли потенциально проект "перенести на другую железку", но пока оно не надо и пользы не даёт в имеющихся требованиях - ни малейшего усилия к этому Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться