我当前有这样一个项目:硬件上,一个24位ADC,是I2C接口+一个INT接ESP32;软件上,当这个ADC每次采样完成并准备好数据后,会通过INT脚发上升沿中断信号给ESP32;在ESP32里,基于ESP-IDF我是这样处理的:
定义I2C总线驱动;调用xQueueCreate(10, sizeof(uint32_t))创建gpio_evt_queue;定义gpio中断GPIO_PIN_INTR_POSEDGE类型,同时打开中断(中断发生时发送一个gpio_evt_queue);创建Task等待gpio_evt_queue,当接收到一个gpio_evt_queue时,通过I2C读ADC的采样数据;
目前我遇到的问题是:当ADC采样率设置低时,比如80HZ,程序能正常运行;但当设置到更高采样率,比如160HZ时,gpio_evt_queue会爆满而程序跑飞。试着把gpio_evt_queue尺寸调大,这只能延缓queue爆满的过程;试着在Task里,仅读ADC数据并保存到Buffer,仍然会queue爆满;
综上所述,感觉是task loop跟不上gpio中断,请问这样的问题如何优化好?
esp32外挂ADC,数据收集问题
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: esp32外挂ADC,数据收集问题
你先分析一下 task 中接收到一个 gpio_evt_queue 后,单次通过 I2C 读 ADC 的采样数据需要耗费多少时间,从而可以大致算出可以支持的最大采样率。然后再来看能否优化这个读取的时间。
Who is online
Users browsing this forum: No registered users and 79 guests