[应用方案] ucos III 任务创建和消息,定时器调用

[复制链接]
1730|5
 楼主| dentsgot 发表于 2016-4-22 17:46 | 显示全部楼层 |阅读模式


  1. #include  
  2. #include  
  3. #define ADC1_DR_Address    ((u32)0x4001204C)




  4.                                                                
  5. static  OS_TCB   AppTaskStartTCB;
  6. static  OS_TCB   AppTaskConfigTCB;
  7. static  OS_TCB   AppTasktestsemTCB;
  8. static  CPU_STK  AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE];
  9. static  CPU_STK  AppTaskConfigStk[APP_CFG_TASK_START_STK_SIZE];
  10. static  CPU_STK  AppTasktestsemStk[APP_CFG_TASK_START_STK_SIZE];
  11. OS_SEM  testsem;
  12. OS_TMR  MYTIMER1;





  13. static  void  AppTaskStart          (void     *p_arg);
  14. static  void  AppTaskCreate         (void);
  15. static  void  AppObjCreate          (void);
  16. static  void  userTaskStart         (void);
  17. static  void  userTasksem           (void);
  18. void MYCALLBACKFUNCT(void *p_arg) ;




  19. CPU_FP32 AD_value_1,AD_value_2;
  20. CPU_INT16U ADC_ConvertedValue[2];



  21. int main(void)
  22. {
  23.     OS_ERR  err;




  24.     BSP_IntDisAll();                                            
  25.    
  26.     OSInit(&err);                                             
  27.     ADC1_CH6_DMA_Config(ADC1_DR_Address,ADC_ConvertedValue);
  28. ADC_SoftwareStartConv(ADC1);
  29.     OSTaskCreate((OS_TCB       *)&AppTaskStartTCB,              
  30.                  (CPU_CHAR     *)"App Task Start",
  31.                  (OS_TASK_PTR   )AppTaskStart,
  32.                  (void         *)0,
  33.                  (OS_PRIO       )APP_CFG_TASK_START_PRIO,
  34.                  (CPU_STK      *)&AppTaskStartStk[0],
  35.                  (CPU_STK_SIZE  )AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE / 10],
  36.                  (CPU_STK_SIZE  )APP_CFG_TASK_START_STK_SIZE,
  37.                  (OS_MSG_QTY    )0,
  38.                  (OS_TICK       )0,
  39.                  (void         *)0,
  40.                  (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  41.                  (OS_ERR       *)&err);


  42.     OSStart(&err);                                             
  43.    
  44.     (void)&err;
  45.    
  46.     return (0);
  47. }





  48. static  void  AppTaskStart (void *p_arg)
  49. {
  50.     OS_ERR      err;




  51.    (void)p_arg;


  52.     BSP_Init();                                                
  53.     CPU_Init();                                                
  54.    
  55.     BSP_Tick_Init();                                            
  56.    
  57.     Mem_Init();                                                
  58.     Math_Init();                                                




  59. #if OS_CFG_STAT_TASK_EN > 0u
  60.     OSStatTaskCPUUsageInit(&err);                              
  61. #endif


  62. #ifdef CPU_CFG_INT_DIS_MEAS_EN
  63.     CPU_IntDisMeasMaxCurReset();
  64. #endif


  65.     BSP_LED_Off(0);
  66.    
  67. #if (APP_CFG_SERIAL_EN == DEF_ENABLED)   
  68.     App_SerialInit();                                          
  69. #endif


  70.     APP_TRACE_DBG(("Creating Application kernel objects\n\r"));
  71.     AppObjCreate();                                            
  72.    
  73.     APP_TRACE_DBG(("Creating Application Tasks\n\r"));
  74.     AppTaskCreate();                                            


  75.     while (DEF_TRUE) {                                          
  76.         //BSP_LED_Toggle(0);
  77.         OSTimeDlyHMSM(0, 0, 0, 100,
  78.                       OS_OPT_TIME_HMSM_STRICT,
  79.                       &err);
  80.     }
  81. }





  82. static  void  AppTaskCreate (void)
  83. {
  84.      //BSP_LED_Toggle(1);
  85.   OS_ERR err;
  86.      OSTaskCreate((OS_TCB       *)&AppTaskConfigTCB,              
  87.                  (CPU_CHAR     *)"user task Start",
  88.                  (OS_TASK_PTR   )userTaskStart,
  89.                  (void         *)0,
  90.                  (OS_PRIO       )APP_USER_PRIO_3,
  91.                  (CPU_STK      *)&AppTaskConfigStk[0],
  92.                  (CPU_STK_SIZE  )AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE / 10],
  93.                  (CPU_STK_SIZE  )APP_CFG_TASK_START_STK_SIZE,
  94.                  (OS_MSG_QTY    )0,
  95.                  (OS_TICK       )0,
  96.                  (void         *)0,
  97.                  (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  98.                  (OS_ERR       *)&err);



  99. if(err != OS_ERR_NONE)
  100. {
  101. ;  //???í?ó???????í
  102.    }
  103.      OSTaskCreate((OS_TCB       *)&AppTasktestsemTCB,              
  104.                  (CPU_CHAR     *)"user sem Start",
  105.                  (OS_TASK_PTR   )userTasksem,
  106.                  (void         *)0,
  107.                  (OS_PRIO       )APP_USER_PRIO_4,
  108.                  (CPU_STK      *)&AppTasktestsemStk[0],
  109.                  (CPU_STK_SIZE  )AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE / 10],
  110.                  (CPU_STK_SIZE  )APP_CFG_TASK_START_STK_SIZE,
  111.                  (OS_MSG_QTY    )0,
  112.                  (OS_TICK       )0,
  113.                  (void         *)0,
  114.                  (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  115.                  (OS_ERR       *)&err);



  116. if(err != OS_ERR_NONE)
  117. {
  118. ;  //???í?ó???????í
  119.    }
  120. OSSemCreate( &testsem,
  121.              "my testsem",
  122.              (OS_SEM_CTR)0,
  123.              &err);
  124. if(err != OS_ERR_NONE)
  125. {
  126. ;  //???í?ó???????í
  127.    }
  128.    OSTmrCreate((OS_TMR *)&MYTIMER1,
  129.                (CPU_CHAR *)"TIME TEST",
  130.                (OS_TICK ) 0,
  131.                (OS_TICK ) 10,
  132.                (OS_OPT  ) OS_OPT_TMR_PERIODIC,
  133.                (OS_TMR_CALLBACK_PTR ) MYCALLBACKFUNCT,
  134.                (void * )0,
  135.                (OS_ERR *)&err );
  136.    OSTmrStart((OS_TMR *)&MYTIMER1,
  137.               (OS_ERR *)&err);



  138. while (DEF_TRUE) {   
  139.                                     




  140. //  BSP_LED_Toggle(2);
  141.         OSTimeDlyHMSM(0, 0, 0, 100,
  142.                       OS_OPT_TIME_HMSM_STRICT,
  143.                       &err);}






  144. }





  145. static  void  AppObjCreate (void)
  146. {


  147. }


  148. static void userTaskStart(void)  //???????????è???????©???÷
  149. {
  150. OS_ERR err;
  151. CPU_TS ts;
  152. while(DEF_ON){                         //?????????????????·?

  153. OSSemPend( &testsem,
  154.         10,
  155.         OS_OPT_PEND_BLOCKING,
  156.         &ts,
  157.         &err );
  158. if(err == OS_ERR_NONE)
  159. {
  160. // ;  //???í?ó???????í
  161. BSP_LED_Toggle(1);
  162.    }



  163. }

  164. }




  165. static void userTasksem(void)  //???????????è???????©???÷
  166. {
  167. OS_ERR err;
  168. // BSP_LED_Toggle(3);




  169. while(DEF_TRUE){q
  170.                BSP_LED_Toggle(4);
  171.              OSSemPost( &testsem,
  172.                         OS_OPT_POST_1,
  173.                           &err ) ;
  174.            if(err != OS_ERR_NONE)
  175.                   {
  176.                            ;  //???í?ó???????í
  177.                      }
  178.              OSTimeDlyHMSM(0, 0, 0, 100,
  179.                   OS_OPT_TIME_HMSM_STRICT,
  180.                              &err);
  181.                }
  182. }

  183. void MYCALLBACKFUNCT(void *p_arg)
  184. {

  185. BSP_LED_Toggle(2);

  186. }


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 | 显示全部楼层
回调函数如何应用呢,最长定时多长时间呢?
yiyigirl2014 发表于 2016-4-24 00:05 | 显示全部楼层
这种结构化程序,在处理复杂大型问题的时候用起来更方便点。
643757107 发表于 2016-4-30 15:45 | 显示全部楼层
创建任务是ucOS 学习的重要一步,学会了创建任务,才能做事情。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

164

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部