久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 624|回復(fù): 0
收起左側(cè)

uCOS定時(shí)器任務(wù)不執(zhí)行是什么問(wèn)題

[復(fù)制鏈接]
ID:302293 發(fā)表于 2025-2-11 15:08 | 顯示全部樓層 |閱讀模式
熟悉的指點(diǎn)一下,謝謝!

//任務(wù)優(yōu)先級(jí)
#define START_TASK_PRIO                3
//任務(wù)堆棧大小        
#define START_STK_SIZE                 512
//任務(wù)控制塊
OS_TCB StartTaskTCB;
//任務(wù)堆棧        
CPU_STK START_TASK_STK[START_STK_SIZE];
//任務(wù)函數(shù)
void start_task(void *p_arg);


//任務(wù)優(yōu)先級(jí)
#define InternalTemperature_TASK_PRIO                4
//任務(wù)堆棧大小        
#define InternalTemperature_STK_SIZE                 128
//任務(wù)控制塊
OS_TCB InternalTemperatureTaskTCB;
//任務(wù)堆棧        
CPU_STK InternalTemperature_TASK_STK[InternalTemperature_STK_SIZE];
void InternalTemperature_Task(void *p_arg);

//任務(wù)優(yōu)先級(jí)
#define DHT11_TASK_PRIO                5
//任務(wù)堆棧大小        
#define DHT11_STK_SIZE                 128
//任務(wù)控制塊
OS_TCB DHT11TaskTCB;
//任務(wù)堆棧        
CPU_STK DHT11_TASK_STK[InternalTemperature_STK_SIZE];
void DHT11_Task(void *p_arg);

//任務(wù)優(yōu)先級(jí)
#define LED_TASK_PRIO                6
//任務(wù)堆棧大小        
#define LED_STK_SIZE                 128
//任務(wù)控制塊
OS_TCB LEDTaskTCB;
//任務(wù)堆棧        
CPU_STK LED_TASK_STK[LED_STK_SIZE];
void LED_Task(void *p_arg);

//任務(wù)優(yōu)先級(jí)
#define TIM1_TASK_PRIO                7
//任務(wù)堆棧大小        
#define TIM1_STK_SIZE                 128
//任務(wù)控制塊
OS_TCB TIMT1askTCB;
//任務(wù)堆棧        
CPU_STK TIM_TASK_STK[TIM1_STK_SIZE];
void TIM_Task(void *p_arg);

OS_TMR tmr1;//定時(shí)器1
//OS_TMR tmr2;
void tmr1_callback(void *p_tmr,void *p_arg);//定時(shí)器1回調(diào)函數(shù)
//void tmr2_callback(void *p_tmr,void *p_arg);//定時(shí)器1回調(diào)函數(shù)



