1.UC/OS用的是SysTick提供的时钟节拍
2.如果程序的延时delay_ms函数用SysTick做。
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
两者之间会不会产生冲突!导致UC/OS系统工作不正常?
但是我这样用了还是工作正常的。求解释一下 计数器都关闭了。 |