刚开始学习UCOS。现在碰到一个问题,向大家请教一下。 我现在对交流电压电流进行采样,采样192点后计算电流电压等参数。并根据参数判断是否存在告警,如果存在告警继电器输出。所以我想在中断中发送信号量,使采样完毕就马上能计算参数。但在OS_Sched程序内并不希望在中断执行。看if (OSIntNesting == 0)。 因为刚开始接触UCOS,对任务切换不是很了解,让我很担心。
void __attribute__((__interrupt__,no_auto_psv)) _ADC1Interrupt( void ) { AD1CON1bits.ASAM = 0; // 停止自动采样
IFS0bits.AD1IF = 0; /* 取出采样数据*/ current_sample[IO_CUR][DataNum] = ADC1BUF0; voltage_sample[AB_VOL][DataNum] = ADC1BUF1; current_sample[A_CUR][DataNum] = ADC1BUF2; current_sample[B_CUR][DataNum] = ADC1BUF3; voltage_sample[BC_VOL][DataNum] = ADC1BUF4; current_sample[C_CUR][DataNum] = ADC1BUF5;
DataNum++; // wait for the next data if(DataNum >= BUF_SIZE) { // loop back to the begin of cycle buffer DataNum = 0; }
if ( ++sampleCount >= 192) { sampleCount = 0; OSSemPost(CalculateSem); // 采样数据完毕,开始计算。 } /* reset ADC interrupt flag */ } |