Writing code
Assembler
- macro capability
- symbolic variables
- direct access to microcontroller's special features
Compilers
- high-level language (C, C++, etc.)
- escape to assembly language when needed
- API/header files for special features(I/O ports, special registers, etc.)
Program loader/linker
- stores program into ROM/RAM
- combines multiple programs (e.g., user code with device drivers)