参考链接

CubeMX+VSCode+Ozone的STM32开发工作流(三)利用Ozone进行可视化调试和代码分析_ozone jlink-CSDN博客

一、搭建Eclipse gcc mcu开发环境_ecplice 配置mcu-CSDN博客

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_eclipse ide-CSDN博客

Ozone使用介绍-基础功能 - 开发环境 - 硬汉嵌入式论坛 - Powered by Discuz!

Eclipse汉化教程(官方汉化包,傻瓜式操作,附带中英文快捷切换方式以及常见问题解决方案)-CSDN博客

Eclipse

更为详细的使用教程可以参考深入理解工具链-基于Eclipse的嵌入式IDE快速入门_eclipse ide-CSDN博客

所需文件

  1. 首先安装eclipse,从Eclipse IDE for Embedded C/C++ Developers Eclipse Packages下载压缩包,解压即可,找到Eclipse双击即可打开。
  2. 使用eclipse就需要使用交叉编译器,从Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer上下载gcc-arm-none-eabi编译器,该编译器用于嵌入式gcc编译。
  3. 需要下载厂商的Pack文件
  4. 最后要从Releases | xPack Windows Build Tools上下载build工具包。

以上是全部工具包。

[!note]

还需要厂商的芯片包,需要结合自己的工程去下载。

环境配置

在搭建Eclipse之前需要先了解工程架构:

  • 工作空间
    • .metadata文件夹:用于eclipse识别是否是eclipse的文件夹
    • 项目文件夹
      • .setting文件夹:用于保存项目的相关配置
      • 项目架构文件夹:ASW、BSW等自己的工程架构
      • .cproject
      • .project

为了减少工作量,我们可以給eclipse配置全局环境变量。打开Tool Bar中的Window > Preference,配置全局变量:

  1. 配置编译器的地址(arm-none-eabi)

    配置编译器地址

  2. 配置build工具地址:在之前下载的build工具就用在这

    配置build工具地址

  3. 配置JLink或其他调试工具地址(可选):如果使用Ozone,就不需要配置这个选项

    配置JLink工具地址

    [!tip]

    需要注意的是,这里的JLink地址使用的CL的地址,即JLinkGDBServerCL.exe

  4. 配置MCU芯片包地址:这一步需要下载芯片厂商的相关的Pack文件

    配置芯片包地址

    可以点击Repositories页面,如果展示了包的内容,说明导入成功,否则为导入失败

    导入的Pack包

    该包是以下的文件结构:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    ├─.cache
    └─Keil
    ├─FM33A0XXEV_DFP
    │ └─0.0.4
    │ ├─Device
    │ │ ├─Include
    │ │ ├─IncludeIAR
    │ │ └─Source
    │ │ ├─ARM
    │ │ ├─GCC
    │ │ └─IAR
    │ ├─Flash
    │ └─SVD
    ├─FM33L0XX_DFP
    │ └─0.1.4
    │ ├─Device
    │ │ ├─Include
    │ │ └─Source
    │ │ └─GCC
    │ │ └─linker
    │ ├─Drivers
    │ ├─Flash
    │ └─SVD
    ├─FM33LC0XX_DFP
    │ └─3.0.1
    │ ├─Device
    │ │ ├─Include
    │ │ └─Source
    │ │ └─GCC
    │ │ └─linker
    │ ├─Flash
    │ │ └─备份
    │ └─SVD
    └─FM33LG0XX_DFP
    └─2.0.0
    ├─Device
    │ ├─Include
    │ └─Source
    │ └─GCC
    │ └─linker
    ├─Flash
    └─SVD


    [!tip]

    注意,该目录下有.repos.xml文件,如果有这个文件,说明你的路径选择的是对的

新建工程

双击打开eclipse时,需要选择一个路径作为工作空间。工作空间是你要建的项目的根路径,之后的引入头文件路径或者链接脚本等等需要路径的地方都是使用的该路径。

