Buenas noches
Muchas gracias por tantas respuestas, es la primera vez que escribo en un foro.
Tenéis razón, me expliqué fatal. Comienzo de nuevo
Tengo 3 módulos (cada uno con su .h y .c) con estas operaciones:
/*MODULO PARCHIS*/ Lleva una partida del juego del parchis y llama a las funciones del módulo ENTRADA_SALIDA
void parchis_iniciar (void);
void parchis_reiniciar_partida(void);
void parchis_realizar_jugada (uint8_t);
void parchis_deshacer_ultima_jugada(void);
--funciones exclusivas de PARCHIS (sólo en el PARCHIS.c)
static uint8_t comprobar_casilla_vacia(tablero);
static uint8_t comprobar_ficha_jugador(tablero);
--datos exclusivos de PARCHIS (sólo en PARCHIS.c)
uint8_t tablero[TABLERO_SIZE];
/*MODULO ENTRADA_SALIDA*/ Externaliza visualmente cosas que le pide el módulo de parchis. Ej: ver el turno, mostrar fin de partida, mostrar un mensaje concreto (bytes)... Se supone que el PARCHIS es independiente de la implementación de este módulo, en este caso muestra por UART, pero podrían ser unos LEDS, un sistema neumático, unas gafas de realidad virtual,... y parchis no tendría por qué saberlo
void ES_encender_turno(uint8_t jugador);
... irrelevantes...
void ES_mostrar_mensaje(char *mensaje) --> muestra mensaje por una UART
/*SUBMODULO PARCHIS+/
char* submodulo_parchis_formatear_tablero(void); --> accede a métodos y datos privados del módulo parchis para formatear el tablero y dejarlo bonido para enviarlo por la UART
--
Me han pedido imprimir por la UART el tablero de parchis, por tanto debo usar ES_mostrar_mensaje(,,,), pero me dicen que el módulo PARCHIS no debe encargarse del formato del tablero, sino que debe ser un módulo aparte (submodulo_parchis).
Así, dentro de una función como parchis_realizar_jugada(), deberá mostrarse el tablero tras invocarse el modulo ENTRADA_SALIDA, que no conoce su formato, por lo que debe llegarle un mensaje con un formato en ascii ya disponible para imprimir(algo como ES_mostrar_mensaje(submodulo_parchis_formatear_tablero()).
El problema es que este submódulo debe acceder al tablero (sólo en el .c) y a funciones que ayudan a reconocer el tablero (sólo en el .c de parchis. Ej: comprobar_casilla_vacia(tablero)), y me está dando problemas el que este submódulo acceda a estos métodos privados del módulo parchis. Me ocurren problemas con dependencias circulares, y con redefiniciones de funciones y no sé como arreglarlo.
Puedo cambiar el esquema, añadir módulos,... pero es necesario que exista este submódulo que acceda a las funciones y datos ocultos del parchis.
Un saludo y muchas gracias por responder a todos