Estoy teniendo problemas con el concepto de cómo programar mis tareas.
Mi configuración: STM32F103 conectado a CAN. Tomar medidas con un módulo Lidar V3 se comunica a través de I2C y luego distribuir esa medida en la CAN
La interrupción 1 es una interrupción del temporizador de 1 ms para iniciar el envío de mensajes en CAN
la interrupción 2 está activa al recibir el mensaje CAN
También tengo que sondear un registro a través de I2C en la unidad LIDAR para asegurar que la medición haya terminado antes de poder usar I2C para leer el registro de distancia, fragmento de código que se muestra a continuación
status = CheckLidarStatus();
while ((status & LIDAR_BUSY) == LIDAR_BUSY)
{
status = CheckLidarStatus();
}
Lo que creo que es el flujo correcto que debería tomar mi programa se muestra a continuación:
Misprincipalespreocupacionesson:
¿Elflujopareceunaformalógicadeabordaresto?
Sidoyprioridadalainterrupcióndeltemporizador(enlugardeRXint)paralatransmisiónCAN,¿estoafectaránegativamentealaredCAN,esdecir,nosetratadelosmensajesCANrecibidosconlasuficienterapidez?
SialgunadelasinterrupcionesestáactivadurantelascomunicacionesI2C,¿causaráquelascomunicacionesI2Cse"caigan"?
-
¿Es aceptable sentarse en un bucle mientras espera que el estado de Checklidar vuelva como no ocupado, o hay una mejor manera de hacerlo?