发 帖  
原厂入驻New
程序一直进入hardfault的异常服务程序中 但是把异常服务程序的死循环去掉后又能正常运行
69 UCOS LCD
分享
任务的代码我都是在裸机跑过的,完全没问题, 到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);
        }
}
0
2020-4-3 04:35:23   评论 分享淘帖 邀请回答

相关问题

2个回答
仿真分析看在哪一行进入的hard fault,就好找问题了
2020-4-3 06:11:56 评论

举报

嗯嗯,只需要执行一遍的任务。执行完不挂起会进入hard fault异常?
2020-4-3 06:21:24 评论

举报

只有小组成员才能发言,加入小组>>

242个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表