完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件平台GD32F103RC, Flash:256K, SRAM:48K
使用rt-thread 4.1.0 Beta版本,开启了动态内存,内存管理器使用small memory。 现遇到如下问题: 在线程main中不使用rt_thread_mdelay,线程结束时能自动被回收,可以看到已使用内存和最大分配内存不相等,(由于main线程被回收,已使用内存 < 最大分配内存)。 当在线程main中使用rt_thread_mdelay后,等待延时结束后线程无法自动回收,可以看到已使用内存和最大分配内存相等,说明main线程的栈和控制块依然存在于内存。 使用ps列出线程,发现main变为close状态,但并未从线程对象链表移出。 |
|
相关推荐
3个回答
|
|
list_timer看看心跳和定时器
|
|
|
|
|
|
|
|
我已经解决了:
从rt-4.0.3复制如下一段代码到4.1.0 const volatile rt_list_t *l = (const volatile rt_list_t *)&rt_thread_defunct; // rt-4.0.3 idle.c /* Return whether there is defunctional thread to be deleted. */ rt_inline int _has_defunct_thread(void) { /* The rt_list_isempty has prototype of "int rt_list_isempty(const rt_list_t *l)". * So the compiler has a good reason that the rt_thread_defunct list does * not change within rt_thread_idle_excute thus optimize the "while" loop * into a "if". * * So add the volatile qualifier here. */ const volatile rt_list_t *l = (const volatile rt_list_t *)&rt_thread_defunct; return l->next != l; } 复制到rt-4.1.0 idle.c中 /** * @Brief Dequeue a thread from defunct queue. */ rt_thread_t rt_thread_defunct_dequeue(void) { register rt_base_t lock; rt_thread_t thread = RT_NULL; // rt_list_t *l = &_rt_thread_defunct; // 替换到这里 const volatile rt_list_t *l = (const volatile rt_list_t *)&_rt_thread_defunct; // 以下代码省略... 如果出现和我一样的问题,可以试试这样修改。 main.c启用了软timer延时 动态线程栈和控制块也被正确释放,ps线程列表也没有出现close线程了。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
754 浏览 0 评论
3703 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2459 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2892 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31079 浏览 11 评论
72787 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 20:20 , Processed in 0.764118 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号