打印
[应用方案]

ucos III 任务创建和消息,定时器调用

[复制链接]
1480|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dentsgot|  楼主 | 2016-4-22 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


#include  
#include  
#define ADC1_DR_Address    ((u32)0x4001204C)




                                                               
static  OS_TCB   AppTaskStartTCB;
static  OS_TCB   AppTaskConfigTCB;
static  OS_TCB   AppTasktestsemTCB;
static  CPU_STK  AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE];
static  CPU_STK  AppTaskConfigStk[APP_CFG_TASK_START_STK_SIZE];
static  CPU_STK  AppTasktestsemStk[APP_CFG_TASK_START_STK_SIZE];
OS_SEM  testsem;
OS_TMR  MYTIMER1;





static  void  AppTaskStart          (void     *p_arg);
static  void  AppTaskCreate         (void);
static  void  AppObjCreate          (void);
static  void  userTaskStart         (void);
static  void  userTasksem           (void);
void MYCALLBACKFUNCT(void *p_arg) ;




CPU_FP32 AD_value_1,AD_value_2;
CPU_INT16U ADC_ConvertedValue[2];



int main(void)
{
    OS_ERR  err;




    BSP_IntDisAll();                                            
   
    OSInit(&err);                                             
    ADC1_CH6_DMA_Config(ADC1_DR_Address,ADC_ConvertedValue);
ADC_SoftwareStartConv(ADC1);
    OSTaskCreate((OS_TCB       *)&AppTaskStartTCB,              
                 (CPU_CHAR     *)"App Task Start",
                 (OS_TASK_PTR   )AppTaskStart,
                 (void         *)0,
                 (OS_PRIO       )APP_CFG_TASK_START_PRIO,
                 (CPU_STK      *)&AppTaskStartStk[0],
                 (CPU_STK_SIZE  )AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE / 10],
                 (CPU_STK_SIZE  )APP_CFG_TASK_START_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);


    OSStart(&err);                                             
   
    (void)&err;
   
    return (0);
}





static  void  AppTaskStart (void *p_arg)
{
    OS_ERR      err;




   (void)p_arg;


    BSP_Init();                                                
    CPU_Init();                                                
   
    BSP_Tick_Init();                                            
   
    Mem_Init();                                                
    Math_Init();                                                




#if OS_CFG_STAT_TASK_EN > 0u
    OSStatTaskCPUUsageInit(&err);                              
#endif


#ifdef CPU_CFG_INT_DIS_MEAS_EN
    CPU_IntDisMeasMaxCurReset();
#endif


    BSP_LED_Off(0);
   
#if (APP_CFG_SERIAL_EN == DEF_ENABLED)   
    App_SerialInit();                                          
#endif


    APP_TRACE_DBG(("Creating Application kernel objects\n\r"));
    AppObjCreate();                                            
   
    APP_TRACE_DBG(("Creating Application Tasks\n\r"));
    AppTaskCreate();                                            


    while (DEF_TRUE) {                                          
        //BSP_LED_Toggle(0);
        OSTimeDlyHMSM(0, 0, 0, 100,
                      OS_OPT_TIME_HMSM_STRICT,
                      &err);
    }
}





static  void  AppTaskCreate (void)
{
     //BSP_LED_Toggle(1);
  OS_ERR err;
     OSTaskCreate((OS_TCB       *)&AppTaskConfigTCB,              
                 (CPU_CHAR     *)"user task Start",
                 (OS_TASK_PTR   )userTaskStart,
                 (void         *)0,
                 (OS_PRIO       )APP_USER_PRIO_3,
                 (CPU_STK      *)&AppTaskConfigStk[0],
                 (CPU_STK_SIZE  )AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE / 10],
                 (CPU_STK_SIZE  )APP_CFG_TASK_START_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);



if(err != OS_ERR_NONE)
{
;  //???í?ó???????í
   }
     OSTaskCreate((OS_TCB       *)&AppTasktestsemTCB,              
                 (CPU_CHAR     *)"user sem Start",
                 (OS_TASK_PTR   )userTasksem,
                 (void         *)0,
                 (OS_PRIO       )APP_USER_PRIO_4,
                 (CPU_STK      *)&AppTasktestsemStk[0],
                 (CPU_STK_SIZE  )AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE / 10],
                 (CPU_STK_SIZE  )APP_CFG_TASK_START_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);



if(err != OS_ERR_NONE)
{
;  //???í?ó???????í
   }
OSSemCreate( &testsem,
             "my testsem",
             (OS_SEM_CTR)0,
             &err);
if(err != OS_ERR_NONE)
{
;  //???í?ó???????í
   }
   OSTmrCreate((OS_TMR *)&MYTIMER1,
               (CPU_CHAR *)"TIME TEST",
               (OS_TICK ) 0,
               (OS_TICK ) 10,
               (OS_OPT  ) OS_OPT_TMR_PERIODIC,
               (OS_TMR_CALLBACK_PTR ) MYCALLBACKFUNCT,
               (void * )0,
               (OS_ERR *)&err );
   OSTmrStart((OS_TMR *)&MYTIMER1,
              (OS_ERR *)&err);



while (DEF_TRUE) {   
                                    




//  BSP_LED_Toggle(2);
        OSTimeDlyHMSM(0, 0, 0, 100,
                      OS_OPT_TIME_HMSM_STRICT,
                      &err);}






}





static  void  AppObjCreate (void)
{


}


static void userTaskStart(void)  //???????????è???????©???÷
{
OS_ERR err;
CPU_TS ts;
while(DEF_ON){                         //?????????????????·?

OSSemPend( &testsem,
        10,
        OS_OPT_PEND_BLOCKING,
        &ts,
        &err );
if(err == OS_ERR_NONE)
{
// ;  //???í?ó???????í
BSP_LED_Toggle(1);
   }



}

}




static void userTasksem(void)  //???????????è???????©???÷
{
OS_ERR err;
// BSP_LED_Toggle(3);




while(DEF_TRUE){q
               BSP_LED_Toggle(4);
             OSSemPost( &testsem,
                        OS_OPT_POST_1,
                          &err ) ;
           if(err != OS_ERR_NONE)
                  {
                           ;  //???í?ó???????í
                     }
             OSTimeDlyHMSM(0, 0, 0, 100,
                  OS_OPT_TIME_HMSM_STRICT,
                             &err);
               }
}

void MYCALLBACKFUNCT(void *p_arg)
{

BSP_LED_Toggle(2);

}


沙发
wahahaheihei| | 2016-4-22 22:54 | 只看该作者
void MYCALLBACKFUNCT(void *p_arg)
{

BSP_LED_Toggle(2);

}这么复杂到最后还是个闪烁。

使用特权

评论回复
板凳
neeringstu| | 2016-4-22 23:01 | 只看该作者
这个ucos iii的移植方法不同就会导致占用资源不一样

使用特权

评论回复
地板
500days| | 2016-4-23 21:50 | 只看该作者
回调函数如何应用呢,最长定时多长时间呢?

使用特权

评论回复
5
yiyigirl2014| | 2016-4-24 00:05 | 只看该作者
这种结构化程序,在处理复杂大型问题的时候用起来更方便点。

使用特权

评论回复
6
643757107| | 2016-4-30 15:45 | 只看该作者
创建任务是ucOS 学习的重要一步,学会了创建任务,才能做事情。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

164

帖子

2

粉丝