gpt4 book ai didi

c - 中断 PIC CCS

转载 作者:行者123 更新时间:2023-11-30 16:41:01 25 4
gpt4 key购买 nike

我有一个代码,需要在定时器中断中读取 AD channel (具有精确时间)。

只要我读完广告就一切都好。但我需要使用数字滤波器,如果我只在中断中放入乘法,则会出现警告:

这样就可以了:

#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)

我不想禁用计时器,因为我需要精度。我该如何解决这个问题?

最佳答案

问题1:PIC通常指的是8位CPU。 8 位 CPU 无法自动读取 16 位值 (aDfilter)。如果您的 RTC 中断在主程序仅读取一半值时触发,您的程序将崩溃并烧毁。您需要某种重新进入的方法,这是编译器告诉您的。

问题 2:PIC 通常意味着 CPU 速度非常慢,并且中断延迟很大。因此,ISR 中不应该有算术。这肯定涉及到浮点计算。整数相乘甚至可能已经够糟糕的了。

问题 3:PIC 通常意味着没有 FPU 的 CPU 速度非常慢,这意味着您不应该从一开始就使用 float 。您最终将调用支持 float 的软件库,这非常慢。显示的代码中没有任何内容表明需要在此程序中使用浮点。

解决方案:使用整数。通过同步手段实现重入。这在单核微 Controller 上相当容易做到,其中中断总是阻止进一步的中断,simple example 。然后将数字滤波器计算外包给调用者应用程序。只需添加一个标志来告诉它有新数据可用。

关于c - 中断 PIC CCS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46427314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com