#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上的程序的基础上修改的。。。。。是不是有影响?
在线等大神解答。。。。
|