【发布时间】:2017-09-26 23:10:59
【问题描述】:
我有一个代码需要在定时器中断中读取 AD 通道(精确时间)。
如果我只是阅读广告,一切都会好起来的。但我需要使用数字滤波器,如果我只在中断中放一个乘法,则会出现警告:
没关系:
#int_RTCC
void RTCC_isr(void)
{
set_adc_channel(0);
delay_us(40);
unsigned int16 aD = read_adc();
}
但这会得到警告:
#int_RTCC
void RTCC_isr(void)
{
set_adc_channel(0);
delay_us(40);
unsigned int16 aD = read_adc();
aDfilter = aDfilter * 8 + aD * 2;
}
在调用期间禁用中断以防止重入 (@MUL3232)
我不想禁用计时器,因为我需要精确度。我该如何解决这个问题?
【问题讨论】:
-
警告是什么?可能您需要进行如下计算:
aDfilter = (float)aDfilter * 0.8f + (float)aD * 0.2f;顺便说一句,您想通过禁用中断来防止重入?没有意义,或者您可能需要不同的词,例如 prevent recursion? -
抱歉,正确的是:aDfilter = aDfilter * 8 + aD * 2 不需要浮动。问题是我在中断内部和外部使用乘法。有没有办法做到这一点?
-
基本上所有问题都源于此:PIC 不是 PC。
-
"在调用期间禁用中断以防止重入" 嗯?什么时候打电话? “防止重入”是什么意思,您的问题是缺乏重入。
-
@Lundin 我猜错误应该是“在调用期间禁用中断以防止重新进入”。