W600 SDK demo任务的创建和删除多次会出问题

发布于 2019-11-20 09:07:55

基础不是太好,现在在用SDK框架下写程序。
UserMain中,自带的CreateDemoTask注释掉了,自己加了个创建任务的代码

int count = 0;
int tsk_id;
static OS_STK tsk_test_stk[2048];

define DEMO_TASK_TEST_PRIO (50)

void udelay(int udelay)
{

for(udelay *= 33; udelay > 0; udelay--)
{
    ;
}

}
void mdelay(int time)
{

for(;time > 0; time--)
{
    udelay(1000);
}

}

void tsk_test(int sock_fd)
{

while(1)
{
    mdelay(500);
}

}

void UserMain(void)
{

int ret;
printf("\n\n\n\n\n\n\n\n\n\n***********************************\nuser task by yxp: %d-%d-%d %s\n***********************************\n", _DATE_YEAR_, _DATE_MONTH_, _DATE_DAY_, __TIME__);

while(1)
{
     count++;//         

    printf("\ntls_os_task_create(user_client_recv_task)...");
    ret = tls_os_task_create(&tsk_id, NULL,
        tsk_test,
                NULL,
                (void *)tsk_test_stk,          /* 任务栈的起始地址 */
                2048 * sizeof(u32), /* 任务栈的大小     */
                DEMO_TASK_TEST_PRIO,
                0);        

    printf("\nCreate client recv task %d success. ret = %d, cnt = %d", tsk_id, ret, count);
    mdelay(300);
    printf("\ntls_os_task_del = %d", tls_os_task_del(DEMO_TASK_TEST_PRIO, NULL));
    mdelay(300);

}

}

运行57个循环后,就会出错,定位到的地方是pvPortMalloc函数中,pxBlock == &xEnd了,最终分配不到内存导致的。

请问是我删除任务的方式不对造成的吗?而且延时vTaskDelay怎么用的,我吧上面两个mdelay(300)改成vTaskDelay(300)循环第二次就进行不下去了。

查看更多

关注者
0
被浏览
20
1 个回答
armink
armink 认证专家 2019-12-04
https://github.com/armink

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览