Automated compile-time and run-time techniques to increase usable memory in MMU-less embedded systems