准备 
需要提前安装好FreeRTOS的库     
  
一、Demo介绍 
示例:在Arduino上跑FreeRTOS的一个简单消息队列demo。  
二、步骤 
1.添加库 
需要两个基础的头文件:  
#include <Arduino_FreeRTOS.h>
#include <queue.h>					
  
2.声明 
QueueHandle_t stringQueue;			
  
这个都是通用的,在cortex M3 M4下都是一样的。  
3.创建队列及任务函数 
在setup()中创建:  
  stringQueue = xQueueCreate(10, 
                             sizeof(String) 
                            );
  if (stringQueue != NULL)
  {
    
    xTaskCreate(TaskSerial,     
                "Serial",       
                128,            
                NULL,           
                2,              
                NULL);          
    
    xTaskCreate(TaskStringRead, 
                "StringRead",   
                128,            
                NULL,           
                1,              
                NULL);          
  }
  xTaskCreate(TaskBlink,        
              "Blink",          
              128,              
              NULL,             
              0,                
              NULL );           
  
4.编写任务函数具体内容 
需要注意的是在Arduino上它的系统滴答节拍是15ms一次的,也就是说vTaskDelay(1)  它延时的是15ms;如果需要延时500ms该怎么办呢?  它也为我们提供了portTICK_PERIOD_MS,  我们可以这样写 vTaskDelay(500 / portTICK_PERIOD_MS),  只要除以它本身就可以了  
void TaskStringRead(void *pvParameters)
{
  for (;;)
  {
    String Test = "Hello,CSDN";
    xQueueSend(stringQueue, &Test, portMAX_DELAY);      
    vTaskDelay(500 / portTICK_PERIOD_MS);
  }
}
void TaskSerial(void * pvParameters)
{
  (void) pvParameters;
  Serial.begin(9600);
  while (!Serial)
  {
    vTaskDelay(1);
  }
  String Test_R = "";
  for (;;)
  {
    if (xQueueReceive(stringQueue, &Test_R, portMAX_DELAY) == pdPASS)   
    {
      Serial.println(Test_R);
    }
  }
}
void TaskBlink(void *pvParameters)
{
  (void) pvParameters;
  pinMode(LED_BUILTIN, OUTPUT);
  for (;;)
  {
    digitalWrite(LED_BUILTIN, HIGH);
    vTaskDelay( 250 / portTICK_PERIOD_MS );
    digitalWrite(LED_BUILTIN, LOW);
    vTaskDelay( 250 / portTICK_PERIOD_MS );
  }
}
  
5.Loop函数不做任何处理 
void Loop () {}
  
  
6.运行效果 
   
总结 
以上就是一个字符串消息队列demo的完整步骤,还是很简单易懂的,不用像STM32那么相对复杂难理解一点。  
代码下载: 
StringQueue.  😀 授人鱼,更要授人以渔,希望猿一的本篇博客能对您有所帮助! 
                
                
                
        
    
 
 |