Segger Embedded Studio(简称SES)有许多使用技巧,本文介绍几个我比较常用的。

(1)自定义快捷键

通过菜单项:Tools –> Options –> Keyboard,实现自定义快捷键。

我所改的几个功能:

  • DebugDownloadActive(F8):下载当前工程。
    在Keil中,下载功能使用快捷键F8,与Build功能(F7)毗邻,这里设置成相同快捷键。
  • EditGoToDeclaration(F11):跳转到函数声明。
    跳转到函数定义快捷键是Alt+G和F12,后者是隐藏快捷键,这里设置成F11与之毗邻。

另外,在Tools –> Options –> Text Editor中,将Ctrl + Left Click Action设为Go To Definition,即可实现类似Source Insight中的“Ctrl+点击”的方式跳转函数定义。

(2)外部工具

SES可以添加外部工具,但是入口很隐晦。

打开菜单项:File –> Open Studio Folder –> External Tool Configuration,将打开tools.xml文件。

在<tools></tools>之间加入如下代码,参考链接

<item name="Tool.CMSIS_Config_Wizard" wait="no">
    <menu>&amp;CMSIS Configuration Wizard</menu>
    <text>CMSIS Configuration Wizard</text>
    <tip>Open a configuration file in CMSIS Configuration Wizard</tip>
    <key>Ctrl+Y</key>
    <match>*config*.h</match>
    <message>CMSIS Config</message>
    <commands>
    java -jar &quot;$(CMSIS_CONFIG_TOOL)&quot; &quot;$(InputPath)&quot;
    </commands>
</item>

此时对sdk_config.h文件点右键,右键菜单中将多出一个CMSIS Configuration Wizard的菜单项,快捷键是Ctrl+Y。如下:

CMSIS Configuration Wizard是一个可视化的设置sdk_config.h的工具,SDK14.2中已经自带了该工具:

同时可以看到,右键菜单中还有我自定义的擦除芯片(Erase the Chip)的命令。

(3)定位注释中的变量

有的代码注释会引用外部变量,如下:

enum BLE_GAP_EVTS
{
  BLE_GAP_EVT_DISCONNECTED,     /**< See @ref ble_gap_evt_disconnected_t.*/
  BLE_GAP_EVT_CONN_PARAM_UPDATE,/**< See @ref ble_gap_evt_conn_param_update_t.*/
  // ...
}

注释中提到了ble_gap_evt_disconnected_t,我想查看该类型变量的定义,由于它位于注释中,无法直接按F12跳转。

最直观的方法是”全局搜索“,再从搜索结果中筛选,但这样做效率很慢(而且SES的全局搜索功能还有陈年bug)。

一个快速的方式是,调用菜单项:Navigate –> Find Symbol(Alt + Y),在符号查找窗口中输入ble_gap_evt_disconnected_t,然后就能够快速定位到该变量的定义,如下:

(4)移除Code/Data列

在项目文件浏览器中,显示了各文件的Code/Data大小,这两列宽度无法调小,在笔记本屏幕上非常浪费空间。

在工具栏的右边角落里有个设置菜单,可以在菜单中隐藏这两列,如下图:

(5)简化工程选项(Project Options)

打开工程选项的常规做法是先选中工程,再右键选择Edit Options项。但是Options中的条目太多,看着麻烦,希望能够只显示我们关心的条目。

操作方法是,打开(4)中提到菜单,做如下设置:

然后在项目文件浏览器中会自动增加一个Project Options目录,里面存放了我们修改过的选项。

如果手动修改了Project Options中的条目,被修改的条目会自动添加到这里。注意,不可以随意删除这些条目,删除操作意味着将其值恢复为默认值。

最终效果如下:

(6)按等号对齐

写代码时候经常遇到这样情况:

p_yqs->conn_handle = BLE_CONN_HANDLE_INVALID;
p_yqs->data_handler = p_yqs_init->data_handler;
p_yqs->is_notification_enabled = false;

希望这些赋值操作按等号对齐,实现如下效果:

p_yqs->conn_handle             = BLE_CONN_HANDLE_INVALID;
p_yqs->data_handler            = p_yqs_init->data_handler;
p_yqs->is_notification_enabled = false;

很简单,选中这几行,调用菜单项:Edit –> Column Tidy功能,即可自动以按等号对齐。

(7)跳转到头文件

假设当前打开的文件为peer_manager.c,希望跳转到peer_manager.h文件中。

调用菜单项:Navigate –> Go To Header (Alt + L)即可。

反过来,从头文件中跳转到源文件,只要找一个函数,按F12跳转到定义即可。

 

(未完待续)

J-Link的RTT(Real Time Transfer)是个好东西,但是它自带的RTT Viewer则体验一般。

我们可以利用J-Link Commander将RTT日志接入Telnet,通过Telnet软件显示RTT日志。

(1)J-Link Commander

打开J-Link Commander,选择设备名,选择接口为SWD,其他选项则直接回车表示保持默认。

J-Link Commander窗口中将显示:

ROMTbl[0] @ E00FF000
ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS
ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT
ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB
ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM
ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU
ROMTbl[0][5]: E0041000, CID: B105900D, PID: 000BB925 ETM
Cortex-M4 identified.
J-Link>

此时表示连接成功。

(2)Telnet

这类工具有许多,我们选择以前介绍的Poderosa。

新建一个Telnet连接,设置:

Host: localhost
Port: 19021

连接该服务器后就可以看到RTT日志了,如下:

 

参考:链接

(完)