int main(void)
{
        OS_ERR err;
        CPU_SR_ALLOC();
        
        delay_init();       //延時(shí)初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
        uart_init(115200);                 //串口初始化為115200
        LED_Init();                                  //初始化與LED連接的硬件接口
         T_Adc_Init();                                  //ADC初始化        
        
        
        OSInit(&err);                //初始化UCOSIII
        OS_CRITICAL_ENTER();//進(jìn)入臨界區(qū)
        
        OSTmrStart(&tmr1, &err); //開(kāi)啟定時(shí)器

    OSTmrStop(&tmr1, OS_OPT_TMR_NONE, 0, &err);  //關(guān)閉定時(shí)器
        
        //創(chuàng)建開(kāi)始任務(wù)1
        OSTaskCreate((OS_TCB         * )&StartTaskTCB,                //任務(wù)控制塊
                                 (CPU_CHAR        * )"start task",                 //任務(wù)名字
                 (OS_TASK_PTR )start_task,                         //任務(wù)函數(shù)
                 (void                * )0,                                        //傳遞給任務(wù)函數(shù)的參數(shù)
                 (OS_PRIO          )START_TASK_PRIO,     //任務(wù)優(yōu)先級(jí)
                 (CPU_STK   * )&START_TASK_STK[0],        //任務(wù)堆棧基地址
                 (CPU_STK_SIZE)START_STK_SIZE/10,        //任務(wù)堆棧深度限位
                 (CPU_STK_SIZE)START_STK_SIZE,                //任務(wù)堆棧大小
                 (OS_MSG_QTY  )0,                                        //任務(wù)內(nèi)部消息隊(duì)列能夠接收的最大消息數(shù)目,為0時(shí)禁止接收消息
                 (OS_TICK          )0,                                        //當(dāng)使能時(shí)間片輪轉(zhuǎn)時(shí)的時(shí)間片長(zhǎng)度,為0時(shí)為默認(rèn)長(zhǎng)度,
                 (void           * )0,                                        //用戶補(bǔ)充的存儲(chǔ)區(qū)
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任務(wù)選項(xiàng)
                 (OS_ERR         * )&err);                                //存放該函數(shù)錯(cuò)誤時(shí)的返回值
        
        //創(chuàng)建開(kāi)始任務(wù)2
        OSTaskCreate((OS_TCB         * )&LEDTaskTCB,                //任務(wù)控制塊
                                 (CPU_CHAR        * )"start task",                 //任務(wù)名字
                 (OS_TASK_PTR )LED_Task,                         //任務(wù)函數(shù)
                 (void                * )0,                                        //傳遞給任務(wù)函數(shù)的參數(shù)
                 (OS_PRIO          )LED_TASK_PRIO,     //任務(wù)優(yōu)先級(jí)
                 (CPU_STK   * )&LED_TASK_STK[0],        //任務(wù)堆棧基地址
                 (CPU_STK_SIZE)LED_STK_SIZE/10,        //任務(wù)堆棧深度限位
                 (CPU_STK_SIZE)LED_STK_SIZE,                //任務(wù)堆棧大小
                 (OS_MSG_QTY  )0,                                        //任務(wù)內(nèi)部消息隊(duì)列能夠接收的最大消息數(shù)目,為0時(shí)禁止接收消息
                 (OS_TICK          )0,                                        //當(dāng)使能時(shí)間片輪轉(zhuǎn)時(shí)的時(shí)間片長(zhǎng)度,為0時(shí)為默認(rèn)長(zhǎng)度,
                 (void           * )0,                                        //用戶補(bǔ)充的存儲(chǔ)區(qū)
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任務(wù)選項(xiàng)
                 (OS_ERR         * )&err);                                //存放該函數(shù)錯(cuò)誤時(shí)的返回值
                                         
                                                                 
                                                                 
                                                                 
                                                                 
        OS_CRITICAL_EXIT();        //退出臨界區(qū)         
        OSStart(&err);  //開(kāi)啟UCOSIII
        
                                                                 
                                                                 
                                                                 
                                         
                                                                 
                                                                 while(1);
}

//開(kāi)始任務(wù)函數(shù)
void start_task(void *p_arg)
{
        OS_ERR err;
        CPU_SR_ALLOC();
        p_arg = p_arg;

        CPU_Init();
               
#if OS_CFG_STAT_TASK_EN > 0u
   OSStatTaskCPUUsageInit(&err);          //統(tǒng)計(jì)任務(wù)               
#endif
        
#ifdef CPU_CFG_INT_DIS_MEAS_EN                //如果使能了測(cè)量中斷關(guān)閉時(shí)間
    CPU_IntDisMeasMaxCurReset();        
#endif
        
#if        OS_CFG_SCHED_ROUND_ROBIN_EN  //當(dāng)使用時(shí)間片輪轉(zhuǎn)的時(shí)候
         //使能時(shí)間片輪轉(zhuǎn)調(diào)度功能,時(shí)間片長(zhǎng)度為1個(gè)系統(tǒng)時(shí)鐘節(jié)拍,既1*5=5ms
        OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
#endif               
        
        OS_CRITICAL_ENTER();        //進(jìn)入臨界區(qū)
        //create InternalTemperature Task
        OSTaskCreate((OS_TCB         * )&InternalTemperatureTaskTCB,               
                                 (CPU_CHAR        * )"InternalTemperature task",                 
                 (OS_TASK_PTR )InternalTemperature_Task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )InternalTemperature_TASK_PRIO,     
                 (CPU_STK   * )&InternalTemperature_TASK_STK[0],        
                 (CPU_STK_SIZE)InternalTemperature_STK_SIZE/10,        
                 (CPU_STK_SIZE)InternalTemperature_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                       
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);                        

        OSTaskCreate((OS_TCB         * )&DHT11TaskTCB,               
                                 (CPU_CHAR        * )"DHT11 task",                 
                 (OS_TASK_PTR )DHT11_Task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )DHT11_TASK_PRIO,     
                 (CPU_STK   * )&DHT11_TASK_STK[0],        
                 (CPU_STK_SIZE)DHT11_STK_SIZE/10,        
                 (CPU_STK_SIZE)DHT11_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                       
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);                                                                                 
                                 
