搭建Segger Embedded Studio开发环境

[下载最新版的SDK,里面有现成的SES的工程,无需再手动搭建,本文仅做参考。文末的参考链接,值得一看。]

1. 简介

SEGGER Embedded Studio(SES)是推出过J-Link的公司SEGGER推出的嵌入式开发IDE。虽然SES 比较小众,但是它有一些特别突出的优势:

(1)对非商业使用免费。

注意,是全功能、不限时免费。Keil和IAR的试用版都对二进制文件的大小有限制。

(2)编辑器很友好。

Keil与IAR的编辑器对于用户体验的忽视,简直达到了令人发指的程度。这里吐槽一下Keil,关闭标签操作连快捷键都没有,每次打开新标签都得用鼠标关闭,极其影响效率。

SES在编辑器方面做的非常用心,比如超快的智能提示,代码格式化,Ctrl+点击跳转到函数实现,等等功能。

(3)配置灵活。

举个例子,做nRF52 BLE开发,需要先下载Softdevice的Hex文件,再下载Application的Hex文件。一般都是依次下载,或者用批处理脚本。SES在设置界面预留了3个Bootloader位置,在用户程序下载前自动下载Bootloader。

(4)跨平台。

Linux跟Mac也可以快速进行嵌入式开发了。

本文利用SES搭建Nordic nRF52832的开发环境,在SES上开发调试Nordic BLE程序。

2. 下载安装

SES下载地址:https://www.segger.com/downloads/embedded-studio

我的电脑上已经安装好了Nordic SDK13和Keil 5,这也是必需的软件。

安装完毕,软件的样子如下:

SES_Dev_GUI

点开菜单项:Tools > Package Manager,下载两个项目:

  • CMSIS-CORE Support Package (不是CMSIS 5 CMSIS-CORE Support Package)
  • nRF CPU Support Package

此时软件已经装完,但是我们还需要额外下载以下几个文件:

文件 含义
ses_nrf52_startup.s 启动文件,包含了中断向量表
flash_placement_nrf52832.xml Flash布局描述文件,描述Flash和RAM的分配
thumb_crt0_nrf52832.s ARM基础文件

在SDK\component\toolchain新建一个ses文件夹,将这几个文件放这里备用。在我的电脑上路径是C:\Nordic\SDK\13.1.0\components\toolchain\ses。

3. 导入Keil工程

以ble_app_template工程为例,先用Keil运行该工程,确保能够正常编译和运行。

启动SES,打开File > Import IAR/Keil Project…,选择该Keil工程文件*.uvprojx,选择“Internal Toolchain”一项,如下:

SES_Dev_Import_Keil

打开该工程后,按F7构建工程,会报错。

第一个错误说nrf.h不存在。这是因为Keil有PACK系统,包含了该文件,SES这里需要手动添加Include目录。

执行下述步骤:

1. 选中工程Project 'ble_app_template_pca10040_s132',而非选中某个文件。

2. 点击Edit Options按钮,或菜单Project > Edit Options...。

SES的文件管理系统比较复杂,每个文件或文件夹都可以设置自己的Option,最终再进行逻辑合并形成最终的Option。所以这里要选择工程项目,然后再打开Edit Options对话框。如下图所示:

SES_Dev_Edit_Options

默认情况下,Build Configuration处显示的是SoftDevice的配置项,这里要先选中应用程序的配置项,然后找到Code > Preprocessor > User Include Directories,在里面加入../../../../../../components/device,如下图:

SES_Dev_Preprocessor

SoftDevice是Keil工程上用来方便下载SDK协议栈的编译配置项,在SES中没有用,可以直接删掉。打开菜单:Project > Build Configurations…,删除SoftDevice项,如下:

SES_Dev_Remove_Build_Config

这时再按F7编译,提示section .fs_data相关错误,说明内存布局有问题,需要配置Flash_Placement.xml和thumb_crt0.s文件。

这里不讨论这些文件的内容含义,简单讲就是告诉SES,该工程的Flash内容和RAM内容分别放在哪里。更多的信息可以参考帮助文件,讲的很清楚。

在SES的文件目录中展开Internal Files,删除Cortex_M_Startup.s和thumb_crt0.s。在该文件夹上点右键,选择Add Existing File…,添加前面下载的thumb_crt0_nrf52832.s和ses_nrf52_startup.s,同时添加C:\Nordic\SDK\13.1.0\components\toolchain\system_nrf52.c。如下图:

SES_Dev_Add_Internal_Files

选择工程文件,打开Edit Options对话框,利用搜索框功能,找到Linker > Section Placement File,输入前面下载的flash_placement_nrf52832.xml路径:

C:/Nordic/SDK/13.1.0/components/toolchain/ses/flash_placement_nrf52832.xml

这时编译一下,就可以编译成功了,会看到非常醒目的进度条:

SES_Dev_Build_Complete

如果是一个纯Peripheral工程,不包含SoftDevice,则配置到此结束。

但是本文介绍BLE工程,需要用到SoftDevice,到这里还没有完,因为Nordic nRF52832的Flash结构是下面是SoftDevice,上面是Application,所以需要设置Application存在Flash的位置,给SoftDevice留下位置。

