Embedded applications must be efficient and the embedded software engineer must be responsible for much of the application efficiency. This class discusses techniques for mapping the embedded application onto the appropriate embedded processor, perform and necessary algorithmic transformation to significantly reduce the algorithm execution profile, as well as a series practical software optimization techniques to achieve performance, power, and memory efficiency in an embedded application.