3) absolutely no use of of malloc or free. it could lead to stack overflows.
Hate to be nit-picky here, but that's not true. It's a great idea to not use malloc() in a real-time application, for reasons of performance. But it can't overflow the stack.
Unless you call it recursively :-)
2) absolutely no local variables. it could lead to stack overflows.
I think it would be pretty hard to overflow the stack by use of local variables. I mean it's easy to cause, but you'd pretty much always see it if you've even tested the program once. The best reason I can think of for not using local variables is that globals are easier to debug.
1) absolutely no recursion. it could lead to stack overflows.
This should be rule number one for this type of application.