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