初级会员
- 积分
- 127
- 金钱
- 127
- 注册时间
- 2020-12-25
- 在线时间
- 22 小时
|
30金钱
有3个任务调用采集函数:其中两个任务A、B直接是for循环读取100个然后求均值,另外一个任务C使用定时器,每100us中断一次,总共采集900个点(3个周期,因为是交流信号,需要傅里叶计算)。
1,如果只开启任务A、B采集数据没有问题。
2,如果开启任务C,其他两个任务采集到数据大概率会异常。
鄙人不成熟的想法:
方法一:当任务C运行到开定时器采集的时候,把另外两个任务挂起,采集结束后再恢复。
方法二:任务C定时器采集代码部分使用临界函数,即taskENTER_CRITICAL()和taskEXIT_CRITICAL()。
AD7606采集函数如下:
static bool AD7606_ReadBytes(int16_t *value, int size)
{
unsigned char j, k;
unsigned char Busy;
int16_t TempA=0, TempB=0;
ad7606_StartConv();
delay_us(2);
Busy = AD7606_BUSY ;
while( Busy == 1 )
{
delay_us(1);
Busy = AD7606_BUSY;
}
AD7606_CS = 0;
for(j=0; j<4; j++)
{
TempA=0;
TempB=0;
for(k=0; k<16; k++)
{
AD7606_SCLK = 0;
TempA=(TempA<<1) + AD7606_DOUTA;
TempB=(TempB<<1) + AD7606_DOUTB;
AD7606_SCLK = 1;
}
value[j]=TempA;
value[j+4]=TempB;
}
AD7606_CS = 1;
return true;
}
不知道各位大佬有没有更好的解决方法?求个解决思路,不胜感激!
|
|