Supongamos que tengo tres nodos CAN: A, B y C. Sabemos que cuando dos nodos transmiten al mismo tiempo, el nodo que tiene el menor SID prevalecerá sobre el bus y el otro nodo tendrá que proporcionar el bus al primer nodo. Lo que quisiera hacer es que los nodos B y C enviarán continuamente la trama CAN al nodo A en sucesión (por ejemplo, nodo B - > nodo A, nodo C - > nodo A, nodo B - > nodo A). ¿Puedo simplemente asignar un SID inferior a B que a C y simplemente hacer el siguiente fragmento de código?
Nodo B
while(1) sendCANmsg(data, NODE_A, sizeof(data), RTR_OFF);
Nodo C
while(1) sendCANmsg(data, NODE_A, sizeof(data), RTR_OFF);
Dentro de sendCANmsg, aquí está el fragmento:
TXB0CONbits.TXREQ = 1; // Request Message Transmission
while (TXB0CONbits.TXREQ); // Wait until message is sent.
Por cierto, estoy usando PIC18F25k80 para implementar esto. Estaba pensando que después de que el nodo B enviara el mensaje, cuando el nodo C está a punto de enviar su mensaje. El nodo B ganará nuevamente el arbitraje de bus, por lo que el nodo C no tendrá posibilidad de transmisión. Así que remedio que solo puedo pensar es en insertar un pequeño retraso como:
while(1) {
sendCANmsg(data, NODE_A, sizeof(data), RTR_OFF);
delay_us(10);
}
¿O me equivoco? :)