使用eclipse搭建stm32f7xx环境的工程

2020-07-02来源: eefocus关键字:eclipse  stm32f7xx  环境  工程

由于工作需要,用eclipse搭建基于stm32f7xx芯片的工程环境。记录下安装和编译链接工程过程中遇到的问题,今后可以参考。同时也希望能给遇到类似问题的人一些参考。


Eclipse: 一款开源的集成开发环境(Integrated Development Environment),配合众多插件,可以用于Java应用程序开发、Android应用程序开发等。最精简的Eclipse只是一个框架,开发不同应用程序时需要安装对应的插件才能进行,不像微软的VS已经集成了众多的编译工具。


CDT:开发stm32应用程序主要使用的是C/C++,所以Eclipse需要安装CDT(C/C++ Development Tooling)插件。


GNUARM Eclipse: 包含一套Eclipse插件和用于跨平台嵌入式ARM程序开发工具的开源项目。有过stm32库函数开发经历的朋友可能知道,开发前我们都会找一套工程模板,包含了对各个库文件的引用,我们只需要关注核心的应用即可,换一个项目时我们就拷贝一份模板,重新进行开发。Eclipse装了GNU ARM Eclipse工具簇后,新建项目时我们只需要选择对应模板的项目,插件就会自动帮我们配置好工程。


Windowsbuild tools: 程序由代码变为可执行文件需要进过编译和链接的过程。Windows下的IDE无论是VisualStudio还是KEIL,编译工具都集成到IDE中了,且有着自己的一套管理项目文件的方式。Eclipse创建的工程会自带makefile文件,该文件的解析需要make工具。Linux下自带make工具,Windows下需要使用Windows build tools作为make工具使用。


GNUARM Embedded Toolchain: ARM交叉编译链,被编译的程序运行于基于ARM架构的处理器上。


1、搭建基于eclipse的开发环境需要安装的软件包:

安装编译工具makeecho等小工具包

eclipse C/C++版本

登陆www.eclipse.org 下载 C/C++ 的Eclipse IDE,免安装,解压即可用(前提是JAVA环境配置好了)

安装GNU ARM Eclipse插件。


打开eclipse,Help->Install New Software...->Add,在Location输入网址http://gnuarmeclipse.sourceforge.net/updates,name输入GNU ARM Eclipse Plug-ins。

选中上面的工具,跟着向导一路next,直到finish,这时eclipse需要restart一次.


创建一个基于STM32f7x系列的空工程

然后,选择工程参数时有几个选项,需要根据自己的工程需求选择。不知道怎么选就先用默认的。工程运行中发现问题再来看看是否这里有需要改的。

2、Eclipse中出现Type 'xxxx' could not be resolved的处理方法

①选择工程->Properties->C/C++ General->Indexer


②勾选Enable project specific settings


③勾选Index unused headers as C++ files


③勾选Index unused headers as C files


3、提示错误“③勾选Index unused headers as C++ files”

解决Eclipse semantic error


项目->properties->c/c++ General ->Code Analysis


(1) Potential Programming Problems


No return value


Unused return value


Assignment to iteself


(2)Coding Style 全部


(3)Syntax and semantic Errors全部


(4)Securirty Vulnerabilities 全部


以上内容全部勾去,如下图所示

4、编译(工具栏锤子按键)程序,rtthread中用到的.s文件出现下面这样的错误,

context_gcc.S:110: Error: selected processor does not support `vstmdbeq r1!,{d8-d15}' in Thumb mode

网上有好多说了一堆硬浮点软浮点的问题,都是建议改成软浮点,但是stm32F7芯片时支持硬浮点的,所以没用尝试改成软浮点。用了有人偶尔提到的方法:增加一个参数,ASFLAGS += -Wa,-mimplicit-it=thumb

编译错误可以解决,不知道会不会导致运行时出错。


另外选择用硬浮点的设置方法:

5、rtthread下面的libcpuarmcommondivsi3.S编译时报一堆这样的错误

divsi3.S:330: Error: Thumb does not support conditional execution

看了rrt-nano的移植相关的说明,common文件夹下的大概不是需要加入工程的,于是把common整个文件夹都不放入工程编译。

6、HAL库中的接口未定义报错

Description    Resource Path Location Type


undefined reference to `HAL_UART_Init'    main.c    /mkwsf7/src/app   line 305   C/C++ Problem


创建工程选择F7系列模板工程时,会自动吧stm32f7的hal库加入到工程,但是很多.c文件被斜杠划掉了,如下:

解决方法:


