Chinaunix首页 | 论坛 | 博客
  • 博客访问: 70108
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-10 08:06
文章分类
文章存档

2015年(24)

我的朋友

分类: 嵌入式

2015-07-25 16:00:21

1. vTaskDelay()
函数原型:void vTaskDelay(portTickType xTicksToDelay);
xTicksToDelay: 指定延时间,即指定心跳个数。调用该函数的任务将进入阻塞态,当延时结束时任务进入就绪态。
2. vTaskDelayUntil
函数原型:void vTaskDelayUntil(portTickType* pxPreviousWakeTime, portTickType xtimeIncrement);
pxPreviousWakeTime: 用来保存任务上一次离开阻塞态进入就绪态的时刻,每次执行完该函数,将结束时的时刻赋给pxPreviousWakeTime指向的变量,这个时刻做为参考点用来计算下一次离开阻塞态的时刻。
xtimeIncrement:用来指定延时的时间长度,以心跳为单位。
例程:

点击(此处)折叠或打开

  1. #include "includes.h"
  2. #include <stdio.h>
  3. #include "usart.h"


  4. void xDelay(void);
  5. void xtask(void *pvParameter);
  6. const char *pcTask1Name = "Task1 is running\n";
  7. const char *pcTask2Name = "Task2 is running\n";

  8. int main()
  9. {
  10.    int ret = 0;
  11.    uart_init(9600);     //????????????9600
  12.    NVIC_Configuration();// ?è????????????·?×é
  13.   
  14.    /*
  15.     *???¨??????????
  16.     */
  17.     xTaskCreate(xtask, //??????????
  18.                 "task1", //????????±???×??????????÷???±????
  19.                 512, //??????·????????????ó??
  20.                 (void*)pcTask1Name, //??????????????????
  21.                 1, //±?????????????
  22.                 NULL); //????????????±ú
  23.     xTaskCreate(xtask, "task2", 512, (void*)pcTask2Name, 2, NULL);    //??????1?????¨????2
  24.     /*
  25.      *?????????÷???÷??????????????
  26.      */
  27.     
  28.     vTaskStartScheduler();
  29.     /*
  30.      *??°????????á????????????·??????????ò??????????????×?????·¨??????????·???
  31.      *????
  32.      */
  33.      while(1);
  34. }
  35. /***************************************
  36.  * ?????ò???????±????
  37.  **************************************/
  38. void xDelay()
  39. {
  40.     int i;
  41.     for(i = 200; i--; i >= 0);
  42. }
  43. /****************************************
  44.  * ??????????????
  45.  ***************************************/
  46.  void xtask(void *pvParameter)
  47.  {    
  48.      int i;
  49.      
  50.     
  51.      //volatile unsigned long u1 = 0;
  52.      portTickType xLastWakeTime;
  53.      xLastWakeTime = xTaskGetTickCount();
  54.     
  55.      while(1)
  56.      {
  57.          printf("%s\n", (char*)pvParameter);
  58.          vTaskDelayUntil(&xLastWakeTime, 10);
  59.      }
  60.  }


执行结果为:


例程2 
(1)创建两个任务,任务的有先级都为1,两个任务持续运行。
(2)创建第三个任务,任务的优先级为2,周期性的执行。

点击(此处)折叠或打开

  1. #include "includes.h"
  2. #include <stdio.h>
  3. #include "usart.h"


  4. void xDelay(void);
  5. void xtask(void *pvParameter);
  6. void xtask3(void *pvParameter);
  7. const char *pcTask1Name = "Task1 is running\n";
  8. const char *pcTask2Name = "Task2 is running\n";
  9. const char *pcTask3Name = "Task3 is running\n";


  10. int main()
  11. {
  12.    int ret = 0;
  13.    uart_init(9600);     //????????????9600
  14.    NVIC_Configuration();// ?è????????????·?×é
  15.   
  16.    /*
  17.     *???¨??????????
  18.     */
  19.     xTaskCreate(xtask, //??????????
  20.                 "task1", //????????±???×??????????÷???±????
  21.                 512, //??????·????????????ó??
  22.                 (void*)pcTask1Name, //??????????????????
  23.                 1, //±?????????????
  24.                 NULL); //????????????±ú
  25.     xTaskCreate(xtask, "task2", 512, (void*)pcTask2Name, 1, NULL);    //??????1?????¨????2
  26.     xTaskCreate(xtask3, "task3", 512, (void*)pcTask3Name, 2, NULL);    //??????1?????¨????2            
  27.     /*
  28.      *?????????÷???÷??????????????
  29.      */
  30.     
  31.     vTaskStartScheduler();
  32.     /*
  33.      *??°????????á????????????·??????????ò??????????????×?????·¨??????????·???
  34.      *????
  35.      */
  36.      while(1);
  37. }

  38. /****************************************
  39.  * ??????????????
  40.  ***************************************/
  41. void xtask(void *pvParameter)
  42. {    
  43.      int i;
  44.      
  45.     
  46.      //volatile unsigned long u1 = 0;
  47.          
  48.      while(1)
  49.      {
  50.          printf("%s", (char*)pvParameter);
  51.      }
  52. }
  53.  /****************************************
  54.  * ??????????????
  55.  ***************************************/
  56. void xtask3(void *pvParameter)
  57. {    
  58.      int i;
  59.      
  60.     
  61.      //volatile unsigned long u1 = 0;
  62.      portTickType xLastWakeTime;
  63.      xLastWakeTime = xTaskGetTickCount();
  64.     
  65.      while(1)
  66.      {
  67.          printf("%s", (char*)pvParameter);
  68.          vTaskDelayUntil(&xLastWakeTime, 10);
  69.      }
  70. }





阅读(1672) | 评论(0) | 转发(0) |
0

上一篇:freeRTOS的优先级

下一篇:没有了

给主人留下些什么吧!~~