摘 要: FreeRTOS作为一款免费的实时操作系统,系统内核小、裁剪方便、移植性好,广泛应用于对成本敏感的小型嵌入式系统中,但是FreeRTOS本身不带文件管理功能,不便于很多需要经常进行文件存储与读写的应用。为了提高该操作系统易用性,介绍一款免费、小巧并且读写高效的文件管理系统,即FATFS,详细说明FATFS在FreeRTOS上的移植与注意事项,重点说明了FATFS在FreeRTOS中如何解决重入的问题,最后在STM32F4平台上对U盘进行读写来验证其文件管理的效果。结果表明,其可以很好地完成文件管理的功能。

关键词: 嵌入式操作系统; FATFS; FreeRTOS; 文件管理系统

中图分类号: TN911?34; TP319 文献标识码: A 文章编号: 1004?373X(2017)06?0065?03

Abstract: As a free real?time operating system, FreeRTOS is widely used in cheap system due to its small system kernel, convenent trim and good portability. However, FreeRTOS itself does not have any file management function, so it is not inconvenient for some applications of often writing and reading files. To make it easy to use, a free?charge, small and efficient file management system, FATFS is introduced in this paper. The FATFS transplantation and matters needing attention on FreeRTOS are illustrated in detail. The method that how to solve the problem of FATFS′s re?entry in the FreeRTOS is described emphatically. A test to read and write something in a U?disk on the platform STM32F4 was conducted to verify its effect. The result shows that it can realize the function of file management.

Keywords: embedded operating system; FATFS; FreeRTOS; file management system

随着信息技术的发展,当今社会的信息量越来越大,以往由单片机系统简单地对存储媒介按地址、按字节的读/写已经无法满足人们实际应用的需要,利用文件系统对存储媒介进行管理成了今后单片机系统的一个发展方向[1]。目前常用的文件系统主要有微软的FAT12,FAT16,FAT32,NTFS,以及Linux 系统下的EXT2,EXT3 等。由于FAT高效、灵活的特点,在当前的消费类电子产品中,用得最多的还是FAT 文件系统,如U 盘,MP3,MP4,数码相机等,因此本文介绍了一款易于移植和使用、占用硬件资源相对较小而功能又强大的FAT 开源文件系统――FATFS[2]。

嵌入式操作系统FreeRTOS的内核不带文件系统,虽然提供了带文件系统的例子,但是需要授权[3],这势必会增加嵌入式开发的成本;因此本文在FreeRTOS中引进了免费、开源的文件管理系统FATFS,使得FreeRTOS的使用更加方便快捷。同时由于FATFS是一款高效、免费、资源占用率低的文件管理系统,使得在只占用很少资源的情况下增加开发FreeRTOS嵌入式产品的效率,并且没有增加成本。

1 FreeRTOS

FreeRTOS是一款非常优秀的嵌入式操作系统,非常适合对成本敏感的小型嵌入式设备,但是为了精简,FreeRTOS内核并没有提供文件管理、网络以及GUI等功能,当需要这些功能的时候就需要移植第三方的软件包[4]。其中文件管理系统在一些需要频繁存储、处理数据的嵌入式设备中尤其重要,因此本文将一款精简但是功能强大的文件管理系统FATFS移植到FreeRTOS中[5]。

2 FATFS

FATFS是一款完全免费开源的FAT文件系统模块,C盼小型的嵌入式系统而设计。它完全用标准的C语言编写,所以具有良好的硬件平台独立性,可以非常方便地移植到8051,PIC,AVR,SH,Z80,ARM等系列单片机上且只需要做简单的修改。它支持FAT12,FAT16,FAT32,支持多个存储媒介,有独立的缓冲区,可以对多个文件进行读写操作,并特别对8位单片机和16位单片机进行优化,增加其读写效率[6]。

FATFS的代码量非常小,大小总共不到200 KB,应用时可以把字库存放到外部存储中,运行时占用内存不到1 KB,因此FATFS并不会对硬件增加太多的额外负担。同时FATFS功能非常强大,它能支持多卷,多个ANSI/OEM或者Unicode,支持多种扇区大小,只读、最小化的API和I/O缓冲区,并且支持RTOS,这使得FATFS非常适合移植到FreeRTOS的系统中去。

FATFS设计的读写方式非常巧妙,这使得它拥有非常高的读写效率,扇区局部的数据通过文件I/O缓冲区来传输;对于长数据的传输,中间的或多个扇区的数据直接传输到应用程序缓冲区;扇区对齐的整块数据传输的情况下,不使用文件I/O缓冲区。在直接传输时disk_read函数一次会最大程度的读取更多的扇区,但是多扇区传输不会跨越簇边界,即使它们是相邻的。因此使用扇区对齐的方式进行读写访问可以避免缓冲区数据传输,并且读写效率将会大大提升[7]。

3 FATFS在FreeROTS上的移植与重入问题

3.1 FATFS在FreeROTS上的移植

这里使用的FATFS是非常完善的R0.10b版本,移植FATFS主要分为三步:

