1
完善资料让更多小伙伴认识你,还能领取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线程了。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
529 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2000 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1174 浏览 0 评论
1674 浏览 0 评论
1439 浏览 0 评论
74747 浏览 21 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 22:28 , Processed in 0.543322 second(s), Total 73, Slave 57 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号