Tenir compte de ce code en cours d'exécution sur mon unité de microcontrôleur (MCU):Comment recevoir des paquets sur le port série du MCU?
while(1){
do_stuff;
if(packet_from_PC)
send_data_via_gpio(new_packet); //send via general purpose i/o pins
else
send_data_via_gpio(default_packet);
do_other_stuff;
}
Le MCU est également relié à un PC via un UART.Whenever le PC envoie des données à la MCU, le new_packet est envoyé, sinon, le paquet par défaut est envoyé.Chaque paquet peut contenir 5 octets ou plus avec une structure de paquets prédéfinie.
Ma question est:
1.Should i recevoir le paquet entier de PC à l'aide à l'intérieur du UART interrut routine de service (ISR)? Dans ce cas, je dois implémenter une machine d'état à l'intérieur de l'ISR pour assembler le paquet (qui peut être long avec des blocs if-else ou switch-case).
OR
2.Have le PC envoyer une sorte de demande de commande (un octet), détecter dans mon ISR définir un indicateur, désactiver UART interrompre seul et former le paquet dans ma boucle while (1) en vérifiant pour le drapeau et interroger l'UART? Dans ce cas, l'interruption UART serait réactivée dans la boucle while (1) après la formation du paquet entier.
J'essaie mon premier choix. La mémoire tampon en anneau semble être beaucoup de travail dans le programme en ce qui concerne la comptabilité tête/queue ... Je ne fais pas beaucoup de calcul dans la boucle principale. Les horloges MCU à 4MHz et la ligne baud est 9600bps – itisravi