문제

간단한 아키텍처가 있습니다.

  1. 메인 칩 (ARM9 기반)
  2. PIC 컨트롤러

PIC는 데이터 전송을위한 인터럽트 기반 I2C 통신 프로토콜을 통해 ARM으로 통신합니다. 인터럽트 내에서 우리는 I2C 계층 (BUS)의 데이터를 읽는 작업을 알립니다.

데이터가 제한되어 있으면 일반적으로 데이터를 읽고 상단 계층으로 보내는 데 많은 문제가 없습니다. 이 데이터가 매우 큰 경우 인터럽트는 오랫동안 묶여 있습니다.

첫 번째 질문은 다음과 같습니다.

  1. 내가 맞아?

  2. 내가 옳은 경우, 같은 것을 피하는 방법은 무엇입니까? ... 아니면 다른 솔루션이 될 수 있습니까?

도움이 되었습니까?

해결책

때로는 커널 스레드라고 불리는 일종의 '작업자 스레드'가있어 I2C 인터페이스에서 데이터를 꺼내서 버퍼링하고 시스템의 다른 부분으로 건네주는 것 등이 있습니다. 인터럽트 루틴 만 사용하십시오. -커널 스레드를 차단합니다. 이렇게하면 시스템이 수행 해야하는 다른 직무가있는 경우 인터럽트 핸들러에 의해 그렇게하지 못하며 여전히 기기에서 데이터를 적시에 가져옵니다.

다른 팁

인터럽트 루틴을 한 번에 실행하여 완전한 패킷을 읽지 않아야합니다. 하드웨어 지원에 따라 하나의 샘플/비트/바이트를 처리하고 버퍼에 데이터를 저장하고 패킷이 완료 될 때만 작업을 알리십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top