(1) 数据类型。在integer.h 里面定义数据的类型。这里需要了解使用的编译器的数据类型,并根据编译器定义好数据类型。使用的编译器是MDK[8?9],需要转换的类型有:

typedef unsigned char BYTE;

typedef short SHORT;

typedef unsigned short WORD;

typedef unsigned short WCHAR;

typedef int INT;

typedef unsigned int UINT;

typedef long LONG;

typedef unsigned long DWORD;

(2) 配置。打开 ffconf.h,文件系统的配置裁剪等均在此头文件中进行定义配置,具体配置如表1所示。

表1 ffconf.h需要配置的参数

(3) 函数编写。打开diskio.c,进行底层驱动编写,需要根据具体的磁盘编写6 个接口函数,具体如表2所示,其中读写函数实现的方式如图1所示。

表2 需要编写的函数

3.2 重入问题

操作系统中一般是多进程的,对于不同的文件操作总是可以同时工作,这与重入无关,而对于同一个文件的重入访问则要考虑重入,如果一个文件函数调用时其他访问的文件被一个线程使用,则此访问将阻塞,直到该文件解锁。

在FreeRTOS中是利用互斥信号量来完成这个功能的,使能_FS_REENTRANT选项,此时,ff.c中的与平台相关的锁定函数必须为每个RTOS重新编写,同时_SYNC_t选项要相应的写为FreeRTOS对应的信号量结构体xSemaphoreHandle。同时需要加入这四个函数:int ff_cre_syncobj(BYTE vol,_SYNC_t*sobj);int ff_req_grant(_SYNC_t sobj);void ff_rel_grant(_SYNC_t sobj);int ff_del_syncobj(_SYNC_t sobj)。分别对应创建信号量,请求信号量,释放信号量和删除信号量。

函数f_mount挂载磁盘同时创建信号量sobj,函数f_open会请求信号量,然后打开/创建文件,然后释放信号量[9]。这样就保证同一个时间点只有一个任务可以打开同一个文件,这样就保证重入功能的实现,具体如图2所示。

4 文件传输应用

4.1 多任务情况下文件传输

创建三个任务,任务一和任务二的优先级为最高和次高,只是简单的进行LED灯的闪烁,任务三优先级最低[10],进行文件的传输,具体情况如图3所示。

在任务不断调度的情况下,传输大小为50 MB的文件,耗时2 min 22 s,这时只用了64 KB的内存作为缓冲区,如果加大内存,速度则会更快。

4.2 多任务对同一文件操作

下面创建两个相同优先级的任务,利用信号量[11?12],任务一和任务二分别对同一文件进行复制,来验证在操作系统下的多任务对同一文件的操作。具体情况如图4所示。

实验结果如图5所示。

这说明相同优先级的任务一和任务二都完成了对文件1.caj的复制工作,这表明在FreeRTOS中移植文件管理系统FATFS后,利用信号量多个任务可以同时对同一个文件进行读写操作。

5 结 语

本文针对FreeRTOS的特点,选择FATFS作为文件管理系统,修改选项并且编写与操作系统相关的函数,成功移植到操作系统FreeRTOS中,实现了多任务情况下文件存取功能,增加了FreeRTOS的易用性,通过实验验证,证明其可以很好地完成文件管理的功能。

参考文献

[1] 洪岳炜,王百鸣,谢超英.一种易于移植和使用的文件系统FATFS Moule[J].单片机与嵌入式系统应用,2008(5):29?31.

[2] 张涛,左谨平,马华玲.FATFS在32位微控制器STM32上的移植[J].电子技术,2010(3):25?27.

[3] 何小庆.谈谈FreeRTOS极其授权方式[J].单片机与嵌入式系统应用,2015(10):3?4.

[4] 宋华鲁,闫银发,张世福,等.基于STM32和FreeRTOS的嵌入式太阳能干燥实时监测和控制系统设计[J].现代电子技术,2013,36(23):103?106.

[5] Real Time Engineers Ltd. FreeRTOS [EB/OL]. [2015?12?11] . http://.

[6] Anon. FatFs?Generic FAT file system module [EB/OL]. [2015?10?20]. elm?/fsw/ff/00indes_e.htl.

[7] Anon. FatFs module application note [EB/OL]. [2015?10?30]. elm?/fsw/ff/en/appnote.htl .

[8] 李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008:398?410.

[9] 李宁.ARM开发工具Real View MDK使用入门[M].北京:北京航空航天大学出版社,2008:266?280.

[10] 李志明,檀永,徐石明.STM32嵌入式系统开实战指南[M].北京:机械工业出版社,2013.

[11] 张龙彪,张果,王剑平,等.嵌入式操作系统FreeRTOS的原理与移植实现[J].信息技g,2012(11):31?34.

[12] 任慰,何顶新,赵金.一种新型嵌入式实时操作系统的移植研究[J].计算机工程,2013(5):284?287.

