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