(四)移植FreeRTOS系统到麒麟座
时间:10-02
整理:3721RD
点击:
车体等装备准备好了,传感器已就位。开始传感器数据采集部分工作。
MPU6050采用IIC接口来读取数据。准备使用软件模拟IIC。这种方式比较耗费CPU资源。考虑了一下还是使用一个小型实时系统好了。利用实时系统的任务管理来保证高优先级任务的执行。
之前一直在用RTX系统,这次想试试FreeRTOS系统。花了一天时间把150页的FreeRTOS指南看了一遍。感觉和RTX系统差不多。不过RTX系统和FreeRTOS系统的源码我都没看,只阅读过UCOS-II系统的源码。不过从移植文件上看,FreeRTOS系统的代码量应该比UCOS-II小很多。
FreeRTOS的主要特点如下:
1. 支持抢占式调度,合作式调度和时间片调度
2. 具有低功耗模式,称为tickless模式
3. FreeRTOS-MPU支持M3/M4/M7内核的MPU(内存保护单元)
4. 典型的内核使用大小在4k~9k
5. 支持消息队列、二值信号量、计数信号量、递归信号量和互斥信号量,可用于任务与任务之间的消息传递和同步,任务与终端间的消息传递和同步
6. 任务数量不限,任务优先级数量不限
7. 高效的软件定时器,不需要损耗额外的CPU时间,除非需要执行定时器任务
8. 任务间直接的消息传递,速度较快
9. FreeRTOS的队列是其它通信和同步机制的基础
话不多说,开始移植,在这里记录下过程分享给想同样想试试这个系统的小伙伴。也方便以后再次用的时候自己查阅一下。毕竟不常用,不熟悉。
到这个网站可以下载到最新源码,网址是:https://sourceforge.net/projects/freertos/files/latest/download?source=files
下载之后解压,在文件夹里找到Source文件夹,并把它复制到你的工程里。此文件夹里包含系统源码文件。FreeRTOS的源码核心部分是tasks.c和list.c,其余的几个文件功能都是可选的,例如软件定时器、队列、协程等等。
然后在DEMO文件夹里找到FreeRTOSConfig.h,里面包含系统时钟、任务最大优先级、是否使用钩子函数等等一系列配置。在编写系统任务前,有必要对配置文件FreeRTOSConfig.h进行检查。FreeRTOSConfig.h里面几乎都是一些宏定义。
在工程中添加新的头文件搜索路径:
.\FreeRTOS\include;
.\FreeRTOS\portable\RVDS\ARM_CM3
添加内存管理的方案四heap_4.c和port.c文件,该方案具有内存块碎片合并功能,比heap_2.c的最优内存块分配方案要稳定很多。
移植结果如图:
编译结果无错误。这里省略了不少细节,包括更改启动文件里,系统用到的3个中断向量等等。后面的帖子在补充吧,第一次用这个,发现什么问题就顺便在帖子里说一下。