espressif / esp-drone

Mini Drone/Quadcopter Firmware for ESP32 and ESP32-S Series SoCs.
GNU General Public License v3.0
831 stars 243 forks source link

stabilizerTask是如何以1000Hz的频率执行的呢? #62

Closed HelloIDTC closed 7 months ago

HelloIDTC commented 7 months ago

在stabilizerTask任务的while(1)循环中并没有调用vTaskDelayUntil之类的时间函数,那么stabilizerTask是如何以1000Hz的频率执行的呢?

leeebo commented 7 months ago

@HelloIDTC stabilizerTask 是传感器事件驱动的,传感器是 1000 Hz 报中断,所以 stabilizerTask 以同样的频率执行

HelloIDTC commented 7 months ago

@leeebo 感谢回复 是不是执行到sensorsWaitDataReady()这里,然后stabilizerTask任务阻塞,等待传感器1ms中断然后唤醒stabilizerTask任务? 那么传感器1000Hz的中断时间是非常精确的么?会不会有时候有抖动? 我看crazyflie的源码原来在stabilizerTask中会调用vTaskDelayUntil(&lastWakeTime, F2T(RATE_MAIN_LOOP));来延时,后来也改成等待传感器中断的方式了,不知道有什么优势

leeebo commented 7 months ago

@HelloIDTC 传感器来的中断信号是基本准确的,你可以用逻辑分析仪抓一下

HelloIDTC commented 7 months ago

@leeebo 嗯嗯,明白了,感谢,中断信号的时间应该是和数据输出速率(ODR寄存器)的配置是一致的?

leeebo commented 7 months ago

@leeebo 嗯嗯,明白了,感谢,中断信号的时间应该是和数据输出速率(ODR寄存器)的配置是一致的?

Yes

HelloIDTC commented 7 months ago

@leeebo 好的,感谢感谢