C에서 시스템 호출시 지연 시간을 구현하려면 어떻게해야합니까? stm32f429 및 hc-sr04 센서를 사용하고 있습니다. 10 마이크로 초의 트리거 펄스를 주어야합니다. 나는 다음과 같이 시도했다 :C에서 시스템 호출에 지연 시간 (마이크로 초)을 구현하는 방법
gpio_set_value(TRIG, 1);
for(k=0;k<16;k++)
asm("nop");
gpio_set_value(TRIG, 0);
그러나 나는 asm ("nop")이 지연에 대해 부정확하다고 생각한다. 시스템 호출에 마이크로 초의 지연을 구현하는 정확도 측면에서 가장 좋은 방법은 무엇입니까? 또 다른 작은 질문 : asm ("nop")에 대해, 내 장치의 ARM 프로세서가 주파수가 180MHz라는 것을 알고, 어떻게 단일 asm ("nop")의 해당 지연 시간을 계산할 수 있습니까? 감사합니다.
짧은 지연에 대한
정말 리눅스를 사용하고 있습니까? NOP를 사용하여 정확한 지연을하려면 인터럽트 및 다른 작업 전환을 비활성화해야하며 심지어 버스 조정자의 도움을 받아야합니다. 많은 하드웨어 타이머 중 하나를 사용하는 것을 고려하십시오. –
당신은 드라이버에서 그것을 할 수 있습니다. 전화 spin_lock_irq (&lock); udelay (10).! spin_unlock_irq (잠금) – John
안녕하세요 크리스 예, 이미 장애인 인터럽트 그러나 호기심을 위해, 어떻게 내가 측면에서 대응이 얼마나 ASM ("NOP") 계산할 수 있습니다. 안녕하세요 John! spin_lock과 spin_unlock 사이에 시스템 호출에 지연 또는 전체 코드 만 넣어야합니까? 답변 해 주셔서 감사합니다 – Anth