/////////////////////////UCOSII任務(wù)堆棧設(shè)置/////////////////////////////////// //START 任務(wù) //設(shè)置任務(wù)優(yōu)先級 #define START_TASK_PRIO 10 //開始任務(wù)的優(yōu)先級設(shè)置為最低 //設(shè)置任務(wù)堆棧大小 #define START_STK_SIZE 64 //創(chuàng)建任務(wù)堆棧空間 OS_STK START_TASK_STK[START_STK_SIZE]; //任務(wù)函數(shù)接口 void start_task(void *pdata); //LED0任務(wù) //設(shè)置任務(wù)優(yōu)先級 #define LED0_TASK_PRIO 7 //設(shè)置任務(wù)堆棧大小 #define LED0_STK_SIZE 64 //創(chuàng)建任務(wù)堆棧空間 OS_STK LED0_TASK_STK[LED0_STK_SIZE]; //任務(wù)函數(shù)接口 voidled0_task(void *pdata); //LED1任務(wù) //設(shè)置任務(wù)優(yōu)先級 #define LED1_TASK_PRIO 6 //設(shè)置任務(wù)堆棧大小 #define LED1_STK_SIZE 64 //創(chuàng)建任務(wù)堆棧空間 OS_STK LED1_TASK_STK[LED1_STK_SIZE]; //任務(wù)函數(shù)接口 void led1_task(void *pdata); int main(void) { delay_init();//延時初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2 LED_Init();//初始化與LED連接的硬件接口 OSInit(); //UCOSII初始化 OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK [START_STK_SIZE-1],START_TASK_PRIO );//創(chuàng)建起始任務(wù) OSStart(); } //開始任務(wù) void start_task(void *pdata) { OS_CPU_SR cpu_sr=0; pdata = pdata; OS_ENTER_CRITICAL();//進入臨界區(qū)(無法被中斷打斷) OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1], LED0_TASK_PRIO); OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1], LED1_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO);//掛起起始任務(wù). OS_EXIT_CRITICAL();//退出臨界區(qū)(可以被中斷打斷) } //LED0任務(wù) void led0_task(void *pdata) { while(1) { LED0=0; delay_ms(80); LED0=1; delay_ms(920); }; } //LED1任務(wù) void led1_task(void *pdata) { while(1) { LED1=0; delay_ms(300); LED1=1; delay_ms(300); } } |