一. 入门概要Ø Whatis the “Real-time systems”? 在网上搜罗了很多关于实时操作系统的定义,往往不是文字拗口,就是表达太过复杂,相反我觉得下面这句话非常鲜活的点出了实时操作系统的本质。
“Real-timesystems are designed to do something within a certain amount of time; theyguarantee that stuff happens when it's supposed to”
使用嵌入式操作系统与前后台模式应用程序相比(应用程序是一个无限的循环(例如:while(1)),循环中调用相应的函数完成相应的操作,这种部分可以看成后台行为(backgroud)。中断服务程序处理异步事件,这部分可以看成前台行为(foregroud)),在信息处理及时性方面,更可预期,严谨,可靠,而至于嵌入式操作系统的其他特点,可以通过百度或谷歌一下了解,在这就不一一列出了。
Ø FreeRTOS FreeRTOS 是一个轻量级嵌入式操作系统,已成功的移植到30种架构的处理器和MCU中,支持多大20多种编译器。最小化的 FreeRTOS 核心仅包括 3 个 .c 文件(tasks.c、queue.c、list.c)和少数头文件,总共不到 9000 行程式码,还包括了注解和空行。一个典型的编译后binary(二进位码)小于 10 KB。
FreeRTOS 代码可以分为三个主要区块:任务、通信和硬体层面。 · 任务 (Tasks):FreeRTOS 的核心程式码约有一半是用来处理多数操作系统首要关注的问题:任务(Tasks)。任务(Tasks)是拥有优先权的用户所定义的 C 函数。task.c 和 task.h 负责所有关于建立、调度和维护任务的繁重工作。
· 通信(Communication): 任务很重要,不过任务间可以互相通信则更为重要!它带出了 FreeRTOS 的第二项议题:通信 (Communication)。FreeRTOS 核心程式码大约有 40% 是用来处理通信的。queue.c 和 queue.h 负责处理 FreeRTOS 的通信,任务和中断(interrupt)使用队列(队列,queue)互相发送数据,并且使用 semaphore 和 mutex 来派发 critical section 的使用信号。
· 硬件层面:有近 9000行的程式码组成基本的 FreeRTOS,这部份是与硬件无关的(hardware-independent),同样的程序代码在不同硬体平台上的 FreeRTOS 都可以运行。而大约有6% 的 FreeRTOS 核心代码,在与硬件无关的FreeRTOS 核心代码和与硬件相关的程序代码间扮演着桥接(shim)的角色
Ø 求人不如求己 通过以下网址,快速上手FreeRTOS 会So easy!!J
Ø FreeRTOS源码目录结构 FreeRTOS下载包中包含每个处理器移植和演示例程的源码。将所有移植包放入一个下载文件中大大简化了分类处理,源码目录结构还算简单的,并且FreeRTOS实时内核仅仅只有3个文件(tasks.c、queue.c、list.c)。
下载包目录包含两个子目录:FreeRTOS和FreeRTOS-Plus,如下所示:
· FreeRTOS-Plus:包含FreeRTOS+组件和演示例程;
· FreeRTOS:包含FreeRTOS实时内核源文件和演示例程;
FreeRTOS-Plus目录树包含多个自述文件(Readme),接下来重点介绍FreeRTOS内核的核心源文件和演示例程,它们被分成两个主要的子目录,如下所示:
RTOS代码的核心包含在三个文件中:tasks.c、queue.c、list.c。这三个文件位于FreeRTOS/Source目录。在该目录下还包含三个可选的文件:timers.c、event_groups.c、croutine.c,分别实现软件定时、事件组和协程功能。
FreeRTOS/Source目录结构如下所示,首先基于编译器分类,跟着罗列出支持的处理器和 MCU架构,还有堆栈设计也在这FreeRTOS/Source/Portable/MemMang目录下。
FreeRTOS/Demo目录结构如下所示,包含各类预配置好的工程,可用于创建个人自定义工程。