아두이노 스레드 예제

다른 스레드에서 LED를 깜박이면서 외부 장치를 기다리는 한 스레드. 생성, 구성, 그룹화했습니다. 무엇이 누락되었습니까? 예, whe 그것을 실행해야합니다! 다음은 실행해야 하는 모든 스레드를 실행합니다. LED를 깜박이는 것은 종종 아두 이노 사용자가 배우는 첫 번째 일입니다. 이는 LED 상태를 전환하는 것과 같은 단일 작업을 주기적으로 수행하는 것이 정말 쉽다는 것을 보여줍니다. 그러나 작업이 다른 일정이 있는 경우 여러 주기적 작업을 관리하는 것이 그렇게 간단하지 않다는 것을 빠르게 발견할 수 있습니다. 이 자습서에서는 4개의 스레드를 시작하므로 크기 4가 있는 pthread_t 변수 배열을 만듭니다. Arduino 인터럽트는 외부 이벤트(디지털 입력 핀의 전압 레벨 또는 레벨 변경)를 기반으로 하나의 함수(코드)를 호출할 수 있으며, 이 기능은 즉시 작동됩니다. 따라서 스레드 함수에서 변수를 int로 다시 캐스팅하는 한 해당 값을 올바르게 가져올 수 있습니다. 그러나 스레드에 전달하려는 변수의 크기가 4바이트(예: 구조체)보다 크고 이 경우 데이터 구조에 포인터를 전달해야 하는 경우에는 이 작업을 수행할 수 없습니다. 만약 당신이 데이터 시트 괴상한, 아두 이노 우노의 마이크로 프로세서 칩을 알 수 있습니다., Atmel ATMega328P, 상자 밖으로 16 Mhz에서 실행.

그것은 20Mhz의 수, 하지만 메모리에 데이터를 작성 하는 것 들 (또는, 알다시피, 불을 잡으려고) 엉망 되지 않습니다 그래서 다시 다이얼. 16Mhz는 매 초마다 아두 이노가 16,000,000 사이클을 처리하고 일명 1,600 만 개의 작품을 처리한다는 것을 의미합니다. 이제 이들은 코드 줄이 아닙니다 – 그것은 매우 빠르며 Arduino는 상대적으로 느립니다. 레지스터의 안팎으로 데이터를 이동하는 것과 같은 프로세서 지침입니다. 이 개요보다 낮은 수준으로 가는 것은 상당히 기술적 이므로 독자에게 연습으로 남겨 두겠습니다 🙂 세 번째 인수로 실행될 스레드 함수를 전달합니다. 이 스레드는 고정 된 프로토 타입을 가지고 있으며, 더 정확하게는 포인터를 void에 반환하고 void에 대한 포인터 (void *)를 입력으로 받아야합니다. 다중 스레딩을 수행하려면 기본 스케줄러를 구현하고 실행해야 하는 다양한 작업을 추적하기 위해 프로세스 또는 작업 목록을 유지 관리해야 합니다. 그것을 사용하는 많은 방법을 보여주는 많은 예가 있습니다.