Global variable defined with static keyword has a scope limited to translation unit it is defined in. This variable is not "totally" global (possible to use in other source files), it is visible and usable only in this source file (translation unit, to be exact).

Static variables are those which are initilaized and defined inside the main() body. These variables can be re-initialied as per requirement and their value changes. On the other hand Global variables are initilaized and defined before the main() body. If you initilialize and define a varibale gloabally it's value will remain constant, meaning whenever you use this variable in your main() body its value used will be the defined value before the main() body . Hope u got that

staticint i; // available anywhere in this file (translation unit)int j; // available anywhere in this file, and in other files by those files using "extern"externint k; // available anywhere in this file, but actually declared in some other file;

void main(void){// ...}

If you have no good reason to allow external linkage, I suggest you explicitly declare global variables to be static. Furthermore, I suggest avoiding global variables unless you have no good alternative. (You may not have a good alternative, especially in embedded systems, given your mention of RTS).