进入之后新建一个工程,依次点击*==file>new>C/C++ project==*

  1. 选择构建系统:

    Eclipse工程类型

    从上图可以看出共有以下几种工程管理方式:

    1. CDT Managed Build(C/C++ Managed Build):依赖Eclipse CDT(C/C++ Development Tools)自带的托管构建系统,自动生成Makefile或构建脚本,无需手动编写。
    2. CMake相关
      1. CMake Project:生成带Hello World可执行程序的CMake项目,自动创建基础的CMakeLists.txt(CMake配置文件)和示例代码,开箱即用。
      2. Empty or Existing CMake Project:创建空的CMake项目(无初始文件),或用于导入已有代码并生成CMake配置。
    3. Meson相关
      1. Meson Project:类似CMake Project,生成带Hello World可执行程序的Meson项目,自动创建meson.build(Meson配置文件)和示例代码。
      2. Empty or Existing Meson Project:创建空的Meson项目,或用于导入已有代码生成Meson配置。
    4. Makefile Project:基于CDT的新Core Build System,支持创建带可选Hello World示例的Makefile项目,需手动维护Makefile(或自动生成基础版本)。
  2. 配置项目类型、工具链及工程名,可以通过Location来选择将该项目建在哪,但是需要注意的是你将项目建在哪,你的项目文件应该在这个项目文件夹下,

    项目类型及工具链

    [!tip]

    注意,这里的工具链需要选择Arm-CC,也就是嵌入式的GCC

  3. 配置需要部署的模式,debug是调试模式,release是发布模式。

    部署模式

  4. 配置工具链的位置

    配置工具链

    [!tip]

    一般来说,在安装好gcc之后会自动设置为环境变量,在安装的时候可以注意一下是否勾选了增加环境变量的选项。

此时workspace文件夹的结构为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
├─.metadata
│ ├─.mylyn
│ │ └─contexts
│ └─.plugins
│ ├─org.eclipse.cdt.core
│ ├─org.eclipse.cdt.flatpak.launcher
│ ├─org.eclipse.cdt.make.core
│ ├─org.eclipse.cdt.managedbuilder.core
│ ├─org.eclipse.cdt.ui
│ ├─org.eclipse.core.resources
│ │ ├─.projects
│ │ │ ├─.org.eclipse.egit.core.cmp
│ │ │ └─Application_ForEclipse
│ │ │ └─.indexes
│ │ ├─.root
│ │ │ └─.indexes
│ │ └─.safetable
│ ├─org.eclipse.core.runtime
│ │ └─.settings
│ ├─org.eclipse.debug.core
│ ├─org.eclipse.debug.ui
│ ├─org.eclipse.e4.workbench
│ ├─org.eclipse.egit.core
│ │ └─.org.eclipse.egit.core.cmp
│ │ └─.settings
│ ├─org.eclipse.mylyn.context.core
│ │ └─contexts
│ ├─org.eclipse.mylyn.github.ui
│ ├─org.eclipse.mylyn.tasks.ui
│ ├─org.eclipse.oomph.setup
│ ├─org.eclipse.oomph.setup.ui
│ ├─org.eclipse.swt
│ │ └─EBWebView
│ │ ├─AutoLaunchProtocolsComponent
│ │ │ └─1.0.0.10
│ │ ├─BrowserMetrics
│ │ ├─CertificateRevocation
│ │ │ └─6498.2025.9.4
│ │ ├─component_crx_cache
│ │ ├─Crashpad
│ │ │ ├─attachments
│ │ │ └─reports
│ │ ├─Default
│ │ │ ├─AutofillStrikeDatabase
│ │ │ ├─blob_storage
│ │ │ │ └─49282d65-b219-4fde-8d70-fed122800af6
│ │ │ ├─BudgetDatabase
│ │ │ ├─Cache
│ │ │ │ └─Cache_Data
│ │ │ ├─ClientCertificates
│ │ │ ├─Code Cache
│ │ │ │ ├─js
│ │ │ │ │ └─index-dir
│ │ │ │ └─wasm
│ │ │ │ └─index-dir
│ │ │ ├─commerce_subscription_db
│ │ │ ├─DawnGraphiteCache
│ │ │ ├─DawnWebGPUCache
│ │ │ ├─discounts_db
│ │ │ ├─Download Service
│ │ │ │ ├─EntryDB
│ │ │ │ └─Files
│ │ │ ├─EdgeEDrop
│ │ │ ├─EdgeHubAppUsage
│ │ │ ├─Extension Rules
│ │ │ ├─Extension Scripts
│ │ │ ├─Extension State
│ │ │ ├─Feature Engagement Tracker
│ │ │ │ ├─AvailabilityDB
│ │ │ │ └─EventDB
│ │ │ ├─GPUCache
│ │ │ ├─Local Storage
│ │ │ │ └─leveldb
│ │ │ ├─Network
│ │ │ ├─optimization_guide_hint_cache_store
│ │ │ ├─parcel_tracking_db
│ │ │ ├─PersistentOriginTrials
│ │ │ ├─Safe Browsing Network
│ │ │ ├─Session Storage
│ │ │ ├─Sessions
│ │ │ ├─Shared Dictionary
│ │ │ │ └─cache
│ │ │ │ └─index-dir
│ │ │ ├─shared_proto_db
│ │ │ │ └─metadata
│ │ │ ├─Site Characteristics Database
│ │ │ └─Sync Data
│ │ │ └─LevelDB
│ │ ├─GraphiteDawnCache
│ │ ├─GrShaderCache
│ │ ├─hyphen-data
│ │ │ └─120.0.6050.0
│ │ │ └─_metadata
│ │ ├─OriginTrials
│ │ ├─PKIMetadata
│ │ ├─ShaderCache
│ │ ├─SmartScreen
│ │ │ ├─local
│ │ │ └─RemoteData
│ │ ├─Speech Recognition
│ │ ├─Subresource Filter
│ │ │ └─Unindexed Rules
│ │ ├─Trust Protection Lists
│ │ ├─TrustTokenKeyCommitments
│ │ ├─WidevineCdm
│ │ └─ZxcvbnData
│ ├─org.eclipse.tm.terminal.view.ui
│ ├─org.eclipse.tracecompass.tmf.analysis.xml.core
│ │ └─xml_files
│ ├─org.eclipse.tracecompass.tmf.core
│ ├─org.eclipse.ui.intro
│ └─org.eclipse.ui.workbench
└─Application_ForEclipse
└─.settings

