自己动手从0到1学写RTOS学习指南

  1. 主页
  2. 自己动手从0到1学写RTOS学习指南
  3. 常见问题FAQ汇总
  4. 为什么每个任务执行20ms?

为什么每个任务执行20ms?

内容纲要

感谢同学 @在风野 的提问

Q:在时间片运行时, 为什么每个任务执行20ms?

{% highlight c%}
void tSetSysTickPeriod(uint32_t ms)
{
SysTick->LOAD = ms * SystemCoreClock /1000 – 1;
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) – 1);
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
}

void SysTick_Handler()
{
tTaskSched();
}

void delay(uint32_t count)
{
while(–count>0);
}

uint32_t TaskFlag1;
uint32_t TaskFlag2;
void Task1Entry (void param)
{
unsigned long valid =
(unsigned long *) param;
valid++;
tSetSysTickPeriod(10);
for(;;)
{
TaskFlag1 = 0;
delay(100);
TaskFlag1 = 1;
delay(100);
}
}
{% endhighlight%}

A:请在工程中的在target选项里把仿真器的时钟设置为25M,指定模拟器以25M运行。或者请配置系统配置文件system_armcm3.c中的XTAL的时钟为12M,以匹配模拟器实际运行的时钟。具体为何这么配置不必深究,这是与硬件和模拟器有关。

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

电子邮件地址不会被公开。 必填项已用*标注