本文展示在零知增强板上使用小型操作系统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() {
// 在这里加入主要程序代码,重复执行:
}
将上述代码下载到零知增强板,即可看到另个任务在运行了。
完整代码