linux模块移植到freertos,FATFS在嵌入式操作系统FreeRTOS中的移植与应用相关推荐

  1. 嵌入式操作系统VxWorks中网络协议存储池原理及实现

    嵌入式操作系统VxWorks中网络协议存储池原理及实现 周卫东 蔺妍 刘利强 (哈尔滨工程大学自动化学院,黑龙江 哈尔滨,150001) 摘  要  本文讨论了网络协议存储池的基本原理和在嵌入式操作系 ...

  2. FlyThings OS:基于Linux实现现代化人机交互体验的新嵌入式操作系统

    FlyThings OS 是深圳市中科世为科技有限公司基于Linux深度裁剪定制开发的一套小型嵌入式操作系统. 系统以Linux为基础自主开发了一个应用开发框架,实现了一套物联网等领域下的一套带人机界 ...

  3. 嵌入式linux系统电源管理器,嵌入式Linux系统的动态电源管理技 - 嵌入式操作系统 - 电子发烧友网...

    嵌入式Linux系统的动态电源管理技术 通过用户层制定策略与内核提供管理功能交互,实时调整电源参数而同时满足系统实时应用的需求,允许电源管理参数在短时间的空闲或任务运行在低电源需求时,可以被频繁地.低 ...

  4. 基于ARM的嵌入式Linux移植真实体验(3)――操作系统

    基于ARM的嵌入式Linux移植真实体验(3)――操作系统 宋宝华[email]21cnbao@21cn.com[/email] 出处:dev.yesky.com 在笔者撰写的<C语言嵌入式系统 ...

  5. 嵌入式操作系统漫议:功能与特点

    何为操作系统? 在手机.PC等个人计算系统中,操作系统是不可或缺的存在,其重要性如同空气和水对人而言一样.随着手机的普及,安卓.iOS等操作系统也变得广为人知.其实个人计算系统的操作系统是由内核.各种 ...

  6. 嵌入式操作系统风云录:历史演进与物联网未来Chapter3 第3章

    Chapter3 第3章 开源的嵌入式操作系统 今天开源软件正大行其道,从服务器.云计算.桌面到手机和嵌入式设备,到处都可以见到开源软件和开源的操作系统.本章介绍对嵌入式系统发展具有重要影响的几种开源 ...

  7. 嵌入式操作系统风云录:历史演进与物联网未来第2章 Chapter2

    第2章 Chapter2 嵌入式操作系统的历史 20世纪70年代末,嵌入式操作系统商业产品开始在北美出现,20世纪90年代末嵌入式OS的数量呈井喷式增加,最鼎盛的时候有数百种之多,即使经过30多年的发 ...

  8. 学python与嵌入式操作系统_嵌入式操作系统那么多,哪一个适合你?

    原标题:嵌入式操作系统那么多,哪一个适合你? 物联网.人工智能的发展都离不开嵌入式系统,而嵌入式操作系统又是其中不容忽视的重要部分,工程师对其要求也由过去的简单易用上升到既要简单易用又安全可靠.嵌入式 ...

  9. 常见的嵌入式操作系统

    嵌入式操作系统与通用的操作相比较主要特点在于: 1.小内核,稳定可靠. 2.需要可装卸.可裁剪,以便能灵活应对各种不同的硬件平台. 3.面向应用,强实时性,可用于各种设备控制当中.   国际上常见的嵌 ...

最新文章

  1. 不会真有人国庆都不打王者吧?
  2. android中的5个布局方式
  3. LeetCode 147. 对链表进行插入排序(链表)
  4. Mybatis mapper代理Dao开发
  5. JAVA面试要点004_JAVA编程过程中为了性能优化_应该注意到的地方
  6. Entity Framework默认值字段不起作用解决方法
  7. android绘制过程3d图形,Android开发 OpenGL ES绘制3D 图形实例详解
  8. 代码实现 | 方程组的实现
  9. react native 抖音视频列表页
  10. kali linux 添加字体,在kali linux之下安装wps之后 报错字体缺失
  11. cesium显示帧率FPS控件
  12. 为Oracle 18c数据库打PSU补丁
  13. 动态菜单,根据登录用户权限返回不同菜单,登录完成跳转到不同的首页
  14. CCHTTP后端与diygw前端完美结合,开发前端后端-教程1
  15. Nginx官方文档(四十七)【ngx_stream_js_module|ngx_stream_keyval_module|ngx_stream_limit_conn_module】
  16. 大数据就业前景怎么样?hadoop工程师、数据挖掘、数据分析师薪资多少?
  17. mysql分隔符_在sql文件中设置MySQL分隔符
  18. linkkitapp log for debug
  19. SQLserver数据库教程
  20. 视图存储过程存储函数

热门文章

  1. U盘无法复制4G以上文件的解决策略
  2. HTML+CSS网页设计期末课程大作——体育篮球(5页面)大学生体育运动网页设计模板代码 校园篮球网页作业成品
  3. 人性弱点-如何赢得朋友和影响别人
  4. 与新手机的斗争: Motorola XT 531 手工Root 全过程
  5. 正则表达式和sed使用
  6. 赛门铁克诺顿推出全新Norton Security解决方案
  7. 还是花3-5秒存一下吧,以后不该吃的不能吃了
  8. crowd counting 综述分析
  9. lims实验室管理系统是什么?
  10. Proj1a 数据结构:双端队列| CS61B-Spring-2018