FreeRTOS初体验

1.写在前面

  实时系统(RTOS)种类五花八门,除了老牌RTOS如UCOS、vxWorks、FreeRTOS,及国内的RT-Thread、阿里AliOS、华为LiteOS等;也涌现出新兴的RTOS,或者GitHub上不缺乏开源爱好者编写的实时内核。对于RTOS的选择也是比较纠结,特别是对于未接触过操作系统的学习者。但一般情况下,如果进入公司,公司都会选择比较成熟稳定的RTOS,或者基于历史原因的还依然使用老牌RTOS。鄙人本着“支持国产”原则,一直使用的是RT-Thread实时系统,并且该RTOS确实是发展越来越好,提供的组件越来越丰富。最近基于公司考虑,后期很有可能使用上FreeRTOS。在此之前,对于FreeRTOS也只是停留了解、查阅源码阶段,所以,开始尝鲜FreeRTOS并使用。

  RT-Thread确实是一个很好的“启蒙RTOS”,所以对于FreeRTOS的使用,就是依葫芦画瓢了,使用起来除了函数命名风格不一样,大部分“套路”都是一样的。

2.FreeRTOS介绍

  FreeRTOS是一个迷你的实时操作系统内核。其最大的特点就是“小”,占用资源小,支持8位、16位、32位MCU平台。“麻雀虽小五脏俱全”,FreeRTOS提供了操作系统基本的功能和组件,包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等。此外,FreeRTOS还有一个最大的优势就是如其名,就是免费,在产品上使用也不需担心付费问题。

3.源码获取

3.1 获取源码

  FreeRTOS源代码开源公开,可以在官网获取。官方网站:https://www.freertos.org/

3.2 源码目录结构

  下载的源码是打包成一个可行文件(.exe),比较新颖,节约空间。执行成功后生成源码文件夹,其中有两个源码目录文件。

—FreeRTOS               包含FreeRTOS实时内核源文件和演示例程
—FreeRTOS-Plus          包含FreeRTOS+组件和演示例程

  FreeRTOS目录下是我们关注的,其中的“Demo”目录包含了各类MCU平台的演示例程。作者已经移植好了常用MCU平台,省去了底层移植(汇编、启动文件等底层),降低了使用难度;而且还支持不同编译器,如Keil、IAR等。

  FreeRTOS
      |- Demo     包含演示例程工程
      |- Source   包含实时内核源文件

3.3 选择例程

  STM32最常用的了,毅然选择STM32+Keil的Demo工程。

4.实现一个基本任务

4.1 任务回调函数
  嵌入式中的“hello word!非”流水灯”莫属。那么就用FreeRTOS实现一个“流水灯”任务。演示例程中,创建了两个任务,分别是“Check”和“LCD”,现创建一个“LED”任务执行函数(任务回调函数)。LED控制IO初始化和IO翻转不多赘述,任务函数体实现如下。

static void led_ctrl_task( void *pvParameters )
{/*流水灯*/
    for( ;; )
	{
		led_ctrl(3,1);
		led_ctrl(1,0);
		vTaskDelay(mainCHECK_DELAY);	/*500ms延时(释放CPU资源)*/
		led_ctrl(1,1);
		led_ctrl(2,0);
		vTaskDelay(mainCHECK_DELAY);
		led_ctrl(2,1);
		led_ctrl(3,0);
		vTaskDelay(mainCHECK_DELAY);
	}
}

4.2 创建线程(任务)
  创建任务,调用“xTaskCreate”函数。关于任务创建函数,一类RTOS或者通用操作系统的思维都是类似的,不外乎就几个入口参数。诸如:

— 线程回调函数,如上述LED任务
— 线程名称,如“LED”
— 线程堆栈大小,根据线程资源设置
— 线程用户参数,如无可设置为NULL
— 线程优先级

  FreeRTOS创建一个LED流水灯任务。

xTaskCreate( led_ctrl_task, "LED", mainCHECK_TASK_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );

至此,FreeRTOS实现一个基本的任务。


5.总结

[1].操作系统思维都是通用的,特别是使用技巧,选择一款经典的操作系统作为学习途径,再学习其他操作系统时,则是举一反三的过程。

[2].操作系统大部分时候充当工具载体,更多是应用编程思想、线程(任务)管理、资源分配、问题定位等。从事系统底层驱动开发的则另当别论。

posted @ 2018-10-16 00:35  Acuity  阅读(230)  评论(0编辑  收藏  举报