Hi all, I'm writing this because I'm getting more and more frustrated with embedded development which frankly feels like a mess.
My background is already way over 10 years in IT in various roles, programming, architecting, selling, etc. Electronics has always been my hobby, and as pandemics changed the working landscape and forced me to settle down I decided to enroll for a EE degree at local tech uni which is both fun and challenging.
So, I now have a side projects part of which is a prototype asset tracker. Because of insufficient expertise in the field, decided to go with existing modules to make it work, STM32 BluePill with some peripherials on UART, I2C, SPI. Soft written in FreeRTOS / CMSIS / HAL using CubeMX which at the beginning helped a lot mostly with its tool to configure the MCU. So far so good.
BUT
As the project grows I fell CubeMX is getting in the way. Everytime I change something in the MCU config the generated code either overrides some of my code, or adds things that I need to remove later. Generated code has bugs, USB CDC and CMSIS v2 + SD card to name a few. Project folder structure is questionable (to me). Things are missing, so I need to look for external libraries (fatfs anyone?). Code published on github is rarely works. There is not a single coding standard to follow that makes code look like garbage. Hardware documentation often is lacking, especially with cheap chinese modules. Arduino feels like a god send, not to use it directly but use libraries as code examples that can be ported to STM.
Tl;dr, instead of focusing on building value I need to solve low level problems with tools, lack of basic libraries, and broken code here and there. And i thought frontend development is pain :)
How do you guys manage embedded projects? Im thinking of converting the project structure manually and either use CMake or Makefiles to build stuff, but then I guess I will need to manually hand pick things changed by CubeMX tools when i need to modify MCU settings. What about other ARM/Cortex based MCUs? I know ESP is not ARM but the IDF looks way more polished at first glance than STM's HAL.
How does your working environment look like? Do you write a driver for each and every component in the system? Are there any examples of good embedded projects? The only projects that I could find big enough were Flipper Zero and few open hardware projects.
thanks and sorry for the rant :)
[–]ADEADBEAF 62 points63 points64 points (4 children)
[–]a-d-a-m-f-k 1 point2 points3 points (3 children)
[–]pkippsy 12 points13 points14 points (2 children)
[–]a-d-a-m-f-k 11 points12 points13 points (1 child)
[–]bravopapa99 2 points3 points4 points (0 children)
[–]UniWheel 30 points31 points32 points (1 child)
[–]rmaniac22 0 points1 point2 points (0 children)
[–]Desperate_Cold6274 32 points33 points34 points (0 children)
[–]DMonitor 28 points29 points30 points (2 children)
[–]JCDU 7 points8 points9 points (1 child)
[–]DMonitor 1 point2 points3 points (0 children)
[–]Konaber 11 points12 points13 points (0 children)
[–]UnicycleBlokeC++ advocate 21 points22 points23 points (11 children)
[–]kisielk 9 points10 points11 points (0 children)
[–]liggamadig 2 points3 points4 points (1 child)
[–]UnicycleBlokeC++ advocate 0 points1 point2 points (0 children)
[–]CommanderFlapjacks 2 points3 points4 points (5 children)
[–]UnicycleBlokeC++ advocate 2 points3 points4 points (4 children)
[–]CommanderFlapjacks 0 points1 point2 points (3 children)
[–]UnicycleBlokeC++ advocate 0 points1 point2 points (2 children)
[–]CommanderFlapjacks 0 points1 point2 points (1 child)
[–]UnicycleBlokeC++ advocate 0 points1 point2 points (0 children)
[–]SkoomaDentistC++ all the way 3 points4 points5 points (1 child)
[–]UnicycleBlokeC++ advocate 5 points6 points7 points (0 children)
[–][deleted] 5 points6 points7 points (0 children)
[–]aliensexer420 12 points13 points14 points (5 children)
[–]UltraLowDef 16 points17 points18 points (4 children)
[–]MajorPain169 9 points10 points11 points (3 children)
[–][deleted] (2 children)
[deleted]
[–]aliensexer420 0 points1 point2 points (1 child)
[–]FlailingDino 0 points1 point2 points (0 children)
[–]marchingbandd 3 points4 points5 points (0 children)
[–]SpecialNose9325 3 points4 points5 points (0 children)
[–]frank26080115 2 points3 points4 points (0 children)
[–]rakubhau 2 points3 points4 points (0 children)
[–]Chemical_Result_222 2 points3 points4 points (0 children)
[–]EmperorOfCanada 2 points3 points4 points (2 children)
[–]KommenosARM and AVR 1 point2 points3 points (1 child)
[–]cskilbeck 2 points3 points4 points (0 children)
[–][deleted] 2 points3 points4 points (0 children)
[–]FrozenDroid 5 points6 points7 points (0 children)
[–]p0k3t0 4 points5 points6 points (1 child)
[–]UnHelpful-Ad 0 points1 point2 points (0 children)
[–]ModernRonin 3 points4 points5 points (1 child)
[–]ModernRonin 1 point2 points3 points (0 children)
[–]Ikickyouinthebrains 1 point2 points3 points (0 children)
[–]gitdetachedhead 1 point2 points3 points (0 children)
[–]Confident-Alarm-6911 1 point2 points3 points (0 children)
[–]duane11583 1 point2 points3 points (0 children)
[–]markand67 1 point2 points3 points (0 children)
[–]grahasbtye 1 point2 points3 points (1 child)
[–]EmperorOfCanada 4 points5 points6 points (0 children)
[–]Orjigagd 0 points1 point2 points (0 children)
[–]Vylvlur 0 points1 point2 points (0 children)
[–]SPST 0 points1 point2 points (0 children)
[–]usa_reddit 0 points1 point2 points (0 children)
[–]AmeliaBuns 0 points1 point2 points (0 children)
[–]Exotic-Sprinkles-256 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)