properties -> c/c++ general -> paths and symbols -> source location ->(找到为加入项目中的文件路径)edit filter 从目录中删除被屏蔽的文件来加入到工程,顺便通过add将不需要的文件屏蔽。


 


7、cmsis的头文件和src文件在创建工程是大多数没用加入,从keil文件中找到使用到的cmsis的头文件和src,替换原有工程的,原有工程已有的也替换,因为工程里的可能版本比较旧。旧版本会出现下面的报错。



 


8、出现一堆系统调用接口链接失败

类似这样的报错:

gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-mlibc_nano.a(lib_a-writer.o): In function `_write_r':


writer.c:(.text._write_r+0x10): undefined reference to `_write'


d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-mlibc_nano.a(lib_a-closer.o): In function `_close_r':


closer.c:(.text._close_r+0xc): undefined reference to `_close'


d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-mlibc_nano.a(lib_a-fstatr.o): In function `_fstat_r':


fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat'


d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-mlibc_nano.a(lib_a-isattyr.o): In function `_isatty_r':


isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty'


d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-mlibc_nano.a(lib_a-lseekr.o): In function `_lseek_r':


lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek'


d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-mlibc_nano.a(lib_a-readr.o): In function `_read_r':


readr.c:(.text._read_r+0x10): undefined reference to `_read'


 


在_syscall.c中是有实现的,只是宏定义屏蔽了,因为工程里勾选了-ffreestanding。

独立的环境是标准库可能不存在,程序启动不一定在main的环境。选项 -ffreestanding 指示编译器不是假设标准函数有其通常的定义。




 


默认情况下,GCC将作为托管实现的编译器,将 __ STDC_HOSTED __ 定义为1,并假设当使用ISO C函数的名称时,语义在标准中定义。要使其成为独立式环境的合适独立实现,请使用选项 -ffreestanding 。然后它将 __ STDC_HOSTED __ 定义为0,而不是假设标准库中的函数名的含义。


除去勾选后可以解决编译错误,但不知道执行时printf功能是否正常。


 


9、编译出现如下错误:

In file included from ../system/include/cmsis/arm_nnfunctions.h:163,


                 from ../src/tensorflow/lite/micro/kernels/cmsis-nn/add.cc:18:


../system/include/cmsis/arm_nnsupportfunctions.h:452:1: error: '__STATIC_FORCEINLINE' does not name a type


  452 | __STATIC_FORCEINLINE q31_t arm_nn_read_q15x2_ia(const q15_t **in_q15)


      | ^~~~~~~~~~~~~~~~~~~~


../system/include/cmsis/arm_nnsupportfunctions.h:467:1: error: '__STATIC_FORCEINLINE' does not name a type


  467 | __STATIC_FORCEINLINE q31_t arm_nn_read_q7x4_ia(const q7_t **in_q7)


      | ^~~~~~~~~~~~~~~~~~~~


../system/include/cmsis/arm_nnsupportfunctions.h:481:1: error: '__STATIC_FORCEINLINE' does not name a type


  481 | __STATIC_FORCEINLINE q31_t arm_nn_read_q15x2(const q15_t *in_q15)


      | ^~~~~~~~~~~~~~~~~~~~


../system/include/cmsis/arm_nnsupportfunctions.h:494:1: error: '__STATIC_FORCEINLINE' does not name a type


  494 | __STATIC_FORCEINLINE q31_t arm_nn_read_q7x4(const q7_t *in_q7)


 


大概时工程自动生成的cmsis代码太旧导致。替换成新版本的cmsis的代码。


 


10、../system/src/diag/trace_impl.c:32:10: fatal error: cmsis_device.h: No such file or directory

   32 | #include "cmsis_device.h"


      |          ^~~~~~~~~~~~~~~~


compilation terminated.


system/src/diag/subdir.mk:21: recipe for target 'system/src/diag/trace_impl.o' failed


make: *** [system/src/diag/trace_impl.o] Error 1


新版本没用这个头文件了,其本来的定义是包含了#include "stm32f7xx.h",因此直接替换本处代码为#include "stm32f7xx.h"即可。

————————————————

版权声明:本文为CSDN博主「Meredith_Leaf」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Meredith_Leaf/article/details/106189724


关键字:eclipse  stm32f7xx  环境  工程 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501954.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:使用eclipse搭建stm32f7xx环境的工程
下一篇:Keil MDK5项目建立步骤及可能出现的错误解决方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

使用eclipse搭建stm32f7xx环境的工程
由于工作需要,用eclipse搭建基于stm32f7xx芯片的工程环境。记录下安装和编译链接工程过程中遇到的问题,今后可以参考。同时也希望能给遇到类似问题的人一些参考。Eclipse: 一款开源的集成开发环境(Integrated Development Environment),配合众多插件,可以用于Java应用程序开发、Android应用程序开发等。最精简的Eclipse只是一个框架,开发不同应用程序时需要安装对应的插件才能进行,不像微软的VS已经集成了众多的编译工具。CDT:开发stm32应用程序主要使用的是C/C++,所以Eclipse需要安装CDT(C/C++ Development Tooling)插件。GNUARM
发表于 2020-07-02
使用eclipse搭建<font color='red'>stm32f7xx</font>环境的工程
Ubuntu下安装Stm32的Eclipse的开发环境(1)
在Ubuntu下安装Stm32的Eclipse的开发环境(1)安装过程中发现了 然后我又在网上Ubuntu下安装Stm32的Eclipse的开发环境(2)的文章执行 apt-get install openjdk-6-jre-headless 这些这个命令还是安装不成功然后我就在网上找了一个下更新源的方法 很明显没有安装成功 但是能识别找到这个软件包更新方法 https://blog.51cto.com/wellfinger/303748我转载过了 Ubuntu下安装Stm32的Eclipse安装——ubuntu更新源(含9.10和10.04)其中 sudo apt-get
发表于 2020-07-02
Ubuntu下安装Stm32的<font color='red'>Eclipse</font>的开发环境(1)
在ubuntu下利用eclipse搭建stm32开发环境和st-link调试
一、下载eclipse:我们选择的工具为Eclipse IDE for C/C++ Developers,官网下载地址在https://www.eclipse.org/downloads/packages/release/helios/sr2/eclipse-ide-cc-developers若网址打不开或下载速度慢,可选用百度云链接:https://pan.baidu.com/s/10bMkwr1hyL0FDf-NXaruAA解压安装包并复制到自己安装的安装目录。二、下载gcc-arm-none-eabi:在终端输入sudo apt-get install gcc-arm-none-eabi 三、下载st-link驱动
发表于 2020-07-02
在ubuntu下利用<font color='red'>eclipse</font>搭建stm32开发环境和st-link调试
STM32高级开发(15)-使用eclipse开发STM32
在最起初的时候,我刚刚接触linux上单片机的开发,最喜欢的就是 eclipse + arm-plug-in + arm-none-eabi 的开发环境,因为这是在Linux上最接近于windows下keil、IAR等IDE的开发方式,然而那是由于对eclipse亦或是makefile等编译过程中的工具的不甚了解,很多时候会遇到一些莫名的错误,也导致了那是觉得这样的环境很鬼畜,现在看来多是一些很浅显的问题,直到最近我再一次的尝试了eclipse开发环境的搭建和使用,我才很顺利的完成了程序的配置。现在也把这个方法推荐给大家,不过在使用这个方式前,还是建议大家先把之前的文章内容看懂了,否则很多时候遇到问题都会不知道怎么解决。安装
发表于 2020-07-02
STM32高级开发(15)-使用<font color='red'>eclipse</font>开发STM32
ARM集成开发环境eclipse的安装(for Linux)
环境:ubuntu 16.04 64bit1、安装JDK下载:jdk-8u221-linux-x64.tartar -zxvf 文件名解压移动到/opt/目录下,并且更改目录名为jdk。加入环境变量vi /root/.bashrcexport PATH=$PATH:/opt/jdk/bin执行source ~/.bashrc 使环境变量生效2、安装eclipse下载eclipse-cpp-helios-SR2-linux-gtk.tat.gz点击下载 。启动eclipsetar -zxvf 文件名解压移动到/opt/目录下,并且更改目录名为eclipse。加入环境变量vi /root/.bashrcexport PATH
发表于 2020-06-30
ARM集成开发环境<font color='red'>eclipse</font>的安装(for Linux)
基于IAR环境下STM32F103单片机读取BME280程序
自己编写的基于IAR环境下STM32F103单片机读取BME280程序,没有太多的寄存器操作,简单易懂,可以直接调用,上电后只要对IO口初始化,调用函数Bme_ReadDigValue()读取校准寄存器参数并保存,再调用函数Bme_Init()初始化之后就可以用函数Bme_ReadStatus()读取传感器状态判断是否读取数据了,也可不判断传感器状态直接读取数据,读取数据直接调用函数ReadBme280()。单片机源程序:void ReadBme280(){        u32 value_ad;        double var1; 
发表于 2020-07-25
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved