完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大神们好,最近在用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); } |
|
相关推荐
2个回答
|
|
在mian()函数最前面加上 delay_init(); //时钟初始化。。。试试
|
|
|
|
太机智了
|
|
|
|
只有小组成员才能发言,加入小组>>
800 浏览 0 评论
1156 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2714 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1092浏览 3评论
197浏览 2评论
463浏览 2评论
376浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
458浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 06:07 , Processed in 0.985602 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号