×

FreeRTOS学习之旅(二) -----移植stm32

抢沙发发表评论

如何移植stm32

image.png

移植方法有两种:一种是直接利用STMCobeMX来直接配置;一种是从FreeRTOS的官网上直接下载

将FreeRTOS移植到stm32上,需要的步骤是:

  1. 首先去官网下载FreeRTOS的源码,当然也可以去一个代码管理下载

    1. 下载完的文件如下所示

    image.png

    其中Demo是官方给的例程,适配一些厂家的样板;License则是一些许可证,产品化的话需要看看;Source则是移植所以用到的源码

  2. Demo文件移植FreeRTOSConfig.h

    这个文件中需要移植一个头文件,这个是移植必须的,选择适合自己板子的

    image.png

    例如,我采用的就是Stm32F103 用的软件是keil,点开,copy一下对应的FreeRTOSConfig.h

    image.png

    这个文件最后可以放在main所在的组里,其他地方也可以。

  3. 主要是看Source文件夹里的文件

    1. 文件内容如下:

      image.png

      其中的include是要用到的头文件,portable是FreeRTOS连接底层硬件所需要的文件,不同的硬件对应不同的文件,其他的C文件到时候整合在一起

    2. portable文件如下:

      image.png

      我用的是keil5,所以需要这些我文件,其中的RVDS文件夹中包含了不同架构的MCU;MemMang文件夹则是内存管理,对内存进行一定的操作的

      1. RVDS文件夹

        image.png

        不同的架构选择不同的文件内容,里面的port.c和portmacro.h(一些变量的重定义)这两个文件都是需要的;例如是stm32f103c8t6,这个内核是CM3,就选这个文件夹

      2. MemMang文件夹

        image.png

        这几个文件只要选择一个就可以了,看自己的需求,具体的不同如下:

        1. heap_1.c    : 只负责内存的申请,不负责释放

        2. heap_2.c    : 可以申请内存,可以释放内存,但是不能合并相邻的空闲内存块

        3. heap_3.c    : 对c语言的free(释放内存)和malloc(申请内存)方法进行了简单的封装

        4. heap_4.c    : 可以申请内存,可以释放内存,可以合并相邻的空闲内存块

        5. heap_5.c    : 可以申请内存,可以释放内存,可以跨内存区操作内存

        适应场景:

            A:不需要删除任务、安全性要求高、简单重复执行的

            B:由于不可以合并空闲内存块,导致频繁的申请与释放将会导致内存碎片化,所以适合不需要频繁操作内存的

            C:使用的还是C语言的free和malloc方法,只是简单的进行了封装

            D:适合频繁操作内存的,例如任务、队列、信号量

            E:需要管理不连续的内存,例如接入外部的ram

            参考链接:不同的内存管理

  4. 正式开始整合文件工程

    1. 整合文件

      创建一个文件夹FreeRTOS,文件夹中包括了三个文件夹,分别是Rtos_inclulde、Rtos_port、Rtos_src,如下

      image.png

      Rtos_inclulde中是前文中的Source文件中的include文件、Rtos_port是前文中的port文件夹的挑选、Rtos_src则是前文中的C文件的整合

      FreeRTOSConfig.h是从Demo文件夹中移植的

    2. 具体的文件夹内的内容如下:

      1. Rtos_inclulde文件夹

        image.png

      2. Rtos_port文件夹内容包括两个文件夹(RVDS 、MemMang)

        image.png

        image.png

        注:这里到时候可以在工程中选择自己内核对应的文件进行编译,当然也可以只拷贝自己需要的那个文件夹内容,可以参考一下文件结构路径

      3. Rtos_src文件夹

        image.png


  5. 添加到具体的工程中

    1. 需要先准备一个工程,然后往工程中添加FreeRTOS这个整合文件夹,如下图所示

      此时是将FreeRTOS文件夹整合到一个串口打印的工程中

      image.png

    2. 接下去要做的就是将这个文件夹里的东西添加到工程中

      image.png

      然后将对应的文件夹里的东西加入,最终应有如下图所示文件

      image.png


    3. 添加路径

      image.png

      点击“OK”保存

  6. 修改文件

    1. 打开FreeRTOSConfig.h文件,添加三个定义

      #define xPortPendSVHandler PendSV_Handler
      #define vPortSVCHandler SVC_Handler
      #define xPortSysTickHandler SysTick_Handler


      image.png

    2. 屏蔽Stm32f10x_it.c文件中的PendSV_Handler、SysTick_Handler、SVC_Handler这个三个中断,因为在FreeRTOS中已经帮我们重写了这三个中断服务

            

    image.png

  7. 到此,移植的部分就结束了,接下来测试一下

    1.  主函数

      image.png

    2. 编译


      image.png

    3. 烧录运行,观察结果


      image.png


#好好学习!

群贤毕至

访客