用AT32F403A和FreeRtos做的一个工程,AD采样里电池adc,usb adc,和一个旋转电位器adc(0x0000 - 0x0FFF)。AD采样回来做中位值平均滤波时,旋转电位器处于0x29以下时跑旋转电位器的adc滤波算法时,会出现算法中的函数局部变量数组的地址跑到电池adc的滤波算法中的局部变量数组的地址中,这个现象会导致滤波后的数据异常,但是跑一会以后电位器adc滤波算法中的局部变量数组的地址又会去到另一个地址保持不变。电位器adc滤波跟电池adc一个在线程跑一个在空闲任务跑,两个滤波算法是一样的,但是是在各自文件中定义的算法,没有共用同一个算法函数。这个是个什么样的情况,想问问有没有懂这方面的大佬这是为什么。[C] 纯文本查看 复制代码 uint16_t xx_Filter(uint16_t *ADC_BUF, uint_8 count)
{
uint8_t i,j=0;
uint16_t temp;
uint16_t ADC_cpy_speed[count];
uint32_t sum = 0;
for(i = 0;i < count; i++)
{
if(ADC_BUF[i] != 0)
ADC_cpy_speed[i] = ADC_BUF[i];
}
for(j = 0;j<count;j++)
{
for(i = 0;i < count-j-1;i++)
{
if(ADC_cpy_speed[i]>ADC_cpy_speed[i+1]){
temp = ADC_cpy_speed[i];
ADC_cpy_speed[i] = ADC_cpy_speed[i+1];
ADC_cpy_speed[i+1] = temp;
}
}
}
for(i = 2;i<(count -1);i++)
{
sum = sum + ADC_cpy_speed[i];
}
return sum;
} |