FreeRTOS + Fatfs + Emwin 的移植及使用
一、FreeRTOS 移植
1、获取源代码
进入官网 http://www.freertos.org/ 下载源码,下图 1-1 是从官网下载到的源码目
录结构截图
2、建立工程所需的 FreeRTOS 源码目录
⑴ 如图 1-2 是在图 1-1 中打开 FreeRTOS 目录的截图
图 1-1
⑵ 将图 1-2 中 Source 目录下的所有文件复制到工程源码目录下如图 1-3 所示
图 1-2
⑶ 打开图 1-3 中的 portable 目录,如下图 1-4 所示
图 1-3
图 1-4
⑷ 根据处理器类型和编译环境保留 Common 和 MemMang 目录,以及相应目录下
的源码,对于其他不需要的进行删除,如图 1-5 所示为删除之后的 portable 目录下的截
图
3、建立工程,本工程在 IAR 8.11.1 环境下建立
图 1-5
⑴ 如图 1-6 所示,在工程的跟路径下建立组 FREE-RTOS,并在组 FREE-RTOS 下建立
组 Inc 和 Src
⑵ 在工程中添加程序文件,如图 1-7 所示,将所有的.h 文件加入到组 Inc 下,将所
有的.c 文件加入到 Src 下
图 1-6
⑶ 对 FreeRTOS 进行裁剪,在本工程中裁剪掉了 Croutine 和 mpu_wrapper 功能,
图 1-7
如上图 1-7 所示将灰色程序文件的不加入到编译即可
4、配置及测试 FreeRTOS
⑴ 如 下 图 1-8 所 示 , 实 现 Systick 中 断 函 数 功 能 , 调 用 函 数 HAL_IncTick 和
xPortSysTickHandler
⑵ 如图 1-9 和图 1-10 所示,通过修改 FreeRTOSConfig.h 文件中的相关宏可对内核
图 1-8
进行配置
图 1-9
⑶ 在 main 函数中创建两个测试任务,并调用函数 vTaskStartScheduler 启动调度器
图 1-10
进行测试。
二、Fatfs 移植
1、获取源代码
进入官网 http://elm-chan.org/fsw/ff/00index_e.html 下载源码,如下图 2-1 是从官
网下载的源码目录结构截图
图 2-1
2、建立工程所需的 FATFS 源码目录
⑴ 如图 2-2 是在图 2-1 中打开 source 目录的截图,所有的程序源文件都存放在该
目录下
⑵ 将图 2-1 中的所有文件都拷贝到工程源码目录下
3、将 FATFS 加入到工程中
图 2-2
⑴ 如下图 2-3 所示,在工程的根路径下建立组 FATFS,以及在 FATFS 组目录下建立
组 Inc 和组 Src
⑵ 在工程中添加程序文件,如图 2-4 所示,将所有的.h 文件加入到组 Inc 下,将所
有的.c 文件加入到 Src 下
图 2-3
⑶ 如图 2-5 所示,在 FATFS 组下添加 disoio_ext.c 文件,用于实现 FATFS 的磁盘接
图 2-4
口函数
图 2-5
4、配置及测试 FATFS
⑴ 如下图 2-6 所示,在 diskio_ext.h 中定义 diskio 接口函数结构,并在 diskio_ext.c
文件中实现相应磁盘的驱动函数
⑵ 如下图 2-7 所示,在 diskio.c 文件中实现 U 盘和 Flash 的磁盘接口函数类
图 2-6
⑶ 如下图 2-8 所示,在相应的接口函数中调用步骤⑵中所定义的磁盘接口函数类
图 2-7
⑷ 在程序文件 ffconf.h 中对相关宏定义进行设置即可完成 FATFS 的配置
图 2-8
三、Emwin 移植
1、获取源代码
由于 Emwin 不是开源免费软件,在本工程中采用的是 stEmwin,在 st 官网上搜索
stemwin 即可下载,下图 3-1 为下载的源码目录结构截图
2、建立工程所需的 EMWIN 源码目录
⑴ 在工程的源码目录下建立如下图 3-2 所示的目录
图 3-1
⑵ 如下图 3-3 所示为打开图 3-1 中的 Libraies 目录后的截图
图 3-2
⑶ 如下图 3-4 所示为打开图 3-3 中的 STemwinLibrary532 目录后的截图
图 3-3
图 3-4
⑷ 将图 3-4 中 Config、inc、OS 目录下的所有文件拷贝到工程中的 EMWIN 源码目录下
的对应的 Config、inc、OS 目录下
⑸ 根据处理器信号、编译环境、是否运行实时操作系统选择图 3-4 中的 Lib 目录下的
对应文件拷贝到工程中的 EMWIN 源码目录下的对应 Lib 目录下,打开图 3-4 中的 Lib 目录后
的截图如下图所示
3、将 EMWIN 加入到工程中
⑴ 如下图 3-6 所示,在工程的根路径下建立组 EMWIN,以及在 EMWIN 组目录下建立
图 3-5
与 EMWIN 源码文件中所对应的目录的组
⑵ 如下图 3-7 所示,将 EMWIN 源码文件中所有文件分别的添加到工程中的对应的组中
图 3-6
⑶ 如上图 3-7 所示,其中 Font 组下是用于为系统提供外部字体。如下图所示,本工程
中支持从外部 Flash 读取字体和将字体固化到 ROM 中的方法提供 12*12 和 16*16 的中文字体
的功能
图 3-7
图 3-8
4、加入外部字库
⑴ 方法一: 字库文件存放在外部 Flash 中,从文件系统读取字库文件中的字库数据,
本方案不适用于串行 Flash,因为会导致窗口更新速度慢。因此,建议硬件使用并行 Flash
来实现。具体步骤如下:
第一步:如下图 3-9 所示,实现读取.xbf 文件数据的函数,本函数会根据 fontType 来读
取相应的字库文件中的字模数据
第二步:如下图 3-10 所示,调用上图 3-9 中的函数来实现读取不同字体数据的函数
图 3-9
第三步:如下图 3-11 所示,调用函数 GUI_XBF_CreateFont 创建相应的字体
图 3-10
第四步:如下图 3-12 所示,使用软件 fontCvST 创建相应的.xbf 字库文件,点击第四张
截图中菜单栏中的 File 下的 Save as 为.xbf 格式
图 3-11
图 3-12
第五步:将生成的.xbf 文件导入程序中所定义的文件系统中的相应路径下
⑵ 方法二: 本方法是将字库以.c 文件的形式固化到 MCU 的 ROM 中。但是考虑到字库的
大小,因此,只能将部分字的字模数据加入到.c 文件中。具体步骤如下:
第一步:如图 3-12 所示,使用软件 fontCvST 来生成相应的.c 文件,点击第四张截图
中菜单栏中的 File 下的 Save as 为.c 格式
第二步:如图 3-13 所示,复制.c 文件最下方的字体结构定义到工程中相应字体的.c
文件中
第三步:如下图 3-14 所示,在相应的存储字符信息的结构体数组中添加我们工程中所
图 3-13
需的字符的数据
图 3-14