{"id":329858,"date":"2023-03-10T03:00:00","date_gmt":"2023-03-10T02:00:00","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=clion&#038;p=329858"},"modified":"2023-03-10T07:43:46","modified_gmt":"2023-03-10T06:43:46","slug":"using-nrf52-with-cmake-connect-sdk","status":"publish","type":"clion","link":"https:\/\/blog.jetbrains.com\/zh-hans\/clion\/2023\/03\/using-nrf52-with-cmake-connect-sdk\/","title":{"rendered":"\u6559\u7a0b\uff1a\u5c06 nRF52 \u4e0e nRF Connect SDK\u3001CMake \u548c CLion \u4e00\u8d77\u4f7f\u7528"},"content":{"rendered":"<p>\u5927\u7ea6\u4e00\u5e74\u524d\uff0c\u6211\u4eec\u7684\u5609\u5bbe\uff0cNRB Tech \u7684\u521b\u59cb\u4eba Nick Brook \u89e3\u91ca\u4e86<a href=\"https:\/\/blog.jetbrains.com\/clion\/2020\/01\/using-nrf52-with-clion\/\">\u5982\u4f55\u5c06 CLion \u7528\u4e8e nRF52<\/a>\u3002 \u4eca\u5929\uff0cNick \u5e26\u7740\u65b0\u7684\u6559\u7a0b\u56de\u6765\u4e86\uff0c\u91cd\u70b9\u8ba8\u8bba\u5982\u4f55\u5728 CLion \u4e2d\u4f7f\u7528<strong>\u57fa\u4e8e CMake \u7684 nRF Connect SDK<\/strong>\u3002 \u8bf7\u9605\u8bfb Nick \u7684\u8fd9\u7bc7\u6559\u7a0b\uff0c\u5e76\u4f7f\u7528 CLion \u5c1d\u8bd5\u4e00\u4e0b\uff01<\/p>\n<table style=\"width: 100%; border-spacing: 0;\">\n<tbody>\n<tr style=\"background-color: #f1f6fe; font-size: 15px;\">\n<td style=\"width: 150px; padding: 0;\"><img decoding=\"async\" style=\"vertical-align: middle;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/01\/clion-author.jpg\" alt=\"Nick Brook\" height=\"150\"><\/td>\n<td style=\"padding: 0 0 0 15px;\"><span style=\"vertical-align: middle; line-height: 1.8; color: #000;\">\u7269\u8054\u7f51\u987e\u95ee\u548c NRB Tech \u521b\u59cb\u4eba<br>Nick \u4e8e 2018 \u5e74\u521b\u7acb\u4e86 NRB Tech\uff0c\u901a\u8fc7\u7ed3\u5408\u6df1\u5165\u7684\u786c\u4ef6\u3001\u8f6f\u4ef6\u548c\u7528\u6237\u4f53\u9a8c\u4e13\u4e1a\u77e5\u8bc6\uff0c\u6784\u5efa\u5b9e\u7528\u548c\u53ef\u6301\u7eed\u7684 IoT\uff08\u7269\u8054\u7f51\uff09\u4ea7\u54c1\u3002<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5728\u6b64\u4e4b\u524d\uff0c\u6211\u4eec\u786e\u5b9a\u4e86\u5982\u4f55\u5c06 Nordic \u7684 nRF5 SDK \u4e0e <a href=\"https:\/\/www.nrbtech.io\/blog\/2020\/1\/4\/using-cmake-for-nordic-nrf52-projects\" target=\"_blank\" rel=\"noopener\">CMake<\/a> \u548c <a href=\"https:\/\/blog.jetbrains.com\/clion\/2020\/01\/using-nrf52-with-clion\/\">CLion<\/a> \u4e00\u8d77\u4f7f\u7528\u3002 2020 \u5e74 4 \u6708\uff0cNordic \u53d1\u5e03\u4e86 1.0.0 \u7248 nRF Connect SDK\uff0c\u8fd9\u662f Nordic \u4ea7\u54c1\u5411\u524d\u53d1\u5c55\u7684\u65b0\u5e73\u53f0\u3002 \u6b64 SDK \u57fa\u4e8e <a href=\"https:\/\/zephyrproject.org\/\" target=\"_blank\" rel=\"noopener\">Zephyr RTOS<\/a>\uff0c\u8fd9\u662f\u4e00\u79cd\u73b0\u4ee3\u3001\u5b89\u5168\u3001\u5f00\u6e90\u7684\u5b9e\u65f6\u64cd\u4f5c\u7cfb\u7edf\uff0c\u7531 Facebook\u3001Google\u3001Intel\u3001Nordic\u3001NXP \u548c Opticon \u652f\u6301\u7684 Linux Foundation \u5f00\u53d1\u3002 \u65b0 SDK \u53ef\u4ee5\u5b9e\u73b0\u4f7f\u7528\u8702\u7a9d\u548c Wi-Fi \u5e76\u5305\u542b\u65b0\u7684\u548c\u672a\u6765 Nordic \u6a21\u5757\u7684\u66f4\u590d\u6742\u9879\u76ee\uff0c\u540c\u65f6\u8fd8\u652f\u6301 nRF52 \u7cfb\u5217\u6a21\u5757\u3002<\/p>\n<p>Zephyr \u4f7f\u7528 CMake \u4f5c\u4e3a\u6784\u5efa\u7cfb\u7edf\uff0c\u8fd9\u4f7f\u5176\u6bd4 nRF5 SDK \u66f4\u5bb9\u6613\u5728 CLion \u4e2d\u4f7f\u7528\u3002 \u4e0d\u8fc7\uff0c\u6211\u4eec\u9700\u8981\u8fdb\u884c\u4e00\u4e9b\u8bbe\u7f6e\u3002<\/p>\n<h2 id=\"prerequisites\">\u524d\u63d0<\/h2>\n<p>nRF Connect SDK \u652f\u6301 nRF52 \u7cfb\u5217 SOC \u4ee5\u53ca\u8f83\u65b0\u7684 nRF53 \u548c nRF91 SOC\u3002 \u652f\u6301\u6240\u6709\u5f00\u53d1\u5de5\u5177\u5305\u548c Thingy \u5f00\u53d1\u677f\u3002 nRF Connect SDK \u652f\u6301 Windows\u3001macOS \u548c Linux\u3002<\/p>\n<h2 id=\"setting_up_the_toolchain_and_sdk\">\u8bbe\u7f6e\u5de5\u5177\u94fe\u548c SDK<\/h2>\n<p>\u5728 Windows \u548c macOS \u4e0a\u8bbe\u7f6e SDK \u548c\u5de5\u5177\u94fe\u7684\u6700\u4f73\u65b9\u5f0f\u662f\u4f7f\u7528 <a href=\"https:\/\/developer.nordicsemi.com\/nRF_Connect_SDK\/doc\/latest\/nrf\/gs_assistant.html\" target=\"_blank\" rel=\"noopener\">nRF Connect Toolchain Manager<\/a>\u3002 \u8fd9\u662f\u6700\u7b80\u5355\u7684\u8bbe\u7f6e\u65b9\u5f0f\uff0c\u5b83\u8fd8\u53ef\u4ee5\u786e\u4fdd\u6240\u6709\u5de5\u5177\u94fe\u4f9d\u8d56\u9879\u90fd\u5728\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u5e76\u4e14\u662f\u9002\u7528\u4e8e\u8be5 SDK \u7248\u672c\u7684\u6b63\u786e\u7248\u672c\u3002<\/p>\n<p>\u4e5f\u53ef\u4ee5\u6309\u7167<a href=\"https:\/\/developer.nordicsemi.com\/nRF_Connect_SDK\/doc\/latest\/nrf\/gs_installing.html\" target=\"_blank\" rel=\"noopener\">\u624b\u52a8\u5b89\u88c5\u8bf4\u660e<\/a>\u5728 Linux \u4e0a\u5b89\u88c5\u3002<\/p>\n<p>\u5728\u672c\u6559\u7a0b\u4e2d\uff0c\u5f53\u9700\u8981 SDK \u7684\u8def\u5f84\u65f6\uff0c\u6211\u4eec\u5c06\u4f7f\u7528 <code>&lt;ncsroot&gt;<\/code> \u4f5c\u4e3a\u5360\u4f4d\u7b26\u3002 \u5982\u679c\u4f7f\u7528 1.5.0 \u7248\u672c\u7684 Toolchain Manager\uff0c\u5728 Windows \u4e0a\u4e3a <code>C:Users&lt;user&gt;ncsv1.5.0<\/code>\uff1b\u5728 macOS \u4e0a\u4e3a <code>\/opt\/nordic\/ncs\/v1.5.0<\/code>\u3002<\/p>\n<h2 id=\"creating_a_custom_project_to_use_in_clion\">\u521b\u5efa\u8981\u5728 CLion \u4e2d\u4f7f\u7528\u7684\u81ea\u5b9a\u4e49\u9879\u76ee<\/h2>\n<p>\u6211\u4eec\u4ece\u793a\u4f8b Nordic \u9879\u76ee\u521b\u5efa\u4e00\u4e2a\u81ea\u5b9a\u4e49\u9879\u76ee\u3002<\/p>\n<ol>\n<li>\u5728 <code>&lt;ncsroot&gt;\/nrf\/samples<\/code> \u76ee\u5f55\u4e2d\u627e\u5230 SDK \u4e2d\u7684\u76f8\u5173\u793a\u4f8b\u3002 \u5c06\u5176\u590d\u5236\u5230\u7cfb\u7edf\u4e0a\u4e00\u4e2a\u65b9\u4fbf\u7684\u4f4d\u7f6e\u3002 \u5982\u679c\u613f\u610f\uff0c\u53ef\u4ee5\u91cd\u547d\u540d\u8be5\u76ee\u5f55\u3002 \u5982\u679c\u60a8\u5bf9 nRF52 \u975e\u5e38\u964c\u751f\uff0c\u5efa\u8bae\u4f7f\u7528 peripheral_hids_mouse \u793a\u4f8b\u3002 \u8be5\u793a\u4f8b\u6a21\u62df\u4e86\u4e00\u4e2a\u666e\u901a\u7684\u8ba1\u7b97\u673a\u9f20\u6807\u3002 \u6709\u5173\u8be6\u60c5\uff0c\u8bf7\u53c2\u9605\u793a\u4f8b\u7684 README.rst \u6587\u4ef6\u3002<\/li>\n<li>\u5728 CLion \u4e2d\u6253\u5f00\u8be5\u9879\u76ee\u3002 \u6682\u65f6\u5ffd\u7565\u6240\u6709\u9519\u8bef\u3002<\/li>\n<li>\u5728 CLion \u504f\u597d\u8bbe\u7f6e\u4e2d\uff0c\u8f6c\u5230 <em>Build, Execution, Deployment | Toolchains<\/em>\uff08\u6784\u5efa\u3001\u6267\u884c\u3001\u90e8\u7f72 | \u5de5\u5177\u94fe\uff09\uff0c\u5e76\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684\u5de5\u5177\u94fe\u3002 \u6309\u5982\u4e0b\u6240\u793a\u8fdb\u884c\u914d\u7f6e\uff1a<br><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/nrf2_6.png\" alt=\"NRF \u5de5\u5177\u94fe\" width=\"1138\">\n<p><\/p>\n<ol>\n<li>\u540d\u79f0\uff1a\u201cnRF Connect SDK &lt;version&gt;\u201d\uff0c\u5c06 &lt;version&gt; \u66ff\u6362\u4e3a\u60a8\u6b63\u5728\u4f7f\u7528\u7684 SDK \u7248\u672c<\/li>\n<li>CMake\uff1a<code>&lt;ncsroot&gt;\/bin\/cmake<\/code><\/li>\n<li>C \u7f16\u8bd1\u5668\uff1a<code>&lt;ncsroot&gt;\/bin\/arm-none-eabi-gcc<\/code><\/li>\n<li>C++ \u7f16\u8bd1\u5668\uff1a<code>&lt;ncsroot&gt;\/bin\/arm-none-eabi-g++<\/code><\/li>\n<li>\u8c03\u8bd5\u5668\uff1a<code>&lt;ncsroot&gt;\/bin\/arm-none-eabi-gdb<\/code><\/li>\n<li>\u70b9\u51fb Apply\uff08\u5e94\u7528\uff09<\/li>\n<\/ol>\n<\/li>\n<li>\u5728 CLion \u504f\u597d\u8bbe\u7f6e\u4e2d\uff0c\u8f6c\u5230 <em>Build, Execution, Deployment | CMake<\/em>\uff08\u6784\u5efa\u3001\u6267\u884c\u3001\u90e8\u7f72 | CMake\uff09\uff0c\u7136\u540e\u9009\u62e9\u73b0\u6709\u7684\u201cDebug\u201d\u914d\u7f6e\u6587\u4ef6\u3002\n<ol>\n<li>\u5c06 <em>Build type<\/em>\uff08\u6784\u5efa\u7c7b\u578b\uff09\u8bbe\u7f6e\u4e3a <code>ZDebug<\/code>\uff08\u8fd9\u4e00\u70b9\u5c06\u5728\u672c\u6587\u6700\u540e\u8fdb\u4e00\u6b65\u89e3\u91ca\uff09<\/li>\n<li>\u5c06 <em>Toolchain<\/em>\uff08\u5de5\u5177\u94fe\uff09\u8bbe\u7f6e\u4e3a\u6211\u4eec\u521a\u521a\u521b\u5efa\u7684 <code>nRF Connect SDK &lt;version&gt;<\/code> \u5de5\u5177\u94fe<\/li>\n<li>\u5728 <em>CMake options<\/em>\uff08CMake \u9009\u9879\uff09\u4e2d\u6dfb\u52a0 <code>-G Ninja<\/code>\u3002 Ninja \u662f Zephyr \u7684\u63a8\u8350\u751f\u6210\u5668\uff0c\u53ef\u4ee5\u9632\u6b62 Windows \u4e0a\u51fa\u73b0\u95ee\u9898\u3002<\/li>\n<\/ol>\n<\/li>\n<li>\u4e3a\u4e86\u5411 Zephyr \u63d0\u4f9b\u6240\u9700\u7684\u7cfb\u7edf\u548c\u9879\u76ee\u7279\u5b9a\u914d\u7f6e\uff0c\u6211\u4eec\u5fc5\u987b\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u3002 \u6211\u4eec\u9700\u8981\u5728 CLion \u914d\u7f6e\u6587\u4ef6\u4e2d\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u56e0\u4e3a\u8fd9\u4f1a\u5c06\u5b83\u4eec\u4f20\u64ad\u5230\u7531 CMake \u542f\u52a8\u7684\u8fdb\u7a0b\uff0c\u8fd9\u6837\uff0c\u4f7f\u7528 <code>west<\/code> \u7684\u76ee\u6807\u5c06\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\u3002 \u5982\u679c\u6211\u4eec\u5728 <code>CMakeLists.txt<\/code> \u4e2d\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u5b83\u4eec\u5c06\u4e0d\u4f1a\u4f20\u64ad\u5230\u5df2\u542f\u52a8\u7684\u8fdb\u7a0b\u3002\n<ol>\n<li>\u5982\u679c\u60a8\u6b63\u5728\u4f7f\u7528\u5de5\u5177\u94fe\u7ba1\u7406\u5668\uff0c\u8bf7\u70b9\u51fb\u5df2\u5b89\u88c5\u7684 NCS \u7248\u672c\u65c1\u8fb9\u7684\u5411\u4e0b\u7bad\u5934\uff0c\u7136\u540e\uff1a\n<ol>\n<li>\u5728 Windows \u4e0a\uff0c\u70b9\u51fb\u201c\u6253\u5f00\u547d\u4ee4\u63d0\u793a\u7b26\u201d\u5e76\u7c98\u8d34\uff1a\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">echo BOARD=nrf52dk_nrf52832;ZEPHYR_BASE=%ZEPHYR_BASE%PATH=%PATH%;GIT_EXEC_PATH=%GIT_EXEC_PATH%;ZEPHYR_TOOLCHAIN_VARIANT=%ZEPHYR_TOOLCHAIN_VARIANT%;GNUARMEMB_TOOLCHAIN_PATH=%GNUARMEMB_TOOLCHAIN_PATH% | clip<\/pre>\n<\/li>\n<li>\u5728 macOS \u4e0a\uff0c\u70b9\u51fb\u201c\u6253\u5f00\u7ec8\u7aef\u201d\u5e76\u7c98\u8d34\uff1a\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">echo \"BOARD=nrf52dk_nrf52832;ZEPHYR_BASE=$(pwd)\/zephyr;PATH=$PATH:\/usr\/local\/bin;GIT_EXEC_PATH=$GIT_EXEC_PATH;ZEPHYR_TOOLCHAIN_VARIANT=$ZEPHYR_TOOLCHAIN_VARIANT;GNUARMEMB_TOOLCHAIN_PATH=$GNUARMEMB_TOOLCHAIN_PATH\" | pbcopy<\/pre>\n<\/li>\n<\/ol>\n<p>\u7ed3\u679c\u4f1a\u81ea\u52a8\u590d\u5236\u5230\u526a\u8d34\u677f\u4e2d\u3002 \u5c06\u5176\u7c98\u8d34\u5230 CLion \u7684 CMake \u914d\u7f6e\u6587\u4ef6\u914d\u7f6e\u4e2d\u7684 Environment\uff08\u73af\u5883\uff09\u6846\u4e2d\u3002<\/p>\n<\/li>\n<li>\u5982\u679c\u60a8\u5df2\u624b\u52a8\u5b89\u88c5\uff0c\u8bf7\u5c06\u4ee5\u4e0b\u5185\u5bb9\u7c98\u8d34\u5230 Environment\uff08\u73af\u5883\uff09\u4e2d\u5e76\u8fdb\u884c\u4fee\u6539\u3002\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">BOARD=nrf52dk_nrf52832;ZEPHYR_BASE=&lt;ncsroot&gt;;PATH=&lt;ncsroot&gt;\/toolchain\/bin:&lt;existing path&gt;;GIT_EXEC_PATH=&lt;ncsroot&gt;\/toolchain\/Cellar\/git\/2.26.2\/libexec\/git-core;ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb;GNUARMEMB_TOOLCHAIN_PATH=&lt;ncsroot&gt;\/toolchain<\/pre>\n<ol>\n<li>\u4fee\u6539 <code>ZEPHYR_BASE<\/code>\u3001<code>GIT_EXEC_PATH<\/code> \u548c <code>GNUARMEMB_TOOLCHAIN_PATH<\/code>\uff0c\u66ff\u6362 <code>&lt;ncsroot&gt;<\/code>\u3002<\/li>\n<li>\u5728 <code>PATH<\/code> \u53d8\u91cf\u4e2d\uff0cNCS \u5de5\u5177\u94fe\u5fc5\u987b\u5728\u5176\u4ed6\u8def\u5f84\u4e4b\u524d\u3002 CLion \u6682\u4e0d\u652f\u6301\u73af\u5883\u53d8\u91cf\u4e2d\u7684\u53d8\u91cf\u6269\u5c55\uff0c\u56e0\u6b64\u9700\u8981\u8f93\u5165\u5b8c\u6574\u8def\u5f84\uff0c\u66ff\u6362 <code>&lt;existing path&gt;<\/code>\u3002 \u4e3a\u4e86\u83b7\u53d6\u8981\u4f7f\u7528\u7684\u8def\u5f84\uff0c\u8bf7\u5728 shell\uff08macOS \u548c Linux\uff09\u4e2d\u8f93\u5165 <code>echo $PATH<\/code>\uff0c\u6216\u5728\u547d\u4ee4\u63d0\u793a\u7b26 (Windows) \u4e2d\u8f93\u5165 <code>echo %PATH%<\/code>\u3002<\/li>\n<\/ol>\n<\/li>\n<li>\u5982\u679c\u8981\u4f7f\u7528 nRF52 DK \u4ee5\u5916\u7684\u5f00\u53d1\u677f\uff0c\u5219\u9700\u8981\u5c06 <code>BOARD<\/code> \u73af\u5883\u53d8\u91cf\u4fee\u6539\u4e3a\u8981\u4f7f\u7528\u7684\u5f00\u53d1\u677f\u3002 <a href=\"https:\/\/developer.nordicsemi.com\/nRF_Connect_SDK\/doc\/latest\/nrf\/app_boards.html\" target=\"_blank\" rel=\"noopener\">\u6b64\u5904<\/a>\u7684 Build target\uff08\u6784\u5efa\u76ee\u6807\uff09\u5217\u4e2d\u5b9a\u4e49\u4e86\u53ef\u7528\u5f00\u53d1\u677f\u3002 \u60a8\u8fd8\u53ef\u4ee5\u6309\u7167<a href=\"https:\/\/webinars.nordicsemi.com\/getting-started-with-custom-5\" target=\"_blank\" rel=\"noopener\">\u5728\u7ebf\u8bb2\u5ea7<\/a>\u548c<a href=\"https:\/\/developer.nordicsemi.com\/nRF_Connect_SDK\/doc\/latest\/zephyr\/application\/index.html#custom-board-definition\" target=\"_blank\" rel=\"noopener\">\u6307\u5357<\/a>\u521b\u5efa\u81ea\u5b9a\u4e49\u5f00\u53d1\u677f\u3002<br><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/nrf2_7.png\" alt=\"CMake \u914d\u7f6e\u6587\u4ef6\" width=\"1012\"><\/li>\n<\/ol>\n<\/li>\n<li>\u590d\u5236 ZDebug \u914d\u7f6e\u6587\u4ef6\u5e76\u5c06\u65b0\u914d\u7f6e\u6587\u4ef6\u7684 Build type\uff08\u6784\u5efa\u7c7b\u578b\uff09\u4fee\u6539\u4e3a\u201cZRelease\u201d\u3002 \u70b9\u51fb OK\uff08\u786e\u5b9a\uff09\u3002<\/li>\n<li>\u5927\u591a\u6570\u9879\u76ee\u914d\u7f6e\u5728 <code>prj.conf<\/code> \u6587\u4ef6\u4e2d\u5b8c\u6210\u3002 \u5c06\u6b64\u6587\u4ef6\u91cd\u547d\u540d\u4e3a <code>prj.common.conf<\/code>\u3002 \u8fd9\u5c06\u5305\u542b ZDebug \u548c ZRelease \u6784\u5efa\u7684\u901a\u7528\u914d\u7f6e\u3002 \u6253\u5f00\u6587\u4ef6\uff0c\u5e76\u5728\u5e95\u90e8\u6dfb\u52a0\uff1a\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\"># Use RTT instead of UART for debug output (optional)\nCONFIG_USE_SEGGER_RTT=y\nCONFIG_RTT_CONSOLE=y\nCONFIG_UART_CONSOLE=n<\/pre>\n<\/li>\n<li>\u521b\u5efa\u65b0\u6587\u4ef6 <code>prj.ZDebug.conf<\/code> \u5e76\u6dfb\u52a0\uff1a\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\"># Optimize for debug\nCONFIG_DEBUG_OPTIMIZATIONS=y<\/pre>\n<\/li>\n<li>\u521b\u5efa\u65b0\u6587\u4ef6 <code>prj.ZRelease.conf<\/code> \u5e76\u6dfb\u52a0\uff1a\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\"># Optimize for speed. See https:\/\/docs.zephyrproject.org\/latest\/reference\/kconfig\/choice_471.html#choice-471 for other options\nCONFIG_SPEED_OPTIMIZATIONS=y\n# Disable assertions in the Zephyr Kernel. This improves the execution speed and prevents a CMake configure warning. See https:\/\/docs.zephyrproject.org\/latest\/reference\/kconfig\/CONFIG_ASSERT.html\nCONFIG_ASSERT=n<\/pre>\n<\/li>\n<li>\u6253\u5f00 <code>CMakeLists.txt<\/code> \u6587\u4ef6\u3002 \u5728 <code>find_package(Zephyr ...)<\/code> \u884c\u4e4b\u524d\uff0c\u63d2\u5165\uff1a\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">if (NOT CMAKE_BUILD_TYPE)\n  set(CMAKE_BUILD_TYPE ZDebug)\nendif()\n# Point to the build type and common config files\nset(CONF_FILE \"prj.${CMAKE_BUILD_TYPE}.conf\" \"prj.common.conf\")<\/pre>\n<\/li>\n<li>\u70b9\u51fb <em>Tools | CMake | Reset Cache and Reload Project<\/em>\uff08\u5de5\u5177 | CMake | \u91cd\u7f6e\u7f13\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u9879\u76ee\uff09<\/li>\n<li>\u60a8\u73b0\u5728\u53ef\u4ee5\u4f7f\u7528 <code>zephyr_final<\/code>\u76ee\u6807\u6784\u5efa <code>&lt;project dir&gt;\/cmake-build-&lt;profile&gt;\/zephyr.hex<\/code>\uff0c\u4f7f\u7528 <code>flash<\/code> \u76ee\u6807\u6784\u5efa\u5e76\u5237\u5199\u5230\u5f00\u53d1\u677f\u4e0a\u3002<\/li>\n<li>\u60a8\u53ef\u4ee5\u6309\u7167 Nordic \u7684<a href=\"https:\/\/developer.nordicsemi.com\/nRF_Connect_SDK\/doc\/latest\/nrf\/gs_testing.html?highlight=rtt#how-to-use-rtt\" target=\"_blank\" rel=\"noopener\">\u4f7f\u7528\u793a\u4f8b\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u6d4b\u8bd5<\/a>\u6307\u5357\u4e2d\u7684\u6b65\u9aa4\u83b7\u5f97 RTT \u8f93\u51fa\u3002 \u57fa\u672c\u4e0a\uff0c\u5728\u5b89\u88c5 <a href=\"https:\/\/www.segger.com\/downloads\/jlink\" target=\"_blank\" rel=\"noopener\">JLink \u8f6f\u4ef6\u548c\u6587\u6863\u5305<\/a>\u4e4b\u540e\uff0c\u8fd0\u884c\uff1a\n<ul>\n<li>\u5728 Windows \u4e0a\uff1a<code>JLinkRTTViewer.exe<\/code><\/li>\n<li>\u5728 macOS \u4e0a\uff1a<code>open \/usr\/local\/bin\/JLinkRTTViewer.app<\/code><\/li>\n<li>\u5728 Linux \u4e0a\uff1a<code>JLinkRTTViewerExe<\/code><\/li>\n<\/ul>\n<p>\u7136\u540e\uff0c\u9009\u62e9\u60a8\u6b63\u5728\u4f7f\u7528\u7684 Nordic SOC\uff1b\u5176\u4ed6\u4f7f\u7528\u9ed8\u8ba4\u503c\u5373\u53ef\u3002<\/p>\n<\/li>\n<li>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u8bbe\u7f6e\u8c03\u8bd5\u3002\n<ol>\n<li>\u5728 CLion \u7a97\u53e3\u7684\u53f3\u4e0a\u65b9\uff0c\u70b9\u51fb\u914d\u7f6e\u4e0b\u62c9\u83dc\u5355\uff0c\u9009\u62e9 Edit Configurations\uff08\u7f16\u8f91\u914d\u7f6e\uff09\u3002 \u7136\u540e\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684 Embedded GDB Server\uff08\u5d4c\u5165\u5f0f GDB \u670d\u52a1\u5668\uff09\u914d\u7f6e\uff1a<br><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/nrf2_2.png\" alt=\"\u5d4c\u5165\u5f0f GDB \u914d\u7f6e\" width=\"239\"><\/li>\n<li>\u6309\u5982\u4e0b\u6240\u793a\u8fdb\u884c\u914d\u7f6e\uff1a<br><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/nrf2_5.png\" alt=\"\u914d\u7f6e\u8be6\u7ec6\u4fe1\u606f\" width=\"941\">\n<p><\/p>\n<ol>\n<li>\u8bbe\u7f6e\u540d\u79f0<\/li>\n<li>\u52fe\u9009 Store as project file\uff08\u5b58\u50a8\u4e3a\u9879\u76ee\u6587\u4ef6\uff09\u4ee5\u4e0e\u60a8\u7684\u9879\u76ee\u7684\u5176\u4ed6 CLion \u7528\u6237\u5171\u4eab\u6b64\u6587\u4ef6<\/li>\n<li>\u9009\u62e9 <code>zephyr_final<\/code> \u76ee\u6807<\/li>\n<li>\u9009\u62e9 <code>zephyr_final<\/code> \u53ef\u6267\u884c\u6587\u4ef6<\/li>\n<li>\u5c06 <em>Target remote args<\/em>\uff08\u76ee\u6807\u8fdc\u7a0b\u5b9e\u53c2\uff09\u8bbe\u7f6e\u4e3a <code>tcp:localhost:2331<\/code><\/li>\n<li>\u5c06 GDB Server\uff08GDB \u670d\u52a1\u5668\uff09\u8bbe\u7f6e\u4e3a\n<ul>\n<li>Mac\uff1a<em>\/usr\/local\/bin\/JLinkGDBServer.<\/em><\/li>\n<li>Windows\uff1a<em>C:Program Files (x86)SEGGERJLinkJLinkGDBServerCL.exe.<\/em><\/li>\n<li>\u6216\u8005\u60a8\u7684\u7cfb\u7edf\u7684\u9002\u5f53\u8def\u5f84\u3002<\/li>\n<\/ul>\n<\/li>\n<li>\u5c06 <em>GDB Server args<\/em>\uff08GDB \u670d\u52a1\u5668\u5b9e\u53c2\uff09\u8bbe\u7f6e\u4e3a\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">-device nrf52 -strict -timeout 0 -nogui -if swd -speed 4000 -endian little -s<\/pre>\n<\/li>\n<li>\u8bf7\u6ce8\u610f\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u8c03\u6574 <code>-device<\/code> \u5f62\u53c2\u4ee5\u5339\u914d\u60a8\u7684\u8bbe\u5907\u3002 \u6709\u4e00\u4e2a<a href=\"https:\/\/www.segger.com\/downloads\/supported-devices.php\" target=\"_blank\" rel=\"noopener\">\u5b8c\u6574\u7684\u53ef\u7528\u5217\u8868<\/a> \u2013 \u4ece\u4e0b\u62c9\u83dc\u5355\u4e2d\u9009\u62e9 Nordic Semi\uff0c\u5e76\u5bf9\u6b64\u5f62\u53c2\u4f7f\u7528\u76f8\u5173\u7684 Device name\uff08\u8bbe\u5907\u540d\u79f0\uff09\u3002<\/li>\n<\/ol>\n<\/li>\n<li>\u8981\u907f\u514d CLion\/JLink GDB \u670d\u52a1\u5668\u7684<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/CPP-21631\" target=\"_blank\" rel=\"noopener\">\u5df2\u77e5\u95ee\u9898<\/a>\uff0c\u60a8\u53ef\u4ee5\u7ed5\u8fc7\u8be5\u95ee\u9898\u3002 \u6309\u4e24\u6b21 Shift\uff0c\u8f93\u5165\u201cregistry\u201d\uff0c\u6253\u5f00\u6ce8\u518c\u8868\uff0c\u7136\u540e\u5c06\u201ccidr.debugger.gdb.interrupt.signal\u201d\u66f4\u6539\u4e3a\u201cSIGTRAP\u201d\u3002<\/li>\n<li>\u73b0\u5728\uff0c\u60a8\u53ef\u4ee5\u6784\u5efa\u6b64\u76ee\u6807\uff0c\u5b83\u5c06\u6784\u5efa\u5e76\u5237\u5199\uff0c\u6216\u8005\u60a8\u53ef\u4ee5\u8fdb\u884c\u8c03\u8bd5\u3002 \u8c03\u8bd5\u65f6\uff0c\u5982\u679c\u8c03\u8bd5\u5668\u542f\u52a8\u65f6\u672a\u547d\u4e2d\u65ad\u70b9\uff0c\u53ea\u9700\u70b9\u51fb Reset\uff08\u91cd\u7f6e\uff09\u6309\u94ae\u5e76\u7ee7\u7eed\uff1a<br><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/nrf2_4.png\" alt=\"\u8c03\u8bd5\u8fdb\u7a0b\" width=\"250\"><\/li>\n<li>\u60a8\u8fd8\u53ef\u4ee5\u5728\u8c03\u8bd5\u65f6\u67e5\u770b\u8bbe\u5907\u4e0a\u5916\u8bbe\u7684\u72b6\u6001\u3002 \u70b9\u51fb Peripherals\uff08\u5916\u8bbe\uff09\u9009\u9879\u5361\uff0c\u7136\u540e\u70b9\u51fb Load .svd file\uff08\u52a0\u8f7d .svd \u6587\u4ef6\uff09\uff1a<br><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/nrf2_3.png\" alt=\"\u52a0\u8f7d SVD\" width=\"465\"><\/li>\n<li>\u6d4f\u89c8\u5230 <code>&lt;ncsroot&gt;\/modules\/hal\/nordic\/nrfx\/mdk<\/code> \u5e76\u4e3a\u60a8\u7684\u786c\u4ef6\u9009\u62e9 .svd \u6587\u4ef6\uff08\u5bf9\u4e8e nRF52832\uff0c\u8bf7\u4f7f\u7528 <em>nrf52.svd<\/em>\uff09\uff0c\u7136\u540e\u9009\u62e9\u60a8\u8981\u76d1\u63a7\u7684\u5916\u8bbe\u3002 \u5f53\u8c03\u8bd5\u5668\u6682\u505c\u65f6\uff0c\u60a8\u5c06\u80fd\u591f\u68c0\u67e5\u5916\u8bbe\u5bc4\u5b58\u5668\u7684\u503c\uff1a<br><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/nrf2_1.png\" alt=\"\u201c\u5916\u8bbe\u201d\u89c6\u56fe\" width=\"606\"><\/li>\n<\/ol>\n<\/li>\n<li>\u9664\u4e86\u4f7f\u7528 CLion \u8fdb\u884c\u8c03\u8bd5\u4e4b\u5916\uff0c\u4f7f\u7528 Segger Embedded Studio (SES) \u6709\u65f6\u4e5f\u5f88\u6709\u7528\u3002 \u8fd9\u662f Nordic \u6b63\u5f0f\u652f\u6301\u7684 IDE\uff0c\u6240\u4ee5\u5982\u679c\u60a8\u9047\u5230\u95ee\u9898\uff0c\u6700\u597d\u7528\u5b83\u6765\u6d4b\u8bd5\u3002 \u6b64\u5916\uff0c\u5728\u8c03\u8bd5\u65f6\uff0c\u65e0\u9700\u914d\u7f6e\u5373\u53ef\u76f4\u63a5\u5728 IDE \u4e2d\u67e5\u770b RTT \u8f93\u51fa\u3002 \u4f7f\u7528 nRF Connect SDK\uff0c\u60a8\u53ef\u4ee5\u6309\u7167<a href=\"https:\/\/developer.nordicsemi.com\/nRF_Connect_SDK\/doc\/latest\/nrf\/gs_programming.html#building-with-ses\" target=\"_blank\" rel=\"noopener\">\u6307\u5357\u4e2d\u7684\u8bf4\u660e<\/a>\uff0c\u50cf\u6253\u5f00\u4efb\u4f55\u793a\u4f8b\u9879\u76ee\u4e00\u6837\u6253\u5f00\u60a8\u7684\u9879\u76ee\u3002<\/li>\n<li>\u4e0e Nordic \u7684\u6559\u7a0b\u4e00\u6837\uff0c\u5728\u672c\u6307\u5357\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u4e86 ZDebug \u548c ZRelease \u6784\u5efa\u7c7b\u578b\u3002 \u8fd9\u53ef\u4ee5\u907f\u514d CMake \u4e3a C \u548c C++ \u7f16\u8bd1\u5668\u6807\u5fd7\u4f7f\u7528\u5185\u7f6e\u9ed8\u8ba4\u503c\uff0c\u8fd9\u4e9b\u9ed8\u8ba4\u503c\u4e0e Zephyr \u4ece KConfig \u5b9a\u4e49\u7684\u6807\u5fd7\u51b2\u7a81\u3002 \u5982\u679c\u60a8\u60f3\u4f7f\u7528\u6807\u51c6\u7684\u201cDebug\u201d\u548c\u201cRelease\u201d\u6784\u5efa\u7c7b\u578b\uff08\u4f8b\u5982\uff0c\u5982\u679c\u60a8\u6dfb\u52a0\u5230\u9879\u76ee\u4e2d\u7684\u5e93\u4f7f\u7528\u4e86\u8fd9\u4e9b\u7c7b\u578b\uff09\uff0c\u8bf7\u5c3d\u7ba1\u4f7f\u7528\u3002 \u4f46\u662f\uff0c\u60a8\u5fc5\u987b\u91cd\u7f6e CMake \u7684\u9ed8\u8ba4\u6807\u5fd7\uff0c\u5e76\u7981\u7528 Zephyr \u53d1\u51fa\u7684\u8b66\u544a\u3002\n<ol>\n<li>\u6253\u5f00 <code>CMakeLists.txt<\/code> \u6587\u4ef6\u3002 \u5728\u6211\u4eec\u4e4b\u524d\u6dfb\u52a0\u7684 <code>CONF_FILE<\/code> \u884c\u4e4b\u540e\uff0c\u63d2\u5165\uff1a\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\"># CMake sets some default compiler flags in CMAKE_&lt;LANG&gt;_FLAGS_&lt;CONFIG&gt;. Zephyr sets all required flags from KConfig so\n# clear CMake defaults to avoid any conflicts.\nforeach(lang C CXX)\n    set(CMAKE_${lang}_FLAGS \"\")\n    foreach(type DEBUG RELEASE RELWITHDEBINFO MINSIZEREL)\n        set(CMAKE_${lang}_FLAGS_${type} \"\")\n    endforeach()\nendforeach()\n# Suppress a warning from Zephyr about a mismatch between CMAKE_&lt;LANG&gt;_FLAGS_&lt;CONFIG&gt; optimization flags (now empty) and\n# Zephyr's KConfig optimization flags.\nset(NO_BUILD_TYPE_WARNING ON)<\/pre>\n<\/li>\n<li>\u5728 <em>CMakeLists.txt<\/em> \u4e2d\uff0c\u5c06\u9ed8\u8ba4\u7684\u6784\u5efa\u7c7b\u578b\u4ece <em>ZDebug<\/em> \u66f4\u6539\u4e3a <em>Debug<\/em>\u3002<\/li>\n<li>\u5c06 <code>prj.ZDebug.conf<\/code> \u548c <code>prj.ZRelease.conf<\/code> \u91cd\u547d\u540d\u4e3a <code>prj.Debug.conf<\/code> \u548c <code>prj.Release.conf<\/code><\/li>\n<li>\u5728 CLion <em>Settings\/Preferences | Build, Execution, Deployment | CMake<\/em>\uff08\u8bbe\u7f6e\/\u504f\u597d\u8bbe\u7f6e | \u6784\u5efa\u3001\u6267\u884c\u3001\u90e8\u7f72 | CMake\uff09\u4e2d\uff0c\u5c06\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684 <em>Build type<\/em>\uff08\u6784\u5efa\u7c7b\u578b\uff09\u66f4\u6539\u4e3a <code>Debug<\/code> \u548c <code>Release<\/code>\u3002<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>\u73b0\u5728\uff0c\u6211\u4eec\u5df2\u7ecf\u5b8c\u6210\u5728 CLion \u4e2d\u4e3a nRF Connect SDK \u5f00\u53d1\u8bbe\u7f6e\u4e00\u4e2a\u793a\u4f8b\u9879\u76ee\uff01 \u8981\u8be6\u7ec6\u4e86\u89e3 nRF Connect SDK \u5f00\u53d1\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u63a2\u7d22\uff1a<\/p>\n<ul>\n<li>nRF connect SDK \u4e2d\u7684\u5176\u4ed6\u793a\u4f8b\uff1a\n<ul>\n<li><code>&lt;ncsroot&gt;\/nrf\/samples\/bluetooth<\/code> \u2013 \u84dd\u7259\u793a\u4f8b<\/li>\n<li><code>&lt;ncsroot&gt;\/nrf\/samples\/sensor<\/code> \u2013 \u4f20\u611f\u5668\u793a\u4f8b\n<ul>\n<li><code>&lt;ncsroot&gt;\/nrf\/samples\/sensor\/bh1749<\/code> \u2013 I2C \u793a\u4f8b<\/li>\n<\/ul>\n<\/li>\n<li><code>&lt;ncsroot&gt;\/nrf\/samples\/bootloader<\/code> \u2013 Bootloader \u793a\u4f8b<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/developer.nordicsemi.com\/nRF_Connect_SDK\/doc\/1.5.0\/zephyr\/application\/index.html\" target=\"_blank\" rel=\"noopener\">\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1<\/a>\u6307\u5357\uff0c\u5176\u4e2d\u4ecb\u7ecd\u4e86\u60a8\u5c06\u5728\u914d\u7f6e\u9879\u76ee\u7684\u793a\u4f8b\u4e2d\u627e\u5230\u7684\u6587\u4ef6\u3002<\/li>\n<li><a href=\"https:\/\/developer.nordicsemi.com\/nRF_Connect_SDK\/doc\/1.5.0\/zephyr\/guides\/dts\/intro.html\" target=\"_blank\" rel=\"noopener\">\u8bbe\u5907\u6811<\/a>\u6307\u5357\uff0c\u5176\u4e2d\u4ecb\u7ecd\u4e86\u5728 Zephyr \u4e2d\u914d\u7f6e\u786c\u4ef6\u7684\u65b9\u5f0f\u3002<\/li>\n<\/ul>\n<p>\u73b0\u5728\uff0c\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u4e00\u4e0b\u4e86\uff01<\/p>\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com.cn\/clion\/download\" target=\"_blank\" rel=\"noopener\">\u4e0b\u8f7d CLION<\/a><\/p>\n<p style=\"text-align: left;\" align=\"center\">\u672c\u535a\u6587\u82f1\u6587\u539f\u4f5c\u8005\uff1a<\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1297,"featured_media":131617,"comment_status":"closed","ping_status":"closed","template":"","categories":[601],"tags":[3439,3506,617,3581,6540],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/clion\/329858"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/clion"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/types\/clion"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/users\/1297"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/comments?post=329858"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/clion\/329858\/revisions"}],"predecessor-version":[{"id":331754,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/clion\/329858\/revisions\/331754"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media\/131617"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media?parent=329858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/categories?post=329858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/tags?post=329858"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/cross-post-tag?post=329858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}