完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现象:RTT长时间运行后,不断开关的线程资源无法得到回收,比finsh组件低优先级的线程得不到运行,最终导致内存不足。但是!!!高优先级的几个线程一直可以运行。 会是同优先级的线程数量过多,导致比该优先级的低的线程不能运行吗 |
|
相关推荐
5个回答
|
|
在你的finshz组件中发生了什么?
你是否使用finsh输入了自定义的命令,且该函数没有任何放弃cpu的行为? 若是,则可以解释比finsh优先级低的的线程无法运行。 rtt是优先级抢占式rtos,运行处于就绪态的的最高优先级任务。 |
|
|
|
是这样,finsh优先级为21,任务线程优先级为16,同时开了28个,时间片是10,每个任务线程都有delay 50ms的操作。
我是这样测试的,通过finsh创建了一个优先级为10的线程(该线程也有delay),每隔1s就会关闭5个任务线程,再隔1s把关闭的5个任务线程打开,如此反复。前4/500次,finsh都可以正常输入命令如查看当前线程,且关闭的线程都已被空闲线程回收掉了;后面突然开始,关闭的线程一直处于closed状态,空闲线程得不到运行,此时finsh组件也无法输入,但是任务线程一直都有打印,(这时我是通过优先级为5的telnet线程进去看系统状态的)。正常的时候,通过free查看内存都是此消彼长,维持一个稳定的上下浮动状态,异常之后,内存就开始逐渐增加,直到最后无法分配内存。 |
|
|
|
会不会是因为不断开关线程,某一时刻,导致创建的线程彼此之间刚好无缝衔接,导致就绪队列里一直都有该优先级的线程,然后才让低优先级的线程无法执行,因为此时,用telnet线程是可以随时抢占cpu资源的,如果是的话,有什么好的办法解决这个问题呢
|
|
|
|
高优先级的线程不主动出让资源,低优先级的线程将不会得到执行机会
|
|
|
|
这不是RTT的问题了,是你自己代码设计的问题,高优先级的任务肯定要让资源的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
795 浏览 0 评论
4743 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2605 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2949 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31683 浏览 11 评论
73056 浏览 21 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 04:18 , Processed in 0.493533 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号