10002|2

266

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

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

 
  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. }
复制代码


最新回复

printf("\r\n%s",(char*)(pvParameters)); 原码在哪?如何改为其他串口?  详情 回复 发表于 2016-5-14 15:18
点赞 关注
个人签名

gitee/casy

 

回复
举报

266

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
实验结果:
 
个人签名

gitee/casy

 
 

回复

31

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
printf("\r\n%s",(char*)(pvParameters));

原码在哪?如何改为其他串口?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表