CAN transmisión de mensaje

0

Estoy muy confundido con el siguiente escenario. Estoy usando un microcontrolador PIC y estoy transmitiendo una secuencia continua de mensajes. De acuerdo con el protocolo CAN, debo dar algo de tiempo antes de transmitir el siguiente mensaje.

Para resolver este problema, comencé a comprobar que el búfer Tx esté lleno o libre antes de transmitir. Pero mi único problema es que no puedo estar continuamente en el bucle while buscando la bandera ya que puede haber una posibilidad de que el bus no esté disponible, y nunca puede salir del bucle while . ¿Cómo evito esta situación complicada? El microcontrolador que estoy usando está en la familia dsPIC.

    
pregunta rajesh

1 respuesta

0

El estándar CAN no requiere que espere. El controlador de hardware CAN se encarga de las colisiones.

¿Quizás su propio protocolo CAN necesita demoras entre mensajes? No especificaste la aplicación.

Si necesita saber si el mensaje dejó el controlador CAN que usa, consulte el manual. Hay un bit de estado o una opción de interrupción cuando el mensaje realmente se fue.

Por último, no debería haber while (1) loops en el diseño incrustado. Ejecute su bucle principal para siempre, y su rutina de envío puede verificar si el mensaje se dejó (y hacer lo que necesita hacer), luego regresar al bucle principal para que otras funciones puedan ejecutarse. Siga leyendo usando un estilo de programación de máquina de estado, que es una gran práctica, a menos que use un sistema operativo en tiempo real como FreeRTOS.

    
respondido por el EmbeddedGuy

Lea otras preguntas en las etiquetas