Eso lo tuve que hacer yo en un proyecto con un 16f877A. Tuve que empezar a coger variables y funciones y empezar a compartirl, eliminar funciones y crear una sola que pueda hacer varias tareas distintas.
Tanto esta compactado, que si cambias una variable que parece ser el color de un texto por ejemplo, no solo afecta a ese color, afecta a más cosas que usan esa misma variable cuando está libre. Un quijote escrito en la cabecera para explicarle al “yo” de mañana como y por que está todo hecho así.
Y eso utilizando una eeprom externa i2C 24C256 en la cual metí todos los textos, objetos de imágenes, constantes de control, un montón de cosas. Los 32 Kbytes de la eeprom llenos.
Bestial. Cambiar el micro no era una opción por que iba a menos de 30 horas de tener que tener eso acabado.
Quedarte sin flash y tener que joderte con la que hay es una de las cosas que te enseña a programar de verdad.