Eclipse 4Diac 网站上有介绍将4diac的Forte 移植到freeRTOS 的简单介绍,
https://www.eclipse.org/4diac/en_help.php?helppage=html/installation/freeRTOSLwIP.html
但是网络上并没有如何将forte 移植到STM32F上的详细说明。我成功地将4diac 移植到了nucleo STM32H743 板上。分享我的方法:
开发平台
在ubuntu OS 下开发,毕竟make,cmake gcc这些工具在linux OS 上感觉好一点。
用到的工具
cmake-gui
ST 公司的trueStudio 开发工具。它是基于eclipse 开发环境的,与eclipse 相容。
ST公司的STM32 CubeMx 工具
过程
下载forte 的源码,我使用的是forte-incubation_1.11.0
在stm32 cubeMX下配置一个nucleo 74H743 的项目,上面包含一个freeRTOS和lwip 中间件,产生trueStudio的项目代码
在 cmake 上Where is the source code 指向forte-incubation_1.11.0的目录。
在forte-incubation_1.11.0的目录中添加一个文件夹build,将CMake中的 Where to build the binaries 指向build。
按Configure 键,选择C++和C的交叉编译工具,这时要使用trueStudio 的工具。我的truestudo目录是在/opt/下的。
/opt/Atollic_TrueSTUDIO_for_STM32_x86_64_9.3.0/ARMTools/bin/
C++ 选择了/opt/Atollic_TrueSTUDIO_for_STM32_x86_64_9.3.0/ARMTools/bin/arm-atollic-eabi-c++
C 选择了/opt/Atollic_TrueSTUDIO_for_STM32_x86_64_9.3.0/ARMTools/bin/arm-atollic-eabi-gcc
主要的难点
编译过程中的主要难点是如何将forte 和stm32的项目结合在一起编译。在4diac的论坛上有编译成功的人提供了一个思路。就是将forte 编译成为一个静态库,然后结合到STM32F的项目中。我也决定采取这中方法。
配置cmake 的forte部分
1 FORTE ARCHITECTURE 选择FreeRTOSLwip
2 勾选FORTE_BUILD_STATIC_LIBRARY,去掉原来的FORTE_BUILD_EXCUTABLE
3 重要的地方是下面的FORTE_FreeRTOSLwIP_INCLUDES 要将stm32项目中关于freeRTOS和LwIP的Include目录包含进去。但是STM32项目的目录结构好复制的样子,搞了一个晚上都没有搞定。第二天早上,我决定将STM32 的某些include 单独拷贝到一个目录中。供编译forte时使用。
4 还有几点
1 Inc 中的main.h 要去掉#include "stm32f4xx.h"
2 按照Cmake的提示。
freeRTOS with LwIP arch needs the following flags to be defined (please do it in lwipopts.h):
#define LWIP_COMPAT_SOCKETS 1
#define LWIP_IGMP 1 //to use IP_ADD_MEMBERSHIP
#define LWIP_TIMEVAL_PRIVATE 0
在lwipopts.h 中添加了这三个#define
5 在forte-incubation_1.11.0/build 的目录下进入命令行程序:
>make
终于成功了
libforte-static.a 就是我们想要的东东。