2010-08-22 3 views
3

순수 Linux 응용 프로그램을 OS X Snow Leopard (10.6.4)로 이식하려고합니다. 직렬 포트를 통해 대상 하드웨어에 바이너리를 보내는 응용 프로그램입니다. 응용 프로그램이 거의 실행되고 있지만 직렬 포트 쓰기와 함께 흥미로운 문제가 발생했습니다.OS X Vs Linux - 직렬 포트 처리

Linux (115.2k는 전송 속도)와 동일한 설정으로 OS X 직렬 데이터 전송은 Linux에 비해 약 10 배 이상 느린 것으로 보입니다. 리눅스에서 3 초가 걸리면 30-40 초가 걸리며 수신 측의 대상 펌웨어가 시간 초과됩니다. :)

직렬 포트 쓰기 기능을 파헤쳐 보면 장치 (또는 파일 설명자)에 데이터를 쓸 준비가되었는지 찾기 위해 select() 시스템 호출을 사용하고 있습니다. 각각의 write 시스템 호출은 OS X에서 1,024 바이트의 데이터와 Linux에서 1087 바이트의 데이터를 씁니다 (쓰기의 반환 값은 무엇인지). 내 데이터 크기는 첫 번째 레벨 바이너리의 경우 약 50KB이며 다음 레벨에서 더 큰 바이너리를로드 할 수있는 작은 부트 로더입니다.

의사 코드

내가 리눅스에서, 모든 시간을 잇달아 발생 쓰는 관찰
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} 
} 

. 일련의 쓰기 및 그것은 jiffy의 함수에서 나온 것입니다. 그러나 OS X에서는 3 회 쓰기와 같아서 다시 0을 두 번 (2 초 간 사라짐) 다시 읽습니다. 몇 번의 쓰기 및 시간 초과 선택 등은 기능을 훨씬 느리게 만듭니다.

실마리가 있습니까?

Notes : 응용 프로그램은 termios lib API를 사용하여 직렬 포트를 제어합니다.

답변

1

다작 칩 장치 드라이버를 변경하여이 문제를 해결할 수 있습니다. 기본적으로 비표준 오픈 소스 드라이버를 사용하고 있었고, 다작의 웹 사이트에서 OS X 드라이버를 다운로드 했으므로 제대로 작동합니다. Nils 및 기타 지원에 감사드립니다.