As far as I know, atexit() isn't provided by the OS, it's built into the compiler and the runtime library. So to get a proper answer to your question, how about letting us know what toolchain you're using?
That's the problem, I can't really tell if it is working or not. At present when my engine goes back to the Firmware menu, any other program I run becomes very slow. I was guessing it is because my SDL clean up is performed via the atexit() function.
Try using printf in the clean up function(s), and check either by a telnet session or redirecting the output to a file if everything is working as you expect it to.