在Eclipse种左侧栏已经可以看到相关文件了,如下图。如果想要往工程里加文件,只需要直接在文件系统中工程下增加文件,然后按F5刷新即可更新,Eclipse是直接读取文件系统中的文件,和IAR和Keil不一样,不需要增加源文件。

Eclipse视角下文件夹结构

[!tip]

由于Eclipse种文件夹结构是和系统的文件夹强相关的,所以不需要的文件不能放在系统文件夹中,如放置不同平台(IAR、KEIL)的汇编文件、链接文件等。

工程配置

接下来需要按照自己的项目进行配置,在你的项目上右键,依次点击*==Properties>C/C++ Build>Settings==*

  1. 配置目标处理器、指令集、大小端等。

    配置处理器

    这里需要根据芯片本身的属性来配,一般芯片手册会给出相关信息

  2. 配置优化等级

    配置优化等级

  3. 配置调试等级

    配置调试等级

  4. 下面就要开始配置工程所需要的文件了,在配置这些之前如果了解Makefile会能更快的配置。

    配置工程文件

    上图配置项依次是

    • 汇编参数配置项
    • 编译参数配置项
    • 链接参数配置项
    • 映像参数配置项
    • 打印参数配置项

    当然,你可以点击最上层的标签页查看最终的编译指令

    编译指令

  5. 增加宏定义,使用-D命令,在右侧添加需要使用的宏

    增加宏定义

    [!tip]

    实际上是使用了Make file来组织的,所以感兴趣可以看看makefile的语法。

  6. 增加头文件路径

    增加头文件路径

    [!note]

    注意:在涉及选择文件路径的时候都要使用WorkSpace,也就是相对路径,这样才能方便移植。

  7. 增加链接脚本

    增加链接脚本

  8. 增加库

    增加库

    [!note]

    注意:使用gcc时,库文件是以a结尾的,上面的图片中的库文件名为libfr800x_stack.a,在-l后只能输入文字,输入的文字需要将前缀lib和后缀a给去掉,在下面的-L中需要加上库文件的搜索目录

  9. 改变工具链,在这里可以改变命令,如Archive、C compile、Build Command等

    改变工具链

    这里的前缀、后缀等,可以在命令行中能看见,这样你就可以知道前缀和后缀的作用了,当然,你也可以改变构建工具、反汇编工具等等。

  10. 选择芯片(这里的选择的芯片不会用于构建,是用于调试的,所以如果不适用Eclipse的调试就可以不用管)

    选择芯片

    [!important]

    如果这里不显示芯片,需要按照以下步骤检查:

    1. 检查设置全局环境变量的CMSIS路径设置是否正确
      1. 如果确定包是正确的,则重启Eclipse
      2. 如果重启还是没有,那么可以使用:
        1. 关闭eclipse,然后找到eclipse的安装路径
        2. 在该路径下打开cmd
        3. 执行eclipse.exe -clean即可找到
  11. 当然,也可以即生成hex文件和bin文件,在Build step中写入以下命令,两条指令之间用分开(下图中我忘了加了)。

    1
    2
    arm-none-eabi-objcopy -O binary "${ProjName}.elf" "${ProjName}.bin"
    arm-none-eabi-objcopy -O ihex "${ProjName}.elf" "${ProjName}.hex"

    构建hex和bin文件

    当然,你可以自己选择在build之前或之后执行什么命令。

