在中断可不可以调用OS_Sched函数

[复制链接]
 楼主| 龙斌 发表于 2008-10-20 08:36 | 显示全部楼层 |阅读模式
刚开始学习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 */
}
btiger2000 发表于 2008-10-20 16:36 | 显示全部楼层

中断中可以发送信号量的!

alex74 发表于 2008-10-20 23:46 | 显示全部楼层

..

用Sem
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

24

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部