OS X против Linux - обработка последовательного порта - PullRequest
3 голосов
/ 22 августа 2010

Я пытаюсь перенести (или, скорее, настроить) чистое приложение Linux на OS X Snow Leopard (10.6.4). Это приложение, которое отправляет двоичный файл целевому оборудованию через последовательный порт. Приложение почти запущено, но у меня возникла интересная проблема с записью последовательного порта.

При тех же настройках, что и в Linux (скорость передачи - 115,2 Кб), отправка последовательных данных в OS X кажется в 10 или более раз медленнее, чем в Linux. То, что занимает 3 секунды в Linux, занимает 30-40 секунд, и к тому времени целевая прошивка на приемном конце истекает :).

Копаясь в функцию записи последовательного порта, я вижу, что она использует системный вызов select (), чтобы определить, готово ли устройство (или, скорее, дескриптор файла) для записи данных. Каждый системный вызов write записывает 1024 байта данных в OS X и 1087 байтов данных в Linux (то есть возвращаемое значение записи). Мой размер данных составляет около 50 КБ для двоичного файла первого уровня (это небольшой загрузчик, который может загружать больший двоичный файл на следующем уровне).

Псевдокод

    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}
}

Я заметил, что в linux записи происходят все время один за другим. Последовательность записей, и она выходит из функции в один миг. Но в OS X это похоже на 3 записи, а затем select возвращает ноль дважды (2 секунды прошло), снова несколько записей и выбор времени ожидания и т. Д. И т. Д., Что делает функцию намного медленнее.

Есть какие-нибудь подсказки?

Примечания: Приложение использует API-интерфейс termios lib для управления последовательным портом.

1 Ответ

1 голос
/ 22 августа 2010

Я мог бы это исправить, изменив драйвер устройства с обильной микросхемой. По умолчанию он использовал нестандартный драйвер с открытым исходным кодом, я скачал драйвер OS X с плодовитого сайта, и он работает нормально. Спасибо Нильсу и другим за поддержку!

...