FreeRTOS 移植

不问归期 提交于 2021-02-10 08:01:23

首先准备好一个简单的裸机工程模板,工程模板的制作就不做讲解了,这里的重点是教大家移植FreeRTOS系统。:

 
 


    准备好工程模板后,就可以开始移植了。首先要做的就是将所有需要的源码文件放到工程模板里面。下面分六步和大家进行说明,当然,不限制必须使用下面的方法添加源码到工程,只要将需要的文件添加到工程模板即可。


第1步:从网址https://sourceforge.net/projects/freertos/files/FreeRTOS/V8.2.3/ 下载V8.2.3版本,这个是8.X系列里面最高版本了,9.0版本还处于测试阶段,我们暂不使用。

 
 


FreeRTOSV8.2.3.zip和FreeRTOSV8.2.3.exe内容是一样的,只是后缀为exe的压缩率更高些。下载后解压出来。


第2步:在工程模板创建FreeRTOS文件夹

 
 


第3步:添加源码文件到相应文件夹
(1)将FreeRTOSV8.2.3软件包中路径:

    FreeRTOSV8.2.3\FreeRTOS\Source里面如下所有文件

 
 


    复制到刚刚创建的FreeRTOS文件夹下。
(2)文件夹User中还需要添加如下文件:

 


    文件FreeRTOSConfig.h文件在FreeRTOSV8.2.3软件包中的中的路径:
    FreeRTOSV8.2.3\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK,其实就是官方整理好的配置文件(官方没有F429的例子,使用F407的即可,配置是相同的)。


第4步:将源码文件添加到MDK的工程项目中
    添加后的效果如下:

 
 


    其中heap_4.c文件路径:FreeRTOS\Source\portable\MemMang
    port.c和portmacro.h文件的路径:FreeRTOS\Source\portable\RVDS\ARM_CM4F,由于STM32F429是M4内核的,所以移植文件也要添加M4内核的。


第5步:新创建一个includes.h文件,将所有的头文件都集中到这个头文件下。
    这样做的好处是引用头文件的时候,只添加这个头文件就可以了。includes.h文件放在了User文件夹中。然后再将这个文件也添加到MDK工程项目中(将.h文件添加到工程的好处是方便查看和修改)

 


    Includes.h文件中的内容如下:

 

 1 /*
 2 *********************************************************************************************************
 3 *
 4 *    模块名称 : 头文件汇总
 5 *    文件名称 : includes.h
 6 *    版    本 : V1.0
 7 *    说    明 : 当前使用头文件汇总
 8 *
 9 *********************************************************************************************************
10 */
11 #ifndef  __INCLUDES_H__
12 #define  __INCLUDES_H__
13 /*
14 *********************************************************************************************************
15 *                                         标准库
16 *********************************************************************************************************
17 */
18 #include  stdarg.h
19 #include  stdio.h
20 #include  stdlib.h
21 #include  math.h
22 /*
23 *********************************************************************************************************
24 *                                         其它库
25 *********************************************************************************************************
26 */
27 /*
28 *********************************************************************************************************
29 *                                           OS
30 *********************************************************************************************************
31 */
32 #include FreeRTOS.h
33 #include task.h
34 #include queue.h
35 #include croutine.h
36 /*
37 *********************************************************************************************************
38 *                                           宏定义
39 *********************************************************************************************************
40 */
41 /*
42 *********************************************************************************************************
43 *                                        APP / BSP
44 *********************************************************************************************************
45 */
46 #include  bsp.h
47 #endif

 

 

 

 

第6步:添加相应的头文件路径,在原来工程模板的基础上新添加的两个路径:

 
 


第7步:最后一步,同时也是最重要的一步,修改FreeRTOSConfig.h配置文件(用户根据自己的配置进行修改,不修改也是没问题的我们这里进行修改主要是为了方便初学者学习),主要修改了以下两个方面:
(1)添加宏定义__NVIC_PRIO_BITS,STM32系列产品优先级仅使用4位。
(2)修改优先级相关的几个宏定义,具体修改了哪个可以对比原始文件查看。
    修改后在这个文件的末尾加上Systick,PendSV和SVC中断函数的宏定义,目的是将FreeRTOS移植文件port.c文件里面的中断服务程序映射到CMSIS定义的标准名称,这样就不需要用户去修改工程启动代码中这几个中断的名字了,很方便就实现了两个函数的统一。(移植过uCOS-II或者III的用户,对于这个问题估计深有体会,因为uCOS要修改启动文件,其实采用这里的方式更方便

  1. #define vPortSVCHandler     SVC_Handler
  2. #define xPortPendSVHandler  PendSV_Handler
  3. #define xPortSysTickHandler SysTick_Handler

其中vPortSVCHandler,xPortPendSVHandler和xPortSysTickHandler是在port.c文件里面定义的。SVC_Handler,PendSV_Handler和SysTick_Handler在startup_stm32f10x_hd.s文件里面进行了定义。
下面是FreeRTOSConfig.h配置文件的完整内容:

 

    至此,FreeRTOS的移植工作就完成了,剩下就是系统配置和应用了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!