현재 사용자 정의 하드웨어를 제어하기 위해 GPIO 핀을 토글하는 내장 Linux 장치 (버전 2.6.28.10)에 사용자 공간 응용 프로그램이 있습니다. GPIO 레지스터에 대한 쓰기는 모두 장치에 액세스해야하는 별도의 pthreads
에서 발생합니다. semaphore
은 GPIO에서 동시에 쓰는 섹션에 여러 스레드가 액세스하지 못하도록하기 때문에 대부분 잘 작동합니다.임베디드 리눅스 원자 블록으로 코드 블록 실행
문제는 이들 GPIO 레지스터 (약 24 8 비트 쓰기)을 중단 스레드로 인해 세마포어에 레지스터를 수정할 수 있지만 will interrupt
가 현재의 thread와, 컨트롤이 반환되지 않습니다 다른 스레드에 쓰기의 중간에 GPIO에 몇 밀리 초 동안 쓰고있는 스레드는 물론 외부 장치로 전송 된 데이터를 무효화합니다.
리눅스에서이 GPIO 쓰기 세트 (총 약 50 usecs)가 다른 스레드에 의해 중단되지 않도록하는 방법이 있습니까?
커널 드라이버를 필요로하는 완벽한 예입니다.이 기능을 보장 할 수있는 것은 아무것도 없습니다. 범용 스레드 우선 순위가 도움이되지만 보증은 아닙니다. – Joe
그래도 커널 드라이버에서 보증 할 수 있습니까? 커널 드라이버의 코드 섹션도 중단 될 수 있다고 생각했습니다. –
커널 드라이버에서 스위치되는 다른 스레드에 대해 잠글 수 있습니다 (예). –