FreeRTOS简述和移植文档
1. 前言
目前由于IOT的飞速发展,针对单片机的业务需求也会经常变动,在某些情况下,单片机设备的资源不再是关注的重点,重点是开发效率以及应对业务升级的快速迭代,多任务的场景越来越多,原本的方案无法胜任多多任务的场景(自己在一个进程中控制多个任务的时序很麻烦),因此越来越多的设备会放置rtos来满足多任务以及多变的业务升级需求,rtos简单理解主要就是将一些常用的功能封装成一些库,再对这些库做统一管理并提供接口调用,方便开发任务进行多任务开发等,Free RTOS只是众多RTOS中的一种。
我们目前使用的门禁机目前也是使用的FreeRTOS,因为需要提高安全性,卡信息在某些场景下需要联网做比对,针对一些问题也需要像PC上使用的操作系统一样做OTA升级,搭建系统会将很多原本冗余重复的代码交给操作系统。其实目前公交卡之类的都是联网的,这样才能防止早些年出现的自行给公交卡充值等情况,也才可以实现当你卡内没钱后也可以在一段时间后再自行扣除等功能,设备入网并且可以在网络上做更复杂的交互是IOT很重要的一步。
2. FreeRTOS简述
以下主要来自维基百科:
(1). 概述
FreeRTOS是一个热门的嵌入式设备用即时操作系统核心,它于2003年由Richard Barry设计,并已被经成功移植到35种不同的微控制器上
。FreeRTOS采用MIT许可证许可。
(2). 实现
FreeRTOS的设计小巧且简易,整个核心代码只有3到4个C文件,为了让代码容易阅读、移植和维护,大部分的代码都是以C语言编写,只有一些函数(多数是架构特定排班副程序)采用汇编语言编写。
FreeRTOS提供许多方法以实现多线程(threads)、多作业(task)、互斥锁(mutex)、信号量(semaphore)和软件计时器(software timer),有个为低耗电应用程序提供的无嘀嗒(tick-less)模式,线程的优先权管理也有支持,此外,FreeRTOS提供了四种存储器配置的模式:
- 仅配置(allocate only)
- 以非常简易但快速的算法进行配置与释放
- 搭配存储器合并,以较复杂但快速的算法进行配置与释放
- 搭配互斥保护,以 C 库配置进行配置与释放
FreeRTOS中没有一些像Linux、Microsoft Windows等典型操作系统具有的先进特征,例如设备驱动程序、先进存储器管理机制、用户管理和网络管理,FreeRTOS着重在运行的简洁与速度,FreeRTOS有时会被视为是一个‘线程库’而非‘操作系统’,尽管可以找到命令行接口和类似POSIX I/O 接口的插件。
FreeRTOS实现了多线程,主程序会在规律的短时间区间内调用一个线程时计方法,这个方法会以循环制依照任务的优先级进行任务切换,一般来说,这个短时间区间介于 1/1000 秒与 1/100 秒之间,透过一个硬件时计中断来计时,但这个区间经常随着特定的应用而改变。
从FreeRTOS官网(FreeRTOS.org(页面存档备份,存于互联网档案馆))所下载到的代码包含准备用来移植或编译的配置文件和演示代码,让用户可以快速地进行应用程序设计。
(3). 主要特色
- 存储器足迹非常小,低负担(overhead)且运行非常快速
- 提供低电耗应用程序无计时选项
- 对操作系统新手而言,很适合作为入门教材,对于专业开发者来说则适合用于商业产品开发
- 调度器可以设置成可抢先(preemptive)或共同运作(cooperative operation)
- 提供共享副程序(coroutine),在FreeRTOS中,共享副程序是一个存储器堆栈用量非常有限但非常简易轻巧的任务
- 支持使用(generic trace macros(页面存档备份,存于互联网档案馆). )
(4). 支持平台
3. 移植FreeRTOS
目前移植Free RTOS的资料很多,这里是在亚马逊上找到的一个中文文档,很详细的介绍了Free RTOS的移植,大家可以作为参考:
链接: https://pan.baidu.com/s/18OwIBuIVOdyylvPz_IsA9g
提取码: ccj3
4. 最后
接下来我会找时间总结在stm32F4的开发板上移植Free RTOS并开发一些简单的例子,比如写一些MQTT、http客户端或者写一些蓝牙相关的程序,让设备和手机或者服务器做一些交互。