아두이노 쓰레드 예제

나는 타이머 인터럽트 내에서 콜백을 배치하고, 짜잔! 아두 이노에서 실행되는 의사 스레드가 있습니다 … 이반세이델/아두이노스레드의 신작에 대한 알림을 원하십니까? 스레드 개체는 생성될 때 ThreadHandler에 자동으로 연결됩니다. 이 것들은 용어의 실제 컴퓨터 과학 의미에서 “스레드”가 아니라는 점에 유의해야합니다 : 작업은 주기적으로 실행되는 함수로 구현됩니다. 한편으로는 작업이 CPU를 생성할 수 있는 유일한 방법은 호출자에게 돌아가는 것이고, 따라서 작업 내에서 지연()하거나 긴 대기를 수행하는 것은 바람직하지 않다는 것을 의미합니다. 다른 한편으로는, 이것은 ArduinoThreads 메모리 친화적인, 아무 스택 작업 당 할당 될 필요가 있기 때문에. 한 마디로, 당신은 아두 이노에서 밀리 () 함수와 타이머 인터럽트를 사용하여 폴링 스케줄러를 구축 할 수 있습니다. Arduino 코어에 있는 이 라이브러리의 헤더 파일은 여기에서 찾을 수 있습니다. pthread라이브러리의 구현은 IDF 프레임워크의 GitHub 페이지에서 확인할 수 있습니다. Arduino 인터럽트는 외부 이벤트(디지털 입력 핀의 전압 레벨 또는 레벨 변경)를 기반으로 하나의 함수(코드)를 호출할 수 있으며, 이 기능은 즉시 작동됩니다.

아두 이노는 스레딩을 지원하지 않습니다. 그러나 다음으로 가장 좋은 작업을 수행하여 인터리빙에서 실행되는 상태 시스템을 중심으로 코드를 구조화할 수 있습니다. ThreadController는 실제로 스레드 자체임을 기억하십시오. 스레드를 그룹화하고 함께 관리하려면(사용 또는 비활성화), 스레드 컨트롤러 내부에 모든 스레드 컨트롤러를 넣고 이 ThreadController를 다른 ThreadController에 추가하는 것을 생각해 보십시오(예! 하나 안에). 컨트롤러인 컨트롤러 예제를 확인합니다. StaticThreadController: 스레드 컨트롤러의 약간 빠르고 작은 버전. ThreadController와 비슷하게 작동하지만 일단 생성되면 실행할 스레드를 추가하거나 제거할 수 없습니다. 마무리하려면 printThreadId 함수를 만듭니다. 앞서 언급했듯이 포인터를 void에 반환하고 void에 대한 포인터로 받는 것에 해당하는 정의된 프로토타입을 존중해야 합니다. 라이브러리에는 스레드, 스레드 컨트롤러 및 StaticThreadController(두 컨트롤러 모두 스레드에서 상속)의 세 가지 주요 클래스가 포함되어 있습니다. StaticThreadController 실행할 스레드의 정확한 수를 알고 있을 때 최적입니다. 런타임에 스레드를 추가하거나 제거할 수는 없지만 모든 디딤단을 함께 유지하기 위해 추가 메모리가 필요하지 않으며 스레드 수를 제한하지 않으며(사용 가능한 메모리 제외) 모든 스레드가 항상 존재하기 때문에 코드가 약간 더 최적화될 수 있습니다.

런타임 검사를 수행할 필요가 없습니다.