OpenEdv-开源电子网

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

OSTimeDly();函数延时时间大大了会一直进入OS_TaskIdle()空函数,程序不再进行任务调度。

[复制链接]

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2014-1-3
在线时间
11 小时
发表于 2017-2-20 16:26:04 | 显示全部楼层 |阅读模式
5金钱
大神们好,最近在用STM32L151移植uCOS-ii2.86,遇到如下问题:在主函数中建立一个任务,在这个任务的死循环里面用延时函数OSTimeDly(time)来延时一段时间,发现time为10、20、100、200的时候都是正常的(该任务的死循环是一直循环的)。但是当time>300的时候,这个死循环只会跑一遍,之后就会一直进入OS_TaskIdle()函数。
我换另一个延时函数OSTimeDlyHMSM(h.min.s.ms)来延时,当ms>300的时候(OSTimeDlyHMSM(0,0,0,300))与上面的问题一样,而用OSTimeDlyHMSM(0,0,2,200)是可以正常跑的。
网上好多人说进入OS_TaskIdle()函数是优先级问题造成的,不太理解。任务的优先级是4。 另外我CPU用的是内部高速时钟HSI,不知道这会不会有影响,希望大神们给解决一下
现将部分代码贴出:
int main(void)
{   
    bsp_hsiconfig();

    OSInit();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

    OSTaskCreate(startup_task, (void *)0,  
          &startup_task_stk[STARTUP_TASK_STK_SIZE - 1],  
          STARTUP_TASK_PRIO);  

    OSStart();
    return 0;  
}               


static void startup_task(void *p_arg)
{
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//16/8=2M
    systick_init();     /* Initialize the SysTick. */
    p_arg=p_arg;
    #if (OS_TASK_STAT_EN>0)
        OSStatInit();   
    #endif

        while(1)
        {
//                OSTimeDlyHMSM(0,0,2,300);   
                 OSTimeDlyHMSM(0,0,2,200);   
//                OSTimeDly(300);
//                OSTimeDly(200);
        }        
}


static void systick_init(void)
{
        RCC_ClocksTypeDef rcc_clocks;
        RCC_GetClocksFreq(&rcc_clocks);
        SysTick_Config(rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC);
}





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

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-3-30
在线时间
11 小时
发表于 2018-3-30 10:18:12 | 显示全部楼层
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-3-30 16:21:15 | 显示全部楼层
进入OS_TaskIdle后不会出来吗??
回复

使用道具 举报

14

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2017-10-2
在线时间
80 小时
发表于 2018-4-12 22:09:18 | 显示全部楼层
在mian()函数最前面加上 delay_init();          //时钟初始化。。。试试
回复

使用道具 举报

5

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2017-6-21
在线时间
67 小时
发表于 2018-4-13 16:31:30 | 显示全部楼层
a0101 发表于 2018-4-12 22:09
在mian()函数最前面加上 delay_init();          //时钟初始化。。。试试

太机智了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-2 06:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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