2010-08-22 21 views
3

J'essaie de porter (ou plutôt de personnaliser) une application Linux pure sous OS X Snow Leopard (10.6.4). C'est une application qui envoie un binaire à un matériel cible sur le port série. L'application est presque en cours d'exécution mais je suis frappé par un problème intéressant avec le port série écrit.OS X Vs Linux - Gestion du port série

Avec tous les mêmes paramètres que Linux (115.2k est le débit en bauds) OS X série de données semble être environ 10 fois ou plus lent par rapport à Linux. Ce qui prend 3 secondes sous Linux, prend 30-40 secondes et à ce moment-là le firmware cible à la réception arrive à expiration :). Je regarde la fonction d'écriture du port série, je vois qu'il utilise l'appel système select() pour trouver si le périphérique (ou plutôt le descripteur de fichier) est prêt à écrire des données. Chaque appel système write écrit 1024 octets de données sous OS X et 1087 octets de données sous Linux (c'est la valeur de retour de write). Ma taille de données est d'environ 50 Ko pour un binaire de premier niveau (c'est un petit bootloader qui peut charger un plus grand binaire au niveau suivant).

Code Pseudo

select() configuration with 1s time out and observing the serial port file descriptor for write ready. 
while(true) 
{ 
rc=select(...) 
if(rc>0){write(...) and other logic to get out of while if done} 
if(rc==0){//try again} 
if(rc<0){//error} 
} 

Je remarquai que dans linux, écrit arrive tout le temps l'un après l'autre. Une séquence d'écritures et il sort de la fonction en un tournemain. Mais, dans OS X, il est comme 3 écrit, puis sélectionnez renvoie zéro deux fois (2 secondes) à nouveau quelques écritures et sélectionnez le temps d'arrêt etc etc rendant la fonction beaucoup plus lent.

Des indices?

Remarques: L'application utilise l'API termios lib pour contrôler le port série.

Répondre

1

Je pourrais résoudre ce problème en changeant le pilote de périphérique de puce prolifique. Par défaut, il utilisait un pilote open source non standard, j'ai téléchargé le pilote OS X à partir du site Web prolifique et cela fonctionne bien. Merci à Nils et autres pour le soutien!