ucosii小程序,为啥2个任务不来回切换呢????????
[复制链接]
#include <includes.h> #define RCC_GPIO_LED RCC_APB2Periph_GPIOF /*LED使用的GPIO时钟*/ #define LEDn 4 /*神舟III号LED数量*/ #define GPIO_LED GPIOF /*神舟III号LED灯使用的GPIO组*/ #define OS_PRIO_SELF 0xFFu #define DS1_PIN GPIO_Pin_6 /*DS1使用的GPIO管脚*/ #define DS2_PIN GPIO_Pin_7 /*DS2使用的GPIO管脚*/ #define DS3_PIN GPIO_Pin_8 /*DS3使用的GPIO管脚*/ #define DS4_PIN GPIO_Pin_9 /*DS4使用的GPIO管脚*/ //#define KEY1 (1 << 20) /* P0.20为KEY1 */ //#define BEEP (1 << 7) /* P0.07为蜂鸣器 */
#define TaskStkLengh 64 //Define the Task0 stack length 定义用户任务0的堆栈长度 OS_STK TaskStk0[TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈 OS_STK TaskStk1[TaskStkLengh]; OS_STK TaskStk2[TaskStkLengh]; //Define the Task1 stack 定义用户任务1的堆栈 //void Delay(vu32 nCount); void Task0(void *pdata); //Task0 任务0 void Task1(void *pdata); //Task0 任务1 void Task2(void *pdata);
void RCC_Configuration(void); void NVIC_Configuration(void); void Delay1(vu32 nCount); void Turn_On_LED(u8 LED_NUM); GPIO_InitTypeDef GPIO_InitStructure; ErrorStatus HSEStartUpStatus; u8 count=0;
int main(void) { OSInit (); OSTaskCreate (Task0,(void *)0, &TaskStk0[TaskStkLengh - 1], 2); OSStart (); return 0; }
void Task0(void *pdata) { pdata = pdata; // BSP_Init(); /* Initialize BSP functions */ // #if (OS_TASK_STAT_EN > 0) // OSStatInit(); /* Determine CPU capacity */ // #endif OSTaskCreate (Task1,(void *)0, &TaskStk1[TaskStkLengh - 1], 5); OSTaskCreate (Task2,(void *)0, &TaskStk2[TaskStkLengh - 1], 6); // GPIO_ResetBits(GPIO_LED,DS3_PIN|DS4_PIN); //GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);/*关闭所有的LED指示灯*/ // Turn_On_LED(count%4); //点亮一个LED灯 // count++; while(1) { OSTaskSuspend(0x2FFFFF); } Delay1(0x2FFFFF); Delay1(0x2FFFFF); // OSTimeDlyHMSM(0,0,0,500);
}
void Task1(void *pdata) { pdata = pdata; RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE); /*使能LED灯使用的GPIO时钟*/
GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIO_LED, &GPIO_InitStructure); while(1) { GPIO_ResetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);/*开启所有的LED指示灯*/ // GPIO_ResetBits(GPIO_LED,DS2_PIN|DS3_PIN);/*关闭所有的LED指示灯*/ // Turn_On_LED(count%4); //点亮一个LED灯 // count++; // //GPIO_ResetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN); Delay1(0x2FFFFF); // OSTaskSuspend(OS_PRIO_SELF); // Delay(0x200000); OSTimeDly(OS_TICKS_PER_SEC); // } // OSTimeDly(OS_PRIO_SELF); }
void Task2(void *pdata) { pdata = pdata;
// OSTaskResume() ;
// GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN);/*关闭所有的LED指示灯*/ while(1) { GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);/*关闭所有的LED指示灯*/ Delay1(0x2FFFFF); GPIO_ResetBits(GPIO_LED,DS1_PIN|DS2_PIN);/*关闭所有的LED指示灯*/ Delay1(0x2FFFFF); GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);/*关闭所有的LED指示灯*/ Delay1(0x2FFFFF); // Turn_On_LED(count%4); //点亮一个LED灯 // count++; // // //GPIO_ResetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN); // Delay1(0x2FFFFF); // Delay(0x2FFFFF); OSTimeDly(OS_TICKS_PER_SEC); // OSTaskResume(5); } // }
[ 本帖最后由 fbi987996 于 2012-4-27 17:43 编辑 ]
|