2017-07-18 1 views
-1

Je travaille avec 2 petites machines avec des outils Unix limités. Les deux sont connectés entre eux par série. Je transfère des données binaires, donc les appareils sont en mode raw. L'expéditeur envoie des fichiers à l'autre et il y a un délai de X ms (spécifié comme paramètre). Je voudrais savoir s'il est possible de mesurer ces délais sur la machine de destination afin d'identifier le nombre de fichiers à venir. Jusqu'à présent, j'utilisais cat < /dev/ttyS5, mais ce n'est pas une option pour mon but.comment savoir quand aucune donnée ne vient sur le port série unix

Une idée?

Merci

+0

Atmel USARTs a ajouté du matériel pour détecter un délai d'expiration du récepteur. Mais en général, en particulier à partir de l'espace utilisateur, vous ne pouvez pas mesurer avec précision l'heure d'arrivée des caractères. Essayer de mesurer les retards entre les personnages est une course de fou; comment gérez-vous le cas lorsque le personnage "suivant" n'arrive jamais? De plus, vous posez une question XY. Vous n'auriez même pas besoin de dépendre de mesures impossibles à obtenir si vous aviez un protocole de message approprié pour identifier les données dans les datagrammes/paquets et pour assurer l'intégrité des données. – sawdust

+0

Je me demande toujours pourquoi les gens ne s'en tiennent pas à la question au lieu de se demander pourquoi je fais ce que je fais au lieu de comment ils l'aiment. – Lomezno

Répondre

0

à mon humble avis la meilleure façon est d'écrire un petit programme qui est en attente d'octets sur la ligne série. Chaque fois qu'un personnage arrive, une sorte de minuterie/horodatage est réinitialisée. Un autre thread pourrait être l'évaluation de ce temporisateur/timestamp dans une boucle et incrémenter un compteur s'il est plus grand qu'une valeur définie. Mais veuillez noter que vous pouvez rencontrer des retards de la ligne série car il y a le noyau et son planificateur "entre". De plus, vous aurez besoin d'un verrouillage approprié bien sûr!

+0

Oui, j'ai la même idée. Le problème que j'ai est comment mesurer le temps en millisecondes. J'ai essayé avec 'date +% s% N' pour l'obtenir en nano secondes, mais ma machine ne fonctionne pas avec'% N'. – Lomezno

+0

En C J'utilise https://linux.die.net/man/2/gettimeofday. Cela fonctionne plutôt bien pour les temps relatifs! – g0hl1n

+0

Impossible d'utiliser C ... Seulement bash/sh, assez limité. Probablement, je vais devoir utiliser 'time' ou' times', je ne sais pas encore ... – Lomezno