论坛大神
  
- 积分
- 1876
- 金钱
- 1876
- 注册时间
- 2014-9-10
- 在线时间
- 208 小时
|
8金钱
本帖最后由 jiutianshenjian 于 2016-5-26 11:02 编辑
任务如下:
static void Task_abc(void *pdata)
{
pdata = pdata;
while (1)
{
led();
OSTimeDlyHMSM(0, 0, 0, 1);
}
}
u8 led(void)
{
控制数码管1;
计数并判断小于25时亮,25-50灭并重新计数。实现数码管亮500ms,灭500ms。
delay_ms(1);
控制数码管2;
delay_ms(1);
控制数码管3;
delay_ms(1);
........
共延时19ms;
return 0;
}
#define OS_TICKS_PER_SEC 1000u
任务优先级最高。
问题是:
led函数使用OSTimeDlyHMSM(0, 0, 0, 1)延时,正常亮灭各500ms。
使用delay_ms(1)延时时,计数250左右,才能实现亮灭各500ms。
为什么呢?
间隔20ms动态点亮数码管时,盯着数码管看不到闪烁,看旁边时,眼角能看到数码管闪烁。
想用delay_us减小这个时间,但是使用这两个函数时,为什么实际时间和理论对不上呢?
这两个延时不进行任务调度。跟这个有关系吗?
|
最佳答案
查看完整内容[请看2#楼]
delay_init初始化之后,开始任务中又调用了SysTick_Config。
去掉第2个后延时正常。
还是不太明白,什么时候需要调用第2个,什么时候不用。
|