Estoy tratando de desarrollar un RTOS experimental. Estoy atrapado en el diseño de la capa de controlador. Quiero hacer que las bibliotecas de capas del controlador sean amigables para las otras capas, pero de nuevo me gustaría tener un alto rendimiento. He reducido esto a una mezcla de 2 enfoques. El primero es tener una estructura para el controlador con devoluciones de llamada como elementos. Por ejemplo:
struct peripheral_controller {
int32_t (*init) (struct peripheral_instance_regs *peripheral_instance_regs);
int32_t (*isFull) (struct peripheral_instance_regs *peripheral_instance_regs);
};
El segundo enfoque es tener macros auxiliares que tomen el campo periférico_instancia_regs como argumentos.
Por ejemplo:
#define isFull(reg)
(reg&0x01 == 1)
¿Es este el enfoque correcto? ¿Confundirá a los usuarios de mi biblioteca? El problema con las devoluciones de llamada que veo está en la rutina de interrupción, donde no querría llamar a ninguna función.