entiendo que en muchos sistemas complejos suele utilizarzo algo llamado HAL (hardware abstraction layer) y luego la capa del Sistema propiamente dicho, lo que facilita la portabilidad del sistema a otro hardware/uC...
Pero quizá esto de para otro post, no quiero desvirtuarle el post a Carlos.
Saludos y gracias!
El post creo que ya tuvo su resultado, solo le queda decidirse por un compilador pero eso va a depender de el.
El HAL pensalo como una API de perifericos. Un ejemplo seria no pensar en los registros, sino que directametne pongas UART(baudios,bits de datos,bit de stop, paridad, pines) y listo ya tenes configurado tu UART sin siquiera saber como funciona el hardware o los bits de interrupcion, etc.
Primer capa - funciones para la modificacion de los registros seria un ejemplo, puede ser en ASM o C como quieras. Estas retornan valores para la segunda capa, esos valores deberian tener un estándar, y para cualquier micro cumplirse el mismo ( asi no cambias la segunda capa para nada)
Segunda capa - Que haga algo mas elaborado, siguiendo el ejemplo de la UART, calcular los baudios, setear registros usando las funciones SOLO de la primer capa. Crear una funcion para enviar un byte, tambien un standar para comunicarse con la tercer capa.
Tercer capa - El uso del printf para enviar una cadena + variables usando lo de la segunda capa nomas.
A su ves podria tener otra tercer capa de otro modulo que me permita debuggear por ejemplo por el UART y usar el printf, ya que ambas son de 3er capa y se deberia poder comunicar
La abstraccion del hardware cada ves es mayor ( menos te interesan los registros, los bits, como configurarlos, etc ). La portabilidad es de las capas superiorres pero si o si deberias de modificar la primer capa que seria la distintiva del micro.
Entonces modificando la primera deberias tener funcionando todo lo demas. O teniendo la primera podes definirla para varios micro con IFDEF
Esta mas que claro que esto seria para un proyecto donde no exista ninguna API ni nada por el estilo y se comenzara de 0.
Ejemplos donde ocurre esto hay varios pero por ejemplo las librerias Fatfs de chan, tenes todas sus funciones pero tenes que definir la conexcion, la inicializacion del hard(SPI), el timer en otro archivo entre otros.
Otro tambien muy simple de ver es una comunicacion http, http usa TCP ( pero TCP es tambien usado por FTP,POP, entre otros ) , TCP usa IP ( pero tambien UDP usa IP ) y asi bajando hasta lo que es el hw como ethernet,token ring, entre otros