#define START_TASK_PRIO 9 //开始任务优先级
#define START_STK_SIZE 64 //设置任务堆栈大小
sta
tic OS_STK START_TASK_STK[START_STK_SIZE]; //创建任务堆栈空间
#define LED_TASK_PRIO 6 //led任务优先级
#define LED_STK_SIZE 64 //设置任务堆栈大小
static OS_STK LED_TASK_STK[LED_STK_SIZE]; //创建任务堆栈空间
#define DHT11_TASK_PRIO 5 //DHT11任务优先级
#define DHT11_STK_SIZE 128 //设置任务堆栈大小
static OS_STK DHT11_TASK_STK[DHT11_STK_SIZE]; //创建任务堆栈空间
#define PM25_TASK_PRIO 4 //PM25任务优先级
#define PM25_STK_SIZE 256 //设置任务堆栈大小
static OS_STK PM25_TASK_STK[PM25_STK_SIZE]; //创建任务堆栈空间
#define TOUCH_TASK_PRIO 3 //PM25任务优先级
#define TOUCH_STK_SIZE 256 //设置任务堆栈大小
static OS_STK TOUCH_TASK_STK[TOUCH_STK_SIZE]; //创建任务堆栈空间
#define BEEP_TASK_PRIO 2 //BEEP任务优先级
#define BEEP_STK_SIZE 64 //设置任务堆栈大小
static OS_STK BEEP_TASK_STK[BEEP_STK_SIZE]; //创建任务堆栈空间
void start_task(void *pdata) //开始任务
{
OS_CPU_SR cpu_sr=0;
pdata=pdata;
OSStatInit(); //初始化统计任务
OS_ENTER_CRITICAL(); //进入临界区,中断无法打断
OSTaskCreate(led_task,(void *)0,(OS_STK *)&LED_TASK_STK[LED_STK_SIZE-1]
,LED_TASK_PRIO);
OSTaskCreate(DHT11_task,(void *)0,(OS_STK *)&DHT11_TASK_STK[DHT11_STK_SIZE-1]
,DHT11_TASK_PRIO);
OSTaskCreate(PM25_task,(void *)0,(OS_STK *)&PM25_TASK_STK[PM25_STK_SIZE-1]
,PM25_TASK_PRIO);
OSTaskCreate(PM25_task,(void *)0,(OS_STK *)&PM25_TASK_STK[PM25_STK_SIZE-1]
,PM25_TASK_PRIO);
OSTaskCreate(beep_task,(void *)0,(OS_STK *)&BEEP_TASK_STK[BEEP_STK_SIZE-1]
,BEEP_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //挂起起始任务
OS_EXIT_CRITICAL(); //退出临界区,中断可以打断
}
程序开始运行时,LED闪烁,传感器采集的数据通过LCD显示正常。运行一段时间后,程序卡在优先级最高的任务中,且每次程序从运行到卡住的时间不同。
请各位大牛不吝赐教,谢谢!!!