打印

不同时钟下ucos ii调度时间为什么不一样?

[复制链接]
1332|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wujun23941105|  楼主 | 2013-7-8 22:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主芯片:STM32F103VE 系统:ucos ii
外部时钟 12M  PLL进行6倍频产生72M系统时钟
#define COMMONPost(Flag) OSFlagPost(COMMONFlag,Flag,OS_FLAG_SET,&err)
#define COMMONPend(Flag) OSFlagPend(COMMONFlag,Flag,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,0,&err)
#define TIM4_Flag  (1<<1)
#define COMMONFlagInit         0
#define TIME4_PRESCALER 72
OS_FLAG_GRP * COMMONFlag;

void main()
{
  bool Flag=0;
…………硬件初始化
OS_CPU_SysTickInit();
....
    DRV_Tim4Init();
    COMMONFlag = OSFlagCreate(COMMONFlagInit, &err);//创建标志位
  创建任务AppTask();
}

void AppTask(void);
{
   while(1)
{
         DRV_Tim4Pend();
         if(Flag)
         {
              SetRLED();
             Flag=0;
         }
       else
      {
        ClrRLED();
             Flag=1;

      }
}


void DRV_Tim4Pend(void)
{
        uint8 err;
       
        COMMONPend(TIM4_Flag);
}

void DRV_Tim4Init(void)
{
…………
TIM4->PSC = TIME4_PRESCALER-1;//72分频
.......
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel;
...
TIM4->ARR = 250;//250us定时
……。
TIM_Cmd(TIM4, ENABLE);
}
//中断函数
void DRV_Tim4Irq(void)
{
   if(TIM4->SR&0X0001)//溢出中断
        {
                TIM4->SR&=~(1<<0);//清除中断标志位      
                COMMONPost(TIM4_Flag);
        }
}

这时用示波器看输出的高低变化为250us
当把系统时钟改为12M   #define TIME4_PRESCALER 12
时出来的波形变化有时小于200us有时大于300us请问各位大侠这是什么原因呢?

相关帖子

沙发
e08610318| | 2013-7-9 15:56 | 只看该作者
按照你这个程序,相当于一个任务被挂起一段时间,而这个时间只和你延时的时钟节拍数和系统始终节拍周期有关

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

22

帖子

0

粉丝