零知增强板-使用FreeRTOS小型操作系统 开启多任务操作

本文展示在零知增强板上使用小型操作系统FreeRTOS,本次移植的系统为FreeRTOS版本为9.00。 使用的软件库: FreeRTOS.7z(点击下载) 下载该软件库放置到零知底层库STM32HAL分支对应库目录下即可使用。 Demo代码示例,本示例建立两个任务,一个为闪烁LED操作,另一个任务为串口打印。代码如下:

三、代码


							
/**********************************************************
*    文件: freertos-blink.ino      by 零知实验室([url]www.lingzhilab.com[/url])
*    -^^- 零知开源,让电子制作变得更简单! -^^-
*    时间: 2019/01/07 17:24
*    说明: 
************************************************************/
 
#include <libFreeRTOS.h>
 
static void myTask1(void *argument)
{
  /*Task1 setup*/
  uint32_t i = 0;
  Serial.begin(9600);
 
  /* Infinite loop */
  for (;;)
  {
  /* USER CODE BEGIN Task1 */
    i++;
    Serial.print("Count:");
    Serial.print(i,HEX);
    Serial.println(" in myTask1");
    vTaskDelay(1000);
  /* USER CODE END Task1 */
   }
}
 
static void myTask2(void *argument)
{
  /*Task2 setup*/
  pinMode(LED_BUILTIN,OUTPUT);
     
    int state = 0;
   
  /* Infinite loop */
  for (;;)
  {
  /* USER CODE BEGIN Task2 */
    digitalWrite(LED_BUILTIN,state);
      state = 1-state;
      vTaskDelay(100);
  /* USER CODE END Task2 */
  }
}
 
// 复位或上电后运行一次:
void setup() {
    //在这里加入初始化相关代码,只运行一次:
    xTaskCreate(myTask1,
              NULL,
              configMINIMAL_STACK_SIZE,
              NULL,
              tskIDLE_PRIORITY+1,
              NULL);
     
    xTaskCreate(myTask2,
              NULL,
              configMINIMAL_STACK_SIZE,
              NULL,
              tskIDLE_PRIORITY,
              NULL);
  vTaskStartScheduler();  //FreeRTOS start and never return!
}
 
//一直循环执行:
void loop() {
    // 在这里加入主要程序代码,重复执行:
 
}
  
  

将上述代码下载到零知增强板,即可看到另个任务在运行了。

完整代码


freertos-demo.7z(点击下载)