드라이버 컨텍스트에서 스핀 록 및 지연과 관련된 일반적인 질문이 있습니다. gpio에서 읽고 쓰는 Linux 드라이버가 있습니다. 읽기 및 쓰기 작업은 단일 핀으로 이루어지며 완전히 타이밍 기반입니다 (HDQ 프로토콜). 원래 드라이버는 udelay() 호출을 사용하여 구현되었으며 최악의 시나리오는 약 500 us입니다. 드라이버는 인터럽트로 구현하지 않습니다. 특정 GPIO에서 정기적 인 읽기 및 쓰기로 일반 gpio_get_value() 및 gpio_set_value()을 사용합니다. 이러한 지연 사이에는 드라이버가 스핀 록을 포함합니다. 얼마나 안전합니까? 나는 spinlocks로 묶인 이러한 딜레이에 조금 관심이있다.리눅스 드라이버 컨텍스트에서 마이크로 초 지연 및 스핀 록
0
A
답변
2
udelay
은 원자 섹션 (즉, 스핀 록 또는 인터럽트)에서 사용하는 것이 안전합니다. 모든 세부 사항은 the kernel timers howto을보십시오.
udelay
이 통화 대기 중이므로 성능이 걱정 될 수 있습니다. 그러나 스케줄이 가능한 절전 모드를 사용할 때 정확한 타이밍이 아니기 때문에 타이밍 요구 사항을 충족하는지 확신하기가 어려울 수 있습니다. 프로세서의 경우, usleep
은 충분히 정확해야하지만 udelay
보다 덜 확실합니다. 또한 usleep
을 호출 할 때 스핀 록을 유지할 수 없으므로 다른 동기화 메커니즘을 사용해야합니다.
관련 문제
- 1. 인터럽트 및 스핀 록
- 2. 마이크로 초 지연
- 3. C의 세마포어 및 스핀 록 조합?
- 4. 단일 프로세서 및 멀티 프로세서의 스핀 록
- 5. netfilter 후크의 스핀 록 이해하기
- 6. 정확히 "스핀 록"이란 무엇입니까?
- 7. 스핀 록 교착 상태 피하기
- 8. InterlockedExchange 대 InterlockedCompareExchange 스핀 록
- 9. 데드 록 리눅스 파이프
- 10. C++ - 뮤텍스 및 스핀 록 초기화 및 파기
- 11. , 초, 밀리 초, 마이크로
- 12. GCC 원자 작업에서 만들어진 경량 스핀 록?
- 13. 스핀 록 동결 Linux 커널 스레드
- 14. 사용자 공간 응용 프로그램에서 스핀 록 사용
- 15. Intel Inspector가 스핀 록 구현에서 데이터 경주를보고합니다.
- 16. 정적 pthread 스핀 록 초기화가 있습니까?
- 17. iOS를 스트리밍 할 때 스핀 록 (시뮬레이터에서만)
- 18. TimeVal 구조 초 및 마이크로 초
- 19. C에서 시스템 호출에 지연 시간 (마이크로 초)을 구현하는 방법
- 20. 드라이버 내부에서 드라이버를 사용하는 리눅스
- 21. 리눅스 커널에서 마이크로 초 단위로 잘 수 있습니까?
- 22. 시간차 차이 (마이크로 초)
- 23. C# 시간 (마이크로 초)
- 24. 밀리 초/마이크로 초 해상도에 대한
- 25. ARM에서 스핀 록 구현을 위해 STREX 대신 STREXEQ 사용
- 26. 비트 록 설치 프로그램 - 리눅스 시작하기
- 27. 부스트 ptime에서 초, 밀리 초 및 마이크로 초를 삭제합니다.
- 28. 30 초 지연 방법
- 29. Windows XP와 Windows 7간에 스핀 록 구현이 다른 이유는 무엇입니까?
- 30. Linux 커널 덤프 : 스핀 록 소유자를 얻는 방법