[FreeRTOS] FreeRTOS学习笔记:通过任务参数传入需要打印输出的文本

caizhiwei   2015-4-22 14:43 楼主
  1. #include "FreeRTOS.h"
  2. #include "task.h"
  3. #include "queue.h"
  4. #include "croutine.h"
  5. #include "bsp.h"


  6. /*
  7. **********************************************************************************************************
  8.                                                                                         函数声明
  9. **********************************************************************************************************
  10. */
  11. static void AppTaskCreate (void);
  12. extern void vSetupTimerTest( void );

  13. /*
  14. **********************************************************************************************************
  15.                                                                                         变量声明
  16. **********************************************************************************************************
  17. */
  18. xTaskHandle xHandleTask3;
  19. int8_t pcWriteBuffer[500];

  20. /*
  21. *********************************************************************************************************
  22. *        函 数 名: main
  23. *        功能说明: 标准c程序入口。
  24. *        形    参:无
  25. *        返 回 值: 无
  26. *********************************************************************************************************
  27. */

  28. static const char *pcTextForTask1 ="Task 1 is running\r\n";
  29. static const char *pcTextForTask2 ="Task 2 is running\t\n";

  30. int main(void)
  31. {
  32.     /* 硬件初始化 */
  33.     bsp_Init();
  34.           
  35.     /* 创建任务 */
  36.     AppTaskCreate();
  37.    
  38.     vSetupTimerTest();
  39.        
  40.     /* 启动调度,开始执行任务 */
  41.     vTaskStartScheduler();

  42.     /*
  43.            If all is well we will never reach here as the scheduler will now be
  44.            running.  If we do reach here then it is likely that there was insufficient
  45.            heap available for the idle task to be created.
  46.         */
  47.     while (1);
  48. }

  49. /*
  50. *********************************************************************************************************
  51. *        函 数 名: vTask1
  52. *        功能说明: LED闪烁               
  53. *        形    参:pvParameters 是在创建该任务时传递的形参
  54. *        返 回 值: 无
  55. *********************************************************************************************************
  56. */
  57. void vTask1( void *pvParameters )
  58. {
  59.     portTickType xDelay, xNextTime;
  60.    
  61.     //char *pcTaskName = (char*)pvParameters;
  62.    
  63.     xNextTime = xTaskGetTickCount () + ( portTickType ) 1000;
  64.        
  65.     while(1)
  66.     {

  67.         bsp_LedToggle(LED1);
  68.         //printf("\r\n%s",pcTaskName);
  69.         printf("\r\n%s",(char*)(pvParameters));
  70.         /* 用vTaskDelay实现vTaskDelayUntil() */        
  71.         xDelay = xNextTime - xTaskGetTickCount ();
  72.         xNextTime += ( portTickType ) 1000;

  73.         if( xDelay <= ( portTickType ) 1000 )
  74.         {
  75.                 vTaskDelay( xDelay );
  76.         }
  77.     }
  78. }

  79. /*
  80. *********************************************************************************************************
  81. *        函 数 名: vTask2
  82. *        功能说明: LED闪烁               
  83. *        形    参:pvParameters 是在创建该任务时传递的形参
  84. *        返 回 值: 无
  85. *********************************************************************************************************
  86. */
  87. void vTask2( void *pvParameters )
  88. {

  89.     portTickType xLastWakeTime;
  90.     const portTickType xFrequency = 100;

  91.     // Initialise the xLastWakeTime variable with the current time.
  92.      xLastWakeTime = xTaskGetTickCount();

  93.     while(1)
  94.     {
  95.         
  96.         bsp_LedToggle(LED2);  // Wait for the next cycle.  
  97.         vTaskDelayUntil( &xLastWakeTime, xFrequency );
  98.     }
  99. }

  100. /*
  101. *********************************************************************************************************
  102. *        函 数 名: vTask3
  103. *        功能说明: LED闪烁               
  104. *        形    参:pvParameters 是在创建该任务时传递的形参
  105. *        返 回 值: 无
  106. *********************************************************************************************************
  107. */
  108. void vTask3( void *pvParameters )
  109. {
  110.     while(1)
  111.     {
  112.           /* 挂起自己,可以写NULL或者xHandleTask3句柄,都可以的 */
  113.           vTaskSuspend( NULL );
  114.           bsp_LedToggle(LED3);
  115.     }
  116. }

  117. /*
  118. *********************************************************************************************************
  119. *        函 数 名: vTask4
  120. *        功能说明: LED闪烁               
  121. *        形    参:pvParameters 是在创建该任务时传递的形参
  122. *        返 回 值: 无
  123. *********************************************************************************************************
  124. */
  125. void vTask4( void *pvParameters )
  126. {
  127.         portTickType xLastWakeTime;
  128.     const portTickType xFrequency = 1000;

  129.          // Initialise the xLastWakeTime variable with the current time.
  130.      xLastWakeTime = xTaskGetTickCount();

  131.     while(1)
  132.     {
  133.         vTaskResume(xHandleTask3);
  134.         vTaskList((char *)&pcWriteBuffer);
  135.         printf("%s\r\n", pcWriteBuffer);

  136.         vTaskGetRunTimeStats(( char *)&pcWriteBuffer);
  137.         printf("%s\r\n", pcWriteBuffer);
  138.         vTaskDelayUntil( &xLastWakeTime, xFrequency );
  139.     }
  140. }


  141. /*
  142. *********************************************************************************************************
  143. *        函 数 名: AppTaskCreate
  144. *        功能说明: 创建应用任务
  145. *        形    参:无
  146. *        返 回 值: 无
  147. *********************************************************************************************************
  148. */
  149. static void AppTaskCreate (void)
  150. {
  151.         /* Create one task. */
  152.     xTaskCreate(    vTask1,     /* Pointer to the function that implements the task.              */
  153.                     "Task 1",   /* Text name for the task.  This is to facilitate debugging only. */
  154.                     500,        /* Stack depth in words.                                          */
  155.                     (void*)pcTextForTask1,       /*通过任务参数传入需要打印输出的文本. */
  156.                     1,          /* This task will run at priority 1.                              */
  157.                     NULL );     /* We are not using the task handle.                              */

  158.     /* Create one task. */
  159.     xTaskCreate(    vTask2,     /* Pointer to the function that implements the task. */
  160.                     "Task 2",   /* Text name for the task.  This is to facilitate debugging only. */
  161.                     500,        /* Stack depth in words.                                          */
  162.                     NULL,       /* We are not using the task parameter.                           */
  163.                     2,          /* This task will run at priority 2.                              */
  164.                     NULL );     /* We are not using the task handle.                              */
  165.        
  166.          /* Create one task. */
  167.     xTaskCreate(    vTask3,     /* Pointer to the function that implements the task. */
  168.                     "Task 3",   /* Text name for the task.  This is to facilitate debugging only. */
  169.                     500,        /* Stack depth in words.                                          */
  170.                     NULL,       /* We are not using the task parameter.                           */
  171.                     3,          /* This task will run at priority 2.                              */
  172.                     &xHandleTask3 );   
  173.        
  174.         /* Create one task. */
  175.     xTaskCreate(    vTask4,     /* Pointer to the function that implements the task. */
  176.                     "Task 4",   /* Text name for the task.  This is to facilitate debugging only. */
  177.                     500,        /* Stack depth in words.                                          */
  178.                     NULL,       /* We are not using the task parameter.                           */
  179.                     4,          /* This task will run at priority 2.                              */
  180.                     NULL );     /* We are not using the task handle.                              */                               
  181. }


gitee/casy

回复评论 (2)

实验结果:
QQ截图20150422144013.jpg
gitee/casy
点赞  2015-4-22 14:44
printf("\r\n%s",(char*)(pvParameters));

原码在哪?如何改为其他串口?
点赞  2016-5-14 15:18
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复