打印
[uCOS/RTOS]

ucos中任务删除自身后,其他任务不运行了,是怎么回事?

[复制链接]
1054|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
陈永立|  楼主 | 2019-10-22 22:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#include "SystemConfig.h"

////////////////////////UCOSII任务设置///////////////////////////////////
//START 任务
//设置任务优先级
#define START_TASK_PRIO                              10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE                                  64
//任务堆栈       
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);

//App1任务
//设置任务优先级
#define App1_TASK_PRIO                               7
//设置任务堆栈大小
#define App1_STK_SIZE                                      64
//任务堆栈       
OS_STK App1_Task_Stk[App1_STK_SIZE];
//任务函数
void App1Task(void *pdata);


//App2任务
//设置任务优先级
#define App2_TASK_PRIO                               6
//设置任务堆栈大小
#define App2_STK_SIZE                                          64
//任务堆栈
OS_STK App2_TASK_STK[App2_STK_SIZE];
//任务函数
void App2Task(void *pdata);



int main(void)
{
        OSInit(); /* 系统初始化*/
        OSTaskCreate(start_task, (void *)0, &START_TASK_STK[START_STK_SIZE - 1], START_TASK_PRIO);
        OSStart(); /* 开始任务调度*/
        return 0;
}



void start_task(void *pdata)
{
        OS_ENTER_CRITICAL();                        //进入临界区(无法被中断打断)   
        OSTaskCreate(App1Task, (void *)0, (OS_STK*)&App1_Task_Stk[App1Task_StkSize - 1], App1_TASK_PRIO);
        OSTaskCreate(App2Task, (void *)0, (OS_STK*)&App2_TASK_STK[App2Task_StkSize - 1], App2_TASK_PRIO);
        OSTaskSuspend(START_TASK_PRIO);        //挂起起始任务.
        OS_EXIT_CRITICAL();                                //退出临界区(可以被中断打断)
}

/* App1Task */
void App1Task(void *p_arg)
{
        p_arg = p_arg;
       
        while (1)
        {
                printf("App1Task:我也要删除自己 \r\n");
                //OSTimeDlyHMSM(0, 0, 1, 0); /* 延时1秒  任务调度*/
                printf("App1Task:我也已经删除自己了! \r\n");
                OSTaskDel(OS_PRIO_SELF);//删除任务自身

        }
}
/* App2Task */
void App2Task(void *p_arg)
{
        p_arg = p_arg;
        while (1)
        {
                if (OSTaskDelReq(OS_PRIO_SELF) == OS_ERR_TASK_DEL_REQ)
                {
                        printf("App2Task:我必须要删除我自己了!\r\n");
                        //OSTimeDlyHMSM(0, 0, 1, 0); /* 延时1秒   任务调度*/
                        printf("App2Task:我已经删除我自己了!\r\n");
                        OSTaskDel(OS_PRIO_SELF);//删除任务自身
                        //OSTimeDlyHMSM(0, 0, 2, 0);  /*任务调度*/
                }
                else
                {
                        printf("你是谁?\n");
                        OSTimeDlyHMSM(0, 0, 1, 0);  /*任务调度*/
                }
        }
}
上面是源代码

下面是运行结果

一直卡死在这里

任务APPTask1删除了之后,为什么任务APPTask2也不输出内容了呢?任务APPTask1并没有删除它啊!!
这是我在网上找的把μCOS移植到VS2015上的程序的基础上修改的。。。。。是不是有影响?
在线等大神解答。。。。

使用特权

评论回复

相关帖子

沙发
陈永立|  楼主 | 2019-10-22 22:51 | 只看该作者
正常来讲的话下面应该一直打印“你是谁”的啊!!结果就卡死了

使用特权

评论回复
板凳
chunk| | 2019-10-25 07:40 | 只看该作者
在start_task这个任务中,OSTaskSuspend执行完之后确实继续执行OS_EXIT_CRITICAL()了吗?

使用特权

评论回复
地板
wh_23sh| | 2019-10-27 21:34 | 只看该作者
start_task里面第一行代码就是个问题,关中断有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