우리는 Raspbian이 설치된 Raspberry Pi에서 소프트웨어 PWM을 사용하여 최상의 결과를 얻으려고 노력했습니다. GPIO 핀에서 PWM을 시작하는 Python 스크립트를 작성하고 오실로스코프를 사용하여 결과를 관찰했습니다.
효과는 크지 않으며 지연은 용납될 수 없습니다.
그 후 소프트웨어 PWM 프로세스의 실시간 우선순위를 99로 설정하고 일정을 실시간 루프로 변경한 다음 fifo(1865는 프로세스 pid)로 변경했습니다.
sudo chrt -f -p 99 1865
sudo chrt -r -p 99 1865
우선순위 변경 전과 동일하게 동작합니다.
모두다른 프로세스는 실시간이 아닌 우선순위로 실행됩니다. 그러나 타이머와 USB는 초당 약 3000회 인터럽트를 발생시킵니다.
이것에질문대답은 다음과 같습니다.
...일반 코어는 실시간 우선순위를 처리하여 일반 작업보다 높은 우선순위를 부여하며 이러한 작업은 일반적으로 CPU에 자발적으로 양보할 때까지 실행됩니다.
우선 순위를 변경해도 눈에 띄는 효과가 없는 이유를 알고 계십니까? 실시간 우선순위가 인터럽트 중에 발생하는 일에 영향을 줍니까?
답변1
프로세스가 사용자 공간에서 실행 중이고 사용자 공간의 다른 프로세스 컨텍스트에서 실시간 우선 순위가 부여되었기 때문에 눈에 띄는 효과는 없었습니다.
그러나 커널 공간은 여전히 인터럽트로 로드되며, 다른 프로세스가 프로세서 시간의 (작은) 공유를 얻으면 시스템 호출을 시작하여 프로세스의 실시간 우선 순위가 의미가 없는 커널 공간으로 마이그레이션될 수 있습니다.
인터럽트는 모두 커널 공간에서 발생하므로 실시간 우선순위의 영향을 받지 않습니다.