中级会员
- 积分
- 317
- 金钱
- 317
- 注册时间
- 2017-3-11
- 在线时间
- 75 小时
|
1金钱
任务的代码我都是在裸机跑过的,完全没问题, 到ucosii 上就GG了 调的好心累啊,求助大神
//START 任务
//设置任务优先级
#define START_TASK_PRIO 10 ///开始任务的优先级为最低
//设置任务堆栈大小
#define START_STK_SIZE 512
//任务任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);
//DHT11采集温湿度 任务
//设置任务优先级
#define DHT11_TASK_PRIO 5
//设置任务堆栈大小
#define DHT11_STK_SIZE 1024
//任务任务堆栈
OS_STK DHT11_TASK_STK[DHT11_STK_SIZE];
//任务函数
void dht11_task(void *pdata);
//设置任务优先级
#define MQ2_TASK_PRIO 6
//设置任务堆栈大小
#define MQ2_STK_SIZE 128
//任务任务堆栈
OS_STK MQ2_TASK_STK[MQ2_STK_SIZE];
//任务函数
void mq2_task(void *pdata);
//设置任务优先级
#define LCD_MQ2_TASK_PRIO 7
//设置任务堆栈大小
#define LCD_MQ2_STK_SIZE 128
//任务任务堆栈
OS_STK LCD_MQ2_TASK_STK[LCD_MQ2_STK_SIZE];
//任务函数
void lcd_mq2_task(void *pdata);
//设置任务优先级
#define WARNING_TASK_PRIO 9
//设置任务堆栈大小
#define WARNING_STK_SIZE 128
//任务任务堆栈
OS_STK WARNING_TASK_STK[WARNING_STK_SIZE];
//任务函数
void warning_task(void *pdata);
//火焰检测任务
//设置任务优先级
#define FIRE_TASK_PRIO 8
//设置任务堆栈大小
#define FIRE_STK_SIZE 128
//任务任务堆栈
OS_STK FIRE_TASK_STK[FIRE_STK_SIZE];
//任务函数
void fire_task(void *pdata);
//OS_EVENT * MQ2_box = NULL; //MQ2消息邮箱
//OS_FLAG_GRP *Sem_F = NULL; //报警任务所需要的信号量集
//INT8U err ;
int main(void)
{
delay_init(); //延时初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组配置
uart_init(115200); //串口波特率设置
LED_Init();
beep_init();
fire_init();
dht11_init();
adc1_init();
LCD_Init();
POINT_COLOR=RED;
LCD_ShowString(120,40,260,24,24,"ENVIRONMENTAL MONITOR");
POINT_COLOR= BRRED;
LCD_ShowString(180,110,220,24,24,"Ares Xu");
LCD_ShowString(100,180,220,24,24,"temperature :");
POINT_COLOR=BLUE;
LCD_ShowString(100,260,220,24,24,"humidity :");
LCD_ShowString(305,260,200,24,24,"% RH"); //湿度的百分号
LCD_ShowString(295,350,200,24,24,"%"); //显示浓度的百分号
LCD_ShowString(150,350,200,24,24,"Air :"); //显示浓度的百分号
LCD_ShowString(295,180,200,24,24,"C"); //显示温度单位
OSInit(); //UCOS初始化
OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO); //创建开始任务
OSStart(); //开始任务
}
//开始任务
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata=pdata;
OSStatInit(); //开启统计任务
OS_ENTER_CRITICAL(); //进入临界区(关闭中断)
OSTaskCreate(dht11_task,(void*)0,(OS_STK*)&DHT11_TASK_STK[DHT11_STK_SIZE -1],DHT11_TASK_PRIO);//创建DHT11任务
//
// OSTaskCreate(mq2_task,(void*)0,(OS_STK*)&MQ2_TASK_STK[MQ2_STK_SIZE-1],MQ2_TASK_PRIO);//创建MQ2气敏传感器任务
//
// OSTaskCreate(warning_task,(void*)0,(OS_STK*)&WARNING_TASK_STK[WARNING_STK_SIZE-1],WARNING_TASK_PRIO);//创建报警任务任务任
//
// OSTaskCreate(fire_task,(void*)0,(OS_STK*)&FIRE_TASK_STK[FIRE_STK_SIZE-1],FIRE_TASK_PRIO);//创建火焰传感器检测任务
//
// MQ2_box = OSMboxCreate((void *) 0); //创建MQ2邮箱
//
// Sem_F = OSFlagCreate((OS_FLAGS)3,&err); //创建信号量集,初始值为3(00000011)
OS_EXIT_CRITICAL(); //退出临界区(开中断)
}
//OS_CPU_SR cpu_sr=0;
//OS_ENTER_CRITICAL(); //进入临界区
//data_B = OSMboxPend(Dt_box,0,&err); //申请消息邮箱
//OS_EXIT_CRITICAL(); //退出临界区
//OSTaskSuspend(OS_PRIO_SELF);
//OSTimeDlyHMSM(0,0,1,0);
void dht11_task(void *pdata)
{
u8 temp = 0,humi = 0;
OS_CPU_SR cpu_sr=0;
pdata = pdata;
for(;;)
{
dht11_get(&temp,&humi);
LCD_ShowNum(270,180,temp,2,24);
LCD_ShowNum(270,260,humi,2,24);
OSTimeDlyHMSM(0,0,1,0);
}
}
|
-
-
|