To make a practical embedded system you need hardware and software and they need to work together!
Hardware / Software Codesign
Simultaneously designing hardware and software components of a combined system.
Usually you just choose your hardware spec and then write software for it though.

Challenges

  • Multidisciplinary design problems
  • Complex device interactions
  • Unpredictable environments
  • Security and reliability are very important