This course introduces the basic knowledge of embedded systems on programmable chips. The given information will help to develop the ability to understand the concept of embedded systems in offline and online applications. The main aim of this course is to give students not only theoretical knowledge but also practical knowledge about different embedded systems. In addition, the common features of embedded systems and partitioning features such as inputs, outputs, interrupts, and scheduling techniques will be covered in the course. Depending on the different embedded system types, these systems will be programmed using the relevant programming languages. Finally, various hardware-software designs and development tools will be introduced to broaden students' fundamental knowledge.