Explain the purpose of the volatile keyword in C. When and why must you use it in embedded programming?