实时时钟在UCOS系统中总是偏慢

2019-10-11 14:52发布

问题如题,在实时系统中添加了一个实时时钟用于显示时间,还有几个不同的任务,现在的问题是,实时时钟明显偏慢(单独使用的时候没有问题),调用统计函数发现系统使用CPU的时间也只有3%,自己分析应该是中断给不停的打断造成的,贴出实时时钟的代码,有什么可以修改的地方吗?然后就是一般要用到中断的时候,中断的抢占优先级和相应优先级一般设成多少比较好?谢了,各位大神。
static void NVIC_Configration(void)
{
        NVIC_InitTypeDef NVIC_Strature;

        NVIC_Strature.NVIC_IRQChannel=RTC_IRQn;
        NVIC_Strature.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_Strature.NVIC_IRQChannelSubPriority=2;
        NVIC_Strature.NVIC_IRQChannelCmd=ENABLE;
       
        NVIC_Init(&NVIC_Strature);
}

static void RTC_Configration(void)
{
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
        PWR_BackupAccessCmd(ENABLE);
        BKP_DeInit();
        RCC_LSEConfig(RCC_LSE_ON);
  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);       
        RCC_RTCCLKCmd(ENABLE);
        RTC_WaitForSynchro();
        RTC_WaitForLastTask();
        RTC_ITConfig(RTC_IT_SEC,ENABLE);
        RTC_WaitForLastTask();
        RTC_SetPrescaler(32767);
        RTC_WaitForLastTask();       
        RTC_ExitConfigMode();
}
void RTC_Init(void)
{
        NVIC_Configration();
        if(BKP_ReadBackupRegister(BKP_DR1)!=0xAAAA)
        {
                RTC_Configration();
                RTC_SetCounter(counter);
                RTC_WaitForLastTask();               
                BKP_WriteBackupRegister(BKP_DR1,0xAAAA);       
        }       
        else
        {
                RTC_WaitForSynchro();
                RTC_WaitForLastTask();
                RTC_ITConfig(RTC_IT_SEC,ENABLE);
                RTC_WaitForLastTask();
        }
        RCC_ClearFlag();
}

void RTC_IRQHandler(void)
{
        u32 sum;
#ifdef SYSTEM_SUPPORT_OS                
        OSIntEnter();   
#endif
        sum=RTC_GetCounter();
        hh=sum/3600%24;
        mm=sum%3600/60;
        ss=sum%60;
        RTC_ClearITPendingBit(RTC_IT_SEC);
#ifdef SYSTEM_SUPPORT_OS         
        OSIntExit();                                                                                           
#endif
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。