OSTaskCreate((OS_TCB         * )&LEDTaskTCB,               
                                 (CPU_CHAR        * )"LED task",                 
                 (OS_TASK_PTR )LED_Task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )LED_TASK_PRIO,     
                 (CPU_STK   * )&LED_TASK_STK[0],        
                 (CPU_STK_SIZE)LED_STK_SIZE/10,        
                 (CPU_STK_SIZE)LED_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                       
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);        
                                                                 
//創(chuàng)建定時(shí)器1
                                                                 
                                         
                OSTmrCreate((OS_TMR         * )&tmr1,                //任務(wù)控制塊
                                         (CPU_CHAR        * )"tmr1",                 //任務(wù)名字

                                                                 (OS_TICK  )20,                         //20*10=200ms

                 (OS_TICK  )100,                                        //任務(wù)內(nèi)部消息隊(duì)列能夠接收的最大消息數(shù)目,為0時(shí)禁止接收消息

                 (OS_OPT      )OS_OPT_TMR_PERIODIC, //任務(wù)選項(xiàng)
                 (OS_TMR_CALLBACK_PTR)tmr1_callback,
                                                                 (void *)0,
                                                                 (OS_ERR         * )&err);                                //存放該函數(shù)錯(cuò)誤時(shí)的返回值                                                                 
        

OS_CRITICAL_EXIT();        //退出臨界區(qū)         

}


/**************************************************************
任務(wù)函數(shù)區(qū)
優(yōu)先級(jí):4                                                                CPU溫度
優(yōu)先級(jí):5                                                                DHT11環(huán)境溫度

**************************************************************/
//CPU溫度                                                                        優(yōu)先級(jí):4
void InternalTemperature_Task(void *p_arg)
{
        OS_ERR err;
        p_arg = p_arg;
        while(1)
        {
                short temp;
               
                temp=Get_Temprate();        //得到溫度值
                if(temp<0)
                {
                        temp=-temp;               
                }

                printf("temp is %d \r\n",temp);
                OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //延時(shí)500ms
        }
}

//DHT11環(huán)境溫度                                                        優(yōu)先級(jí):5
void DHT11_Task(void *p_arg)
{
        OS_ERR err;
        u8 temperature;              
        u8 humidity;
        p_arg = p_arg;
                 
        while(1)
        {
               
                DHT11_Read_Data(&temperature,&humidity);        //讀取溫濕度值
                printf("temp is %d, humidity is %d \r\n",temperature,humidity);
                OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //延時(shí)500ms
        }
}

// 定時(shí)器回調(diào)函數(shù)
void tmr1_callback(void *P_tmr,void *p_arg)
{
    // 定時(shí)器到期時(shí)執(zhí)行的操作
//    printf("Timer expired!\n");
u8 sakl;
        sakl++;
while(1)
{
LED0=~ LED0;
}


}


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美一区二区三区 | 中文字幕精品视频在线观看 | 亚洲精品一 | 欧美精品网站 | 欧美福利 | 免费观看黄色片视频 | 日本久久久一区二区三区 | 亚洲色综合 | 欧美一区二区三区四区视频 | 午夜成人免费视频 | www.玖玖玖 | 日本一区二区三区在线观看 | 中文字幕av第一页 | 亚洲免费一区二区 | 九色 在线 | 久久999 | 成年网站在线观看 | 91视频88av| 天天拍天天射 | 国产激情在线看 | 午夜无码国产理论在线 | 欧美在线视频一区二区 | 91精品国产777在线观看 | 精品国产乱码久久久久久88av | 天天爽天天操 | 国产中文字幕在线观看 | 久久亚洲综合 | 亚洲欧美中文日韩在线 | 国产精品久久久久久久7电影 | 亚洲高清在线播放 | 91资源在线| 国产一级视频在线观看 | 性在线| 久久一区二区视频 | 亚洲视频中文字幕 | 日韩精品一区在线 | 蜜臀av日日欢夜夜爽一区 | 久久伊人一区 | 波多野结衣中文视频 | 日本精品免费在线观看 | 91操操操 |