What is the difference between volatile and const keywords in Embedded C, and can a variable be both?