5456|9

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

发现vxWorks task的一个大bug,欢迎讨论! [复制链接]

 static VOID PersistentConnectionHandler_test(void)
{
    taskDelete(taskIdSelf());
}

extern void TEST_HTTPD_LOOP()
{
    while (1)
    {
        taskDelay(1*sysClkRateGet());
        taskSpawn("TestChild", 100, 0, 10*1024,
            (FUNCPTR)PersistentConnectionHandler_test, 0,
            0,0,0,0,0,0,0,0,0 );
    }
}

void dhTest(void)
{
    printf("\ndhTest start!\n");
    if (taskSpawn("ThreadTest", 80,
                         0, 10000, (FUNCPTR)TEST_HTTPD_LOOP,
                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == ERROR)
    {
        printf("Could not spawn TEST_HTTPD_LOOP() task\n");
    }
}

这段代码会产生内存泄漏问题,不知道是不是vxWorks core的原因,有什么办法可以避免?欢迎大家讨论。环境:TORNADOR2.2

最新回复

楼上的正解,应该是优先级的问题,系统里边有优先级高于100的任务,不过不一定是ThreadTest任务, 新创建的任务得不到调度,结果导致不停的有任务被创建,但是没有任务退出 如果不是得的话应该就是你们的BSP的问题了   详情 回复 发表于 2008-11-21 23:28
点赞 关注
 

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
static VOID PersistentConnectionHandler_test(void)
{
    //nothing
}
PersistentConnectionHandler_test函数为空也泄漏
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如果我没有记错的话,自己退出,和删除自身调用的代码是一样的。
   但是我印象里的任务调度代码是释放了所有资源的。等我明天调试一下再详细讨论。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

4
 
没有发现内存泄漏。不知道你那里怎么产生的。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
可能是我们板子BSP的问题
把架构调整了,不让task频繁开关,绕开这个问题

不过,我在VM上搭建的虚拟vxWorks也存在这个问题,怪了
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
接分是王道!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 
9优先级的问题
TEST_HTTPD_LOOP() 80
PersistentConnectionHandler_test 100


extern   void   TEST_HTTPD_LOOP()
{
        while   (1)
        {
                taskDelay(1*sysClkRateGet());
                taskSpawn( "TestChild ",   100,   0,   10*1024,
                        (FUNCPTR)PersistentConnectionHandler_test,   0,
                        0,0,0,0,0,0,0,0,0   );  
        }
} 执行时
taskSpawn起一个任务没有立即执行PersistentConnectionHandler_test,而是先执行TEST_HTTPD_LOOP,因为TEST_HTTPD_LOOP的优先级敌
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
不太明白,不知道是不是一个是extern,一个是static原因,
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
任务"ThreadTest "优先级高,故不停的孵化新任务!最后内存耗完!
将其优先级降低,应该可以了!(想当然,没试过)
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 melit 的回复:
任务"ThreadTest "优先级高,故不停的孵化新任务!最后内存耗完!
将其优先级降低,应该可以了!(想当然,没试过)

楼上的正解,应该是优先级的问题,系统里边有优先级高于100的任务,不过不一定是ThreadTest任务,
新创建的任务得不到调度,结果导致不停的有任务被创建,但是没有任务退出

如果不是得的话应该就是你们的BSP的问题了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表