econjack:
The strange thing about setup(), however, is that you should never "call" it in your own code. It automatically gets called on power-on and is never called again unless there is a reset or it is re-powered.
There is not a reason in the world setup cannot, or even should not, be called by the main program, as long as it is not doing anything that would cause incorrect operation of that program. And that is entirely within the control of the programmer. There is nothing at all special or different about setup - it's just another function that happens to get called by init(), but in many cases could also be called from anywhere else within the program if it makes sense to do so.
Regards,
Ray L.