初级会员
- 积分
- 58
- 金钱
- 58
- 注册时间
- 2014-1-3
- 在线时间
- 11 小时
|
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);
}
|
|