2016-07-29 2 views
-1

현재 BeagleBone Black으로 Ubuntu를 사용하고 있으며 방향을 찾고 있습니다. 나는 SIGIO를 청취하고 그 라인의 데이터를 얻기 위해 read()을 실행하는 c 프로그램을 만들었다. 내 연구에서 인터넷 및 일부 책을 통해 보면,이 방법은 매우 효율적이지 않습니다. 신호 인터럽트를 수신하는 루프를 사용하는 것은 많은 양의 컨텍스트 전환 때문에 좋지 않습니다 (이 I/O 회선이 사용 중이므로 SIGIO가 초당 4 회 이상 트리거되며 이는 비동기입니다. 하드웨어 인터럽트를 사용하여 해당 데이터를 회선에서 가져 와서 레지스터에 넣고 직접 메모리 액세스를 사용하여 사용자가 액세스 할 수 있도록하는 것이 좋습니다. 그래서 문제는 어떻게해야 할 지에 대한 더 많은 정보를 얻을 수있는 곳이 무엇인지,이 주제에 대한 많은 정보를 찾았지만, 대부분 OS가 인터럽트를하거나 신호를 사용하는 방법에 대해 이야기하고 있습니다. 꽤 과세하고있다.리눅스, I/O 하드웨어 인터럽트를 사용하여 직접 메모리 액세스를 통해 사용자 접근 가능 영역에 데이터를 넣으십시오.

+1

"외부 리소스를 묻는 중"으로 닫기로 투표했습니다. 공식적으로는 맞지만 실제로는 귀하의 질문이 너무 광범위합니다. Linux가 작동하는 방식, 하드웨어, 드라이버, 권한있는 액세스, 동시성 등에 대해 훨씬 더 기본적인 연구가 필요합니다. 불쾌감은 없지만, 먼저 자신 만의 연구를 배우고 연구하라는 강한 요구. – Olaf

+0

먼저 주제에 대해 알기 위해 사람들을 밀어 붙이는 것에 대해 진지하게 생각합니다. 그러나 저는 그것을 조금 연구했습니다. 그러나 제가 발견 한 모든 것은 이론입니다. peole이 하드웨어 인터럽트를 사용하고 DMA를 사용하여 데이터를 다른 장소로 푸시 할 수 있었던 코드의 실제 예제를 찾을 수 없습니다. –

+0

"코드의 실제 예제를 찾을 수 없습니다 ...". 미안 해요,하지만 그럴 수는 없습니다! Linux는 오픈 소스이며 모든 소스는 무료로 제공됩니다. 커널 소스에 인터럽트와 DMA를 사용하는 드라이버가 하나도 없다는 것을 정말로 알고 싶습니까? – Olaf

답변

0

시간과 대기 시간에 많은 관심이 있다면 아마도 실시간 시스템을 사용해야 할 것입니다.

Beaglebone black은 PRC (Programmable real-time units)라고 불리는 SOC에 실시간 프로세싱 코어가 있습니다. PRU의 개념을 처음 접했을 경우 here을 시작한 다음 PRU의 필요성과 목적을 이해하면 시작하기 전에 동일한 웹 사이트에 자습서가 있습니다.

remoteproc, rpmsg 및 과 같은 최신 소프트웨어 지원을 사용하면 작업을 이해하면 PRUs를 매우 쉽게 사용할 수 있습니다.