问题如题,在实时系统中添加了一个实时时钟用于显示时间,还有几个不同的任务,现在的问题是,实时时钟明显偏慢(单独使用的时候没有问题),调用统计函数发现系统使用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
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>