4419|0

45

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请教,任务删除出现问题 [复制链接]

 在ucos启动的时候,先创建一个任务1,然后在任务里面再创建两个任务2和3。
任务1运行到指定条件,会分别请求删除2和3,在任务2和3里面,判断是否有任务请求删除自己,如果有就删除自己。
具体代码如下:
/////////////////////main.c
#include

void main(int argc, char *argv[])
{
    OSInit();  
        OSTaskCreate(App_one,NULL,(OS_STK *)&AppStk_one[TASK_STK_SIZE-1],(INT8U)0);
    OSStart();                             /* Start multitasking */
}


/////////////////////app.c
//TASK_STK_SIZE值为128


OS_STK        AppStk_one[TASK_STK_SIZE];
OS_STK        AppStk_two[TASK_STK_SIZE];
OS_STK        AppStk_three[TASK_STK_SIZE];

void App_one(void *p_arg)
{
        INT32 counter = 0;


        p_arg = p_arg;

        OSTaskCreate(App_two,NULL,(OS_STK *)&AppStk_two[TASK_STK_SIZE-1],(INT8U)1);
        OSTaskCreate(App_three,NULL,(OS_STK *)&AppStk_three[TASK_STK_SIZE-1],(INT8U)2);
    while (TRUE)                           
        {                      
                OS_Printf("[%05d] Hello One!\n", counter++);                
                if(counter==10)
                {
                        OSTaskDelReq(1);
                }
                if(counter==20)
                {
                        OSTaskDelReq(2);
                }
        OSTimeDlyHMSM(0, 0, 1, 0);
    }
}


void App_two(void *p_arg)
{
        INT32 counter = 0;

        p_arg = p_arg;
    while (TRUE)                           
        {                      
                OS_Printf("[%05d] Hello Two!\n", counter++);

                if(OS_TASK_DEL_REQ ==OSTaskDelReq(OS_PRIO_SELF))
                {
                        OSTaskDel(OS_PRIO_SELF);
                }
        OSTimeDlyHMSM(0, 0, 1, 0);
    }
}

void App_three(void *p_arg)
{
        INT32 counter = 0;

        p_arg = p_arg;

    while (TRUE)                           
        {                      
                OS_Printf("[%05d] Hello Three!\n", counter++);
                if(OS_TASK_DEL_REQ ==OSTaskDelReq(OS_PRIO_SELF))
                {
                        OSTaskDel(OS_PRIO_SELF);
                }
        OSTimeDlyHMSM(0, 0, 1, 0);
    }
}


在VC6下运行的结果如图所示:


结果分析:
当App_One函数里的counter的值自增为10的时候,请求App_two删除自己,当轮到App_two运行时,判断到有任务请求删除自己,就调用
OSTaskDel(OS_PRIO_SELF);函数删除自己,此时系统就此停住。
其实我在调试的时候,不管是以请求的方式,还是直接调用OSTaskDel来删除任务,只要传入的参数为OS_PRIO_SELF,都会出现同样的结果。如果是OSTaskDel(1)这样的方法,系统就会正常运行。
请问有人遇到过同样的问题吗,具体是什么原因造成这样的结果呢,谢谢!
点赞 关注
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表