I've started learning about embedded coding. The words 'firmware' and 'software' are a bit ambiguous to me still. My understanding is that software is high level language tailored for user interaction, loaded into the CPU and modified frequently; whereas firmware is low level language, modified infrequently and loaded into a microcontroller for direct hardware control? What are the differences in terms of speed, timers, memory, peripherals, compiler, debugging etc.?