rt_thread main函数中创建任务,最后一个任务偶发起不来问题分析解决

问题描述:

           项目使用rt_thread 系统,在入口函数main中调用main_task_creat()函数,然后创建default任务,main_task_creat()中创建了各个业务功能task,最后一个task 是chrg_task,chrg_task中调用了一个hal_delay函数硬延时1.5s,这个延时函数会影响default任务的启动,把延时函数拿掉或缩短延时时间,default启动正常,否则系统都上电20s default任务都不启动。

             排查1.放大chrg_task任务堆栈到2k,问题能解决,但是实际上chrg_task堆栈消耗才30%不到;

             排查2.放到default 任务堆栈到2k,问题依然。

             排查3:拿掉chrg_task,或者拿到task中的那个延时函数,或缩短延时,或者延时函数使用rt_thread_mdelay,都可以正常启动。

百思不得其解:最后分析应该是创建default task这块都没有走到,所以default task没启动,为什么没走到是因为有硬延时函数时main主函数阻塞,而其他功能任务都开始运行了,而且任务优先级都比较高,main主函数的优先级比较低,一直得不到执行,所以在main主函数中创建的default任务得不到执行。当阻塞时间比较短时或者延时函数时rt_thread_mdelay时,最后一个任务是可以得到创建的。

知识点:rt_thread系统中,main函数是在rt_thread的main_thread_entry任务中调用的,所以要考虑该任务的堆栈和优先级分配情况,分配不合理会导致其中创建任务的执行出现异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值