我使用带DMA的ADC以48kHz采样率对声音进行采样。我使用的是HAL_ADC_ConvCpltCallback
函数,当标志亮起时,我需要处理这些样本。
在回调中,我只用样本填充数组,并将boolreadComplete
设置为true,然后在while(1(中检查是否为readComplete == true
,如果是,我在while循环中处理数据。
问题是,当我调试程序时,我可以看到回调的优先级高于while(1(循环,并且它随机跳到while。这就像while(1(循环不是每次都在执行一样。
问题是,我应该在哪里或如何处理这些数据?
设置readComplete标志的过程是正确的,因为您应该尽可能缩短程序在中断上下文中的运行时间。(ConvCpltCallback由STM HAL从中断上下文调用。(
中断总是比主循环具有更高的优先级
您何时开始下一个ADC转换过程?在while循环中完全处理数组数据之前,回调例程是否有可能覆盖数组数据?要解决此问题,您可以尝试增加DMA传输的大小,这将增加回调之间的时间。
请编辑您的问题,并发布相关源代码的简短摘要,以便我们有更好的了解。