选择工程文件,打开Edit Options对话框,找到Section Placement Macros,输入

FLASH_START=0x1F000
SRAM_START=0x20002000

然后再按F7编译一下,会看到进度条发生了变化。

SES_Dev_Flash_Placement_Config

既然给SoftDevice留下了位置,下面配置如何烧写SoftDevice。

1. 打开工程的Edit Options
2. 找到Preprocessor > Preprocessor Definitions,增加 NO_VTOR_CONFIG
3. 找到Loader > Additional Load File[0],输入
C:/Nordic/SDK/13.1.0/components/softdevice/s132/hex/s132_nrf52_4.0.2_softdevice.hex

到此,所有的配置完全结束,编译一下,连上开发板就可以下载运行了。

4. 小技巧

(1)利用工程宏变量(Project Macro),简化路径的输入

在工程的Edit Options窗口中找到Project Macros,输入:nRF52_SDK13_Dir=C:/Nordic/SDK/13.1.0

然后所有对SDK文件的引用,都可以用$(nRF52_SDK13_Dir)来代替。

比如User Include Directories里面的内容就可以变成:

$(PackagesDir)/CMSIS_4/CMSIS/Include
$(nRF52_SDK13_Dir)/components
$(nRF52_SDK13_Dir)/components/device
...

看起来更加清爽,而且不容易出错。

(2)手动编辑emProject工程文件

从Keil导入的工程,默认的Build Configuration名字为nrf52832_xxaa,以芯片型号来命名很容易引起误解。下面通过编辑emProject文件来更改这个命名。

退出SES,用记事本打开emProject文件。

找到

<configuration  Name="nrf52832_xxaa" ...

项,显然这个Name属性就是编译配置的名称,在文件内搜索该字符串,发现有两个地方用到了,直接替换成Debug,即可。

此外,从Keil导入的工程,会多一个Internal的编译配置,我不知道这个配置项是什么作用,颇为干扰,也可以通过编辑emProject文件来删除Internal配置。

(3)更改目录结构

Nordic SDK13设计的目录结构非常繁复,目录结构很深,这么做的目的是为了保持不同编译器(Keil/IAR/GCC),不同版本SDK(11/12/13)之间的形式统一,方便用户选择。

但是对于开发者,通常在一段时间内只会使用一个SDK版本和编译器版本,深目录比较麻烦。

因为编辑emProject很容易,所以我们可以把整个工程目录结构改成如下形式:

SES_Dev_Change_Project_Stucture

图中,工程目录名字是ble_template,工程文件放在工程目录中,源文件都放在source文件夹中,output是SES的输出文件。

(4)CMSIS Configuration Wizard

Nordic nRF52的SDK中,每个工程都配备一个sdk_config.h文件,配合Keil可以可视化开关某些模块,如下图:

SES_Dev_Keil_Wizard

这个可视化配置工具比较方便,而且可以避免出错。

在SES中,可以借助第三方免费工具 CMSIS Configuration Wizard实现类似的功能,在该软件中打开sdk_config.h效果如下:

SES_Dev_CMSIS_Config_Wizard

该工具下载地址:https://sourceforge.net/projects/cmsisconfig/?source=directory

参考

https://devzone.nordicsemi.com/blogs/1032/segger-embedded-studio-a-cross-platform-ide-w-no-c/

(完)

13 评论

  1. 1、这个IDE可以使用不同的MCU吧,基本上Jlink支持的MCU,均可以在上面操作吧?
    2、Segger是如何知道我是用在商业上的?比较好奇

    1. 可以用在别的芯片上,他们也有像Keil的Pack系统那样的扩展系统,目前主流的几个厂家都支持上了。但它还是不够成熟,BUG多,且官方社区没人气,遇到问题比较麻烦。作为软件应该无法知道你是否用于商业,但是公司大了就藏不住。

  2. 你好,上面分享的百度网盘的资料无法下载了,在NORDIC论坛里面下载的thumb_crt0_nrf52832.s和ses_nrf52_startup.s的文件不能使用(编译SDK13.0是fds仍旧有错误),所以能够再分享一下上面的百度网盘的资料,NORDIC从SDK14.2才开始真正有Segger Embedded的例程,SDK13.0真的不好改,所以请再分享一下百度网盘的资料,谢谢!

    1. 现在很缺动力去仔细做这个事情,有问题直接找我吧,你们公司有许多人有我的联系方式,我在上海。

    2. 你好,请问一下你现在有那几个文件了吗?有的话能发我一份吗?多谢!

  3. 你好,我也是遇到了与楼上同样的问题,需要额外下载的几个文件百度网盘无法下载,能再分享一次吗?多谢!

  4. 你好,最上面那个百度网盘的内容失效拉,里面没东西,可以再分享一下嘛?如果有52840的也分享一份可以吗

    你的个人网页做的真棒,我也是学nordic ble开发的,你写的内容非常精彩,干货!

    1. 更新了链接。请下载最新的SDK,里面都做好了,无需手动搭建。

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据