我在網上找的把μC/OS-II移植到VS2015上的程式的基礎上修改的程式
源代碼如下
#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;
unsigned char i = 0;
while (1)
{
printf("App1Task:我是任務一 \r\n");
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:我是任務2!\r\n");
printf("App2Task:我已經洗掉我自己了!\r\n");
OSTaskDel(OS_PRIO_SELF);//洗掉任務自身
}
else
{
printf("你是誰?\n");
OSTimeDlyHMSM(0, 0, 1, 0); /*任務調度*/
}
}
}
運行結果一直卡在這里

任務APPTask1洗掉了之后,為什么任務APPTask2也不輸出內容了呢?任務APPTask1并沒有洗掉它啊!!
正常來講的話下面應該一直列印“你是誰”的啊!!結果就卡死了
這是我在網上找的把μCOS移植到VS2015上的程式的基礎上修改的。。。。。是不是有影響?
在線等大神解答。。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/83269.html
標籤:單片機/工控
上一篇:51單片機
下一篇:基于51單片機的can總線通訊
