zoukankan      html  css  js  c++  java
  • nRF52840/52832 在Keil启用RTT打印日志的配置指南

    RTT调试不占用串口,也不用接多余的线,在调试时比uart打印日志更加方便。

    nordiczigbee/ble/thread 3.2 SDKv3.2.0_9fade31),

    修改目标工程为

    C: ordic_zigbee_v3.2.0_9fade31examplesmultiprotocolle_zigbeele_zigbee_dynamic_door_lock_nuspca10056s140arm5_no_packsle_zigbee_dynamic_door_lock_pca10056_s140.uvprojx

    第一步  增加代码

    在工程中添加rtt相关的C代码文件

     

    源文件的路径在

    X: ordic_zigbee_v3.2.0_9fade31externalsegger_rtt

    第二步  修改config

    sdk_config.h文件中增加启用RTT的宏,这部分在3.2以后的版本可能已经增加,使用时请注意区分。

    增加的代码段如下:

    //==========================================================

    // <e> NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend

    //==========================================================

    #ifndef NRF_LOG_BACKEND_RTT_ENABLED

    #define NRF_LOG_BACKEND_RTT_ENABLED 1

    #endif

    // <o> NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings.

    // <i> Size of the buffer is a trade-off between RAM usage and processing.

    // <i> if buffer is smaller then strings will often be fragmented.

    // <i> It is recommended to use size which will fit typical log and only the

    // <i> longer one will be fragmented.

    #ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE

    #define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 128

    #endif

    // <o> NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT

    #ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS

    #define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1

    #endif

    // <o> NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries.

    // <i> If RTT fails to accept any new data after retries

    // <i> module assumes that host is not active and on next

    // <i> request it will perform only one write attempt.

    // <i> On successful writing, module assumes that host is active

    // <i> and scheme with retry is applied again.

    #ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT

    #define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3

    #endif

    // </e>

    第二段代码

    // <h> nRF_Segger_RTT

    //==========================================================

    // <h> segger_rtt - SEGGER RTT

    //==========================================================

    // <o> SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer.

    // <i> Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE

    // <i> or this value is actually used. It depends on which one is bigger.

    #ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP

    #define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 14000

    #endif

    // <o> SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer.

    #ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS

    #define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2

    #endif

    // <o> SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer.

    #ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN

    #define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16

    #endif

    // <o> SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer.

    #ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS

    #define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2

    #endif

    // <o> SEGGER_RTT_CONFIG_DEFAULT_MODE  - RTT behavior if the buffer is full.

    // <i> The following modes are supported:

    // <i> - SKIP  - Do not block, output nothing.

    // <i> - TRIM  - Do not block, output as much as fits.

    // <i> - BLOCK - Wait until there is space in the buffer.

    // <0=> SKIP

    // <1=> TRIM

    // <2=> BLOCK_IF_FIFO_FULL

    #ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE

    #define SEGGER_RTT_CONFIG_DEFAULT_MODE 0

    #endif

    // </h>

    //==========================================================

    // </h>

    //==========================================================

    增加代码完成之后,可视化的界面(仅截取相关部分)如下

     

    第三步  文件路径

    由于segger_rtt是新添加的,还要在工程中将该文件夹的路径增加到搜索区域。一般使用相对路径,配置的方法如下图:

     

    SDK中,工程不作修改的情况下可以使用以下路径:

    ..............externalsegger_rtt

    第四步  临门一脚

    main()函数,增加一个代码进行测试。

     

    增加的代码如下

    SEGGER_RTT_printf(0,"haha, this is a rtt log ");

    第五步 大功告成

    将上面的工程编译后,下载到目标板,(注意,先不要处于Deubg状态),打开J-Link RTT Viewer v6.60c(也可以是其他版本),这里是windows10,其他操作系统请百度。并且按下F2连接到当前的Jlink。复位目标板,在RTT Viewer 将显示日志如下:

     

    所有的工作完成!

    这个方法适用于Nordic semi芯片的Keil工程,比如nrf52832, 52840等,这里以zigbee-ble混合工程为例,ble / thread工作应该也可以用。不同的IDE可以参照实现。

  • 相关阅读:
    TopCoder12729 「SRM589Medium」GearsDiv1 二分图最小点覆盖
    Codechef RIN 「Codechef14DEC」Course Selection 最小割离散变量模型
    BZOJ3144/LG3227 「HNOI2013」切糕 最小割离散变量模型
    20191214 Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
    [Codeforces868F]Yet Another Minimization Problem
    2020年计算机算法基础理论与应用研讨会小记
    [Codeforces1421E]Swedish Heroes
    [Codechef CCC]Hit the coconuts
    CSP-S 2020
    牛客NOIP2020模拟
  • 原文地址:https://www.cnblogs.com/newbit/p/nordic_rtt.html
Copyright © 2011-2022 走看看