[下载最新版的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,这也是必需的软件。
安装完毕,软件的样子如下:
点开菜单项: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”一项,如下:
打开该工程后,按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对话框。如下图所示:
默认情况下,Build Configuration处显示的是SoftDevice的配置项,这里要先选中应用程序的配置项,然后找到Code > Preprocessor > User Include Directories,在里面加入../../../../../../components/device,如下图:
SoftDevice是Keil工程上用来方便下载SDK协议栈的编译配置项,在SES中没有用,可以直接删掉。打开菜单:Project > Build Configurations…,删除SoftDevice项,如下:
这时再按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。如下图:
选择工程文件,打开Edit Options对话框,利用搜索框功能,找到Linker > Section Placement File,输入前面下载的flash_placement_nrf52832.xml路径:
C:/Nordic/SDK/13.1.0/components/toolchain/ses/flash_placement_nrf52832.xml
这时编译一下,就可以编译成功了,会看到非常醒目的进度条:
如果是一个纯Peripheral工程,不包含SoftDevice,则配置到此结束。
但是本文介绍BLE工程,需要用到SoftDevice,到这里还没有完,因为Nordic nRF52832的Flash结构是下面是SoftDevice,上面是Application,所以需要设置Application存在Flash的位置,给SoftDevice留下位置。
选择工程文件,打开Edit Options对话框,找到Section Placement Macros,输入
FLASH_START=0x1F000
SRAM_START=0x20002000
然后再按F7编译一下,会看到进度条发生了变化。
既然给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很容易,所以我们可以把整个工程目录结构改成如下形式:
图中,工程目录名字是ble_template,工程文件放在工程目录中,源文件都放在source文件夹中,output是SES的输出文件。
(4)CMSIS Configuration Wizard
Nordic nRF52的SDK中,每个工程都配备一个sdk_config.h文件,配合Keil可以可视化开关某些模块,如下图:
这个可视化配置工具比较方便,而且可以避免出错。
在SES中,可以借助第三方免费工具 CMSIS Configuration Wizard实现类似的功能,在该软件中打开sdk_config.h效果如下:
该工具下载地址:https://sourceforge.net/projects/cmsisconfig/?source=directory
参考
https://devzone.nordicsemi.com/blogs/1032/segger-embedded-studio-a-cross-platform-ide-w-no-c/
(完)
1、这个IDE可以使用不同的MCU吧,基本上Jlink支持的MCU,均可以在上面操作吧?
2、Segger是如何知道我是用在商业上的?比较好奇
可以用在别的芯片上,他们也有像Keil的Pack系统那样的扩展系统,目前主流的几个厂家都支持上了。但它还是不够成熟,BUG多,且官方社区没人气,遇到问题比较麻烦。作为软件应该无法知道你是否用于商业,但是公司大了就藏不住。
Thanks,i got it.
有蓝牙技术问题想要请教,是否方便微信,邮件或电话?
你好,上面分享的百度网盘的资料无法下载了,在NORDIC论坛里面下载的thumb_crt0_nrf52832.s和ses_nrf52_startup.s的文件不能使用(编译SDK13.0是fds仍旧有错误),所以能够再分享一下上面的百度网盘的资料,NORDIC从SDK14.2才开始真正有Segger Embedded的例程,SDK13.0真的不好改,所以请再分享一下百度网盘的资料,谢谢!
现在很缺动力去仔细做这个事情,有问题直接找我吧,你们公司有许多人有我的联系方式,我在上海。
你好,请问一下你现在有那几个文件了吗?有的话能发我一份吗?多谢!
你好,我也是遇到了与楼上同样的问题,需要额外下载的几个文件百度网盘无法下载,能再分享一次吗?多谢!
你好,最上面那个百度网盘的内容失效拉,里面没东西,可以再分享一下嘛?如果有52840的也分享一份可以吗
你的个人网页做的真棒,我也是学nordic ble开发的,你写的内容非常精彩,干货!
更新了链接。请下载最新的SDK,里面都做好了,无需手动搭建。
您好,我的行號消失了,請問該如何開啟他?
Keil关闭标签操作没有快捷键?试试Ctrl+F4吧。
学习了
您好,下载程序时不显示进度条,应该怎么开启
我也不清楚,重启一下试试吧