热门标签 | HotTags
当前位置:  开发笔记 > 大数据 > 正文

nRF52840/52832在Keil启用RTT打印日志的配置指南

 RTT调试不占用串口,也不用接多余的线,在调试时比uart打印日志更加方便。 在nordic的zigbeeblethread3.2SDK(v3.2.0_9fade31),修改目标

 

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

 

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

修改目标工程为

C:\nordic_zigbee_v3.2.0_9fade31\examples\multiprotocol\ble_zigbee\ble_zigbee_dynamic_door_lock_nus\pca10056\s140\arm5_no_packs\ble_zigbee_dynamic_door_lock_pca10056_s140.uvprojx

 


第一步  增加代码

 

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

 

源文件的路径在

X:\nordic_zigbee_v3.2.0_9fade31\external\segger_rtt

 


第二步  修改config

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

增加的代码段如下:

 








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

// 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

// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings.

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

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

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

// longer one will be fragmented.

 

#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE

#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 128

#endif

 

// 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

 

// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries.

// If RTT fails to accept any new data after retries

// module assumes that host is not active and on next

// request it will perform only one write attempt.

// On successful writing, module assumes that host is active

// 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

 

//


 

第二段代码








 

// nRF_Segger_RTT

 

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

// segger_rtt - SEGGER RTT

 

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

// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer.

// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE

// 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

 

// 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

 

// 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

 

// 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

 

// SEGGER_RTT_CONFIG_DEFAULT_MODE  - RTT behavior if the buffer is full.

 

 

// The following modes are supported:

// - SKIP  - Do not block, output nothing.

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

// - 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

 

//

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

 

//

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

 

 


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

 

 

 


第三步  文件路径

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

 

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

..\..\..\..\..\..\..\external\segger_rtt

 

 


第四步  临门一脚

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

 

 

增加的代码如下

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

 

 

第五步 大功告成

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

 

 

所有的工作完成!

 

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

 

------------------------------------------------

Newbit Studio, 感谢你的光临

http://weibo.com/newbittech

------------------------------------------------



推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文讨论了如何在dotnet桌面(Windows)应用程序中添加图标。作者提到可以使用dotnet命令行工具与resource.rc文件一起使用来为标准.NET核心应用程序添加图标。作者还介绍了在创建控制台应用程序时如何编辑projeto1.csproj文件来添加图标。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • STM32与FPGA的对比及学习建议
    本文对比了野火STM32F103指南针板和Xilinx的PYNQ-Z2板(ZYNQ-7020),介绍了野火STM32F103指南针板的学习资料和讲解视频的详细程度,建议初学者学习野火的资料。同时,介绍了STM32开发所用的Keil程序和C指针的重要性。对于ZYNQ-7020的开发,提到了其自带的Linux、Ubuntu18.4系统以及使用SD卡烧入镜像的方法。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 模块化区块链生态系统的优势概述及其应用案例
    本文介绍了相较于单体区块链,模块化区块链生态系统的优势,并以Celestia、Dymension和Fuel等模块化区块链项目为例,探讨了它们解决可扩展性和部署问题的方案。模块化区块链架构提高了区块链的可扩展性和吞吐量,并提供了跨链互操作性和主权可扩展性。开发人员可以根据需要选择执行环境,并获得奖学金支持。该文对模块化区块链的应用案例进行了介绍,展示了其在区块链领域的潜力和前景。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
author-avatar
苦--但是依然love着你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有