本帖最后由 qwerghf 于 2016-9-6 08:24 编辑
之前一直忙,只给大家带来FreeRTOS移植的模板,没有给出详细步骤,多谢@EEWORLD-nmg ,在此我给大家带来详细的移植步骤,方便大家自己移植,下面介绍如何给UFUN移植FreeRTOS。
本次我采用的是FreeRTOS版本8.2.3。官网一直在更新。大家可以到官网下载最新的。我下面附件也给出源码包。 第一步:从官网下载FreeRTOS或者下载附件。 第二步:解压FreeRTOS压缩包。在UFUN的工程路径下建立FreeRTOS文件夹。 第三部:将源码文件到相应文件夹 (1) 将 FreeRTOSV8.2.3 软件包中路径:FreeRTOSV8.2.3\FreeRTOS\Source里面如下所有文件复制到刚刚创建的 FreeRTOS 文件夹下,如1.png。 file:///C:/Users/lqy/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg (2)文件夹 User 中还需要添加FreeRTOSConfig文件。 该文件 FreeRTOSConfig.h 文件在 FreeRTOSV8.2.3 软件包中的中的路径:
FreeRTOSV8.2.3\FreeRTOS\Demo\CORTEX_STM32F103_Keil。 第四步:将FreeRTOS源码文件添加到 MDK 的工程项目中,添加后的效果如下:2.png file:///C:/Users/lqy/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 其中 heap_4.c 文件路径: FreeRTOS\Source\portable\MemMang
port.c 和 portmacro.h 文件的路径:FreeRTOS\Source\portable\RVDS\ARM_CM3,由于
UFUN是采用STM32F103,是 M3 内核的,所以移植文件我们要添加 M3 内核的。 第五步:我们新创建一个 includes.h 文件,将所有的头文件都集中到这个头文件下。这样做的好处就是在我们引用头文件的时候,我们只添加这个头文件就可以了,方便程序编写。我们可以把 includes.h文件放在User文件夹中。当然也将这个文件也添加到 MDK 工程项目中,这样是为了是方便我们查看和修改。 第六步:添加相应的头文件路径,在原来工程模板的基础上新添加的两个路径:如3.png file:///C:/Users/lqy/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 第七步:最后一步,同时也是最重要的一步,修改 FreeRTOSConfig.h 配置文件(用户根据自己的配置进行修改,当然我们也可以不修改,也是没问题的,我们做以下修改: (1)添加宏定义__NVIC_PRIO_BITS,因为STM32 系列产品优先级仅使用 4 位。
(2)修改优先级相关的几个宏定义,具体修改了哪个可以对比原文件查看。
修改后在这个文件的末尾加上 Systick,PendSV 和 SVC 中断函数的宏定义,目的是将 FreeRTOS 移植文件 port.c 文件里面的中断服务程序映射到 CMSIS 定义的标准名称,这样就不需要我们去修改工程启动代码中这几个中断的名字,可以很方便就实现了两个函数的统一。(之前我移植过 uCOS-II 和FreeRTOS,都是修改启动文件,采用这里的方式更方便,我们不需要处理启动文件)。具体如下所示。 /* Definitions that map the FreeRTOS portinterrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler 根据以上操作,FreeRTOS 的移植工作就完成了,剩下就是系统配置和应用。其中系统配置看FreeRTOSConfig.h。建议初学者可以直接拿我的FreeRTOSConfig.h拷贝到你自己的工程中就可以了。
|