OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2449|回复: 1

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

[复制链接]

18

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-12-24
在线时间
29 小时
发表于 2017-3-15 20:36:01 | 显示全部楼层 |阅读模式
1金钱
问题如题,在实时系统中添加了一个实时时钟用于显示时间,还有几个不同的任务,现在的问题是,实时时钟明显偏慢(单独使用的时候没有问题),调用统计函数发现系统使用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
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-12-24
在线时间
29 小时
 楼主| 发表于 2017-3-19 00:55:15 | 显示全部楼层
有人帮忙吗   给个RTC时钟在操作系统中的范例也可以啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-23 06:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表