[!warning]

注意:以上步骤均需要按照需求来配,请不要参照图片配置‼‼‼‼‼‼‼‼

调试

[!Tip]

注意,在调试之前需要先编译,确保编译通过才可以进行调试。

  1. 在调试之前需要先进行调试配置:

    调试配置路径

  2. 根据调试工具选择使用哪个进行调试,我这里使用的是JLink,双击会新增一个配置

    调试配置

  3. 配置需要调试的文件:注意,这里需要使用elf文件

    选择调试的文件

    [!tip]

    💥可以点击search project按钮来直接找到该项目活动的elf文件

  4. 配置JLink,以下页面用来配置连接方式等等

    配置JLink

    [!tip]

    注意:这里需要选择jlink的CL软件,不能是Jlink.exe

  5. 增加调试用的SVD文件

    增加SVD文件

    这个SVD文件在Pack包中,该文件是调试描述文件,如Can寄存器的地址等等,在IAR中是ddf文件。

插件配置

Eclipse也提供了丰富的插件,依次点击*==Help>Eclipse Marketplace==*

插件配置页面

Ozone

Ozone – The Performance Analyzer上下载Ozone。下载完成之后安装(正常安装,没有需要注意的地方,所以这里不再赘述)。

[!tip]

一定要注意jlink和Ozone的版本要匹配,不然会报错,可以使用jlink7.22b和Ozone3.24‼‼‼‼‼‼‼

新建工程

依次点击*==File>New>New Project Wizard==*

  1. 在Device中选择芯片类型,这里调用的是JLink的,所以需要安装JFlash

    [!important]

    如果要新增一个芯片,首先按照芯片的手册来配置JFlash即可。配置好之后,OZone不会自动更新,需要找到JFLash的安装路径,双击JLinkDLLUpdater.exe的软件,然后会弹出页面,选中Ozone设备,然后更新。注意,这里如果Ozone和JLink的版本不匹配的话,OZone就打不开了,所以一定要注意版本是否兼容。当你运行JLinkDLLUpdater.exe软件的时候,可以看见框内的OZone的版本,在上面的一行字是JFlash的版本,如果一致就可以更新,要是不一致就不能更新。

  2. Register Set选择内核版本。

  3. 外设文件是由单片机的DFP文件生成,到芯片的文件包里找到SVD文件。

详细使用

请参考Ozone使用介绍-基础功能 - 开发环境 - 硬汉嵌入式论坛 - Powered by Discuz!