๐—ช๐—ต๐˜† ๐—˜๐—บ๐—ฏ๐—ฒ๐—ฑ๐—ฑ๐—ฒ๐—ฑ ๐—ฆ๐˜†๐˜€๐˜๐—ฒ๐—บ๐˜€ ๐—ก๐—ฒ๐—ฒ๐—ฑ ๐—•๐—ฒ๐˜๐˜๐—ฒ๐—ฟ ๐—ฃ๐—ฟ๐—ผ๐—ฐ๐—ฒ๐˜€๐˜€๐—ฒ๐˜€ ๐—ฎ๐—ป๐—ฑ ๐—ฃ๐—ฟ๐—ฎ๐—ฐ๐˜๐—ถ๐—ฐ๐—ฒ๐˜€ ๐—ณ๐—ผ๐—ฟ ๐—”๐—ฝ๐—ฝ๐—น๐—ถ๐—ฐ๐—ฎ๐˜๐—ถ๐—ผ๐—ป ๐—Ÿ๐—ฎ๐˜†๐—ฒ๐—ฟ ๐—–๐—ผ๐—ฑ๐—ฒ

๐—ช๐—ต๐˜† ๐—˜๐—บ๐—ฏ๐—ฒ๐—ฑ๐—ฑ๐—ฒ๐—ฑ ๐—ฆ๐˜†๐˜€๐˜๐—ฒ๐—บ๐˜€ ๐—ก๐—ฒ๐—ฒ๐—ฑ ๐—•๐—ฒ๐˜๐˜๐—ฒ๐—ฟ ๐—ฃ๐—ฟ๐—ผ๐—ฐ๐—ฒ๐˜€๐˜€๐—ฒ๐˜€ ๐—ฎ๐—ป๐—ฑ ๐—ฃ๐—ฟ๐—ฎ๐—ฐ๐˜๐—ถ๐—ฐ๐—ฒ๐˜€ ๐—ณ๐—ผ๐—ฟ ๐—”๐—ฝ๐—ฝ๐—น๐—ถ๐—ฐ๐—ฎ๐˜๐—ถ๐—ผ๐—ป ๐—Ÿ๐—ฎ๐˜†๐—ฒ๐—ฟ ๐—–๐—ผ๐—ฑ๐—ฒ

Last week, I shared an observation that the application layer in embedded systems is often overlooked โ€” especially compared to low-level work like drivers, BSPs, and microcontroller setup โ€” and why I believe that is the case. (That post is linked here) ๐Ÿ‘‰ ๐—ช๐—ต๐˜† ๐—˜๐—บ๐—ฏ๐—ฒ๐—ฑ๐—ฑ๐—ฒ๐—ฑ ๐—ฆ๐˜†๐˜€๐˜๐—ฒ๐—บ๐˜€ ๐—ก๐—ฒ๐—ฒ๐—ฑ ๐—•๐—ฒ๐˜๐˜๐—ฒ๐—ฟ ๐—”๐—ฝ๐—ฝ๐—น๐—ถ๐—ฐ๐—ฎ๐˜๐—ถ๐—ผ๐—ป ๐—Ÿ๐—ฎ๐˜†๐—ฒ๐—ฟ ๐——๐—ฒ๐˜€๐—ถ๐—ด๐—ป

In that post, I suggested we could elevate the quality of the application layer in embedded systems by adopting proven design techniques from the desktop, mobile, and enterprise software domains.

๐Ÿš€ ๐— ๐—ผ๐—ฑ๐—ฒ๐—ฟ๐—ป ๐—ฃ๐—ฟ๐—ผ๐—ฐ๐—ฒ๐˜€๐˜€๐—ฒ๐˜€/๐—ช๐—ผ๐—ฟ๐—ธ๐—ณ๐—น๐—ผ๐˜„๐˜€ ๐—–๐—ฎ๐—ป ๐—”๐—น๐˜€๐—ผ ๐— ๐—ฎ๐—ธ๐—ฒ ๐—˜๐—บ๐—ฏ๐—ฒ๐—ฑ๐—ฑ๐—ฒ๐—ฑ ๐—•๐—ฒ๐˜๐˜๐—ฒ๐—ฟ We can go even further by adopting workflows from the other domains to improve quality:

  • Agile-style development: iterations, demos, early feedback
  • TDD / Unit testing: validate logic without hardware
  • CI/CD pipelines: build/test on every commit
  • Static analysis & coverage tools: get feedback and metrics

These help us test, demo, and gather feedback early, building confidence that the behavior is correct and intentional.

๐Ÿ’ก ๐—ฃ๐—ฟ๐—ผ ๐—ง๐—ถ๐—ฝ: ๐—ฌ๐—ผ๐˜‚ ๐—–๐—”๐—ก ๐—ง๐—ฒ๐˜€๐˜ ๐—”๐—ฝ๐—ฝ๐—น๐—ถ๐—ฐ๐—ฎ๐˜๐—ถ๐—ผ๐—ป ๐—–๐—ผ๐—ฑ๐—ฒ ๐—Ÿ๐—ฎ๐˜†๐—ฒ๐—ฟ ๐—ช๐—ถ๐˜๐—ต๐—ผ๐˜‚๐˜ ๐—›๐—ฎ๐—ฟ๐—ฑ๐˜„๐—ฎ๐—ฟ๐—ฒ Ideally, these processes and workflows are applied across all system layers, but even limiting them to the application layer yields major benefits.

This is done by isolating application logic from hardware:

  • Run on PC or CI (dual-targeting)
  • Stub/mock interfaces (GPIO, I2C, UART)
  • Simulate inputs (sensors, user events)

This enables early validation of application logic and lowers integration risk when the hardware becomes available.

๐Ÿšง ๐—ช๐—ต๐—ฎ๐˜โ€™๐˜€ ๐—›๐—ผ๐—น๐—ฑ๐—ถ๐—ป๐—ด ๐—จ๐˜€ ๐—•๐—ฎ๐—ฐ๐—ธ?

  • Lack of exposure to modern processes/ workflows and their benefits
  • Perceived simplicity of application logic

๐Ÿ”ง ๐—Ÿ๐—ฒ๐˜โ€™๐˜€ ๐—™๐—ถ๐˜… ๐—ง๐—ต๐—ฎ๐˜

  • Teach modern software practices in embedded education
  • Cross-pollinate ideas from desktop, mobile, web

๐Ÿ ๐—™๐—ถ๐—ป๐—ฎ๐—น ๐—ง๐—ต๐—ผ๐˜‚๐—ด๐—ต๐˜๐˜€ Modern workflows like TDD, CI, and agile iteration help us build embedded applications that are higher quality in less time.

๐—•๐—ฒ๐˜๐˜๐—ฒ๐—ฟ ๐—”๐—ฟ๐—ฐ๐—ต๐—ถ๐˜๐—ฒ๐—ฐ๐˜๐˜‚๐—ฟ๐—ฒ + ๐—•๐—ฒ๐˜๐˜๐—ฒ๐—ฟ ๐—ฃ๐—ฟ๐—ผ๐—ฐ๐—ฒ๐˜€๐˜€ = ๐—•๐—ฒ๐˜๐˜๐—ฒ๐—ฟ ๐—™๐—ถ๐—ฟ๐—บ๐˜„๐—ฎ๐—ฟ๐—ฒ.

What tools or practices have you brought into embedded development from other domains?

By @Greg Burk, cross-posted from LinkedIn

#EmbeddedSystems #FirmwareEngineering #WolffElectronicDesign


No comments yet.