1 基于J-Link的调试信息输出

基本模块的驱动 1 基于J-Link的调试信息输出 J-Link RTT 简介
通过RTT可以从目标微控制器输出信息以非常高的速度向应用程序发送输入而不影响目标微控制器的实时性 。
RTT可与任何J-Link型号和任何支持的目标处理器一起使用允许后台内存访问 , 即-M和RX目标 。
RTT支持两个方向的多个通道 , 向主机上传数据和由主机发送数据到从机 , 它可以用于不同的目的 , 为用户提供最大可能的自由 。

1 基于J-Link的调试信息输出

文章插图
SDK中的 介绍
是提供的一个日志输出的库 , 主要特性如下:
提供了两种打印输出机制:
即时输出模式下当调用打印输出函数时 , 会马上对输出信息进行处理并交给后端所选输出方式进行输出 , 虽然后端输出可以对要输出的数据进行缓冲 , 但是一旦后端执行返回后又可以马上执行前端的打印输出调用 , 这种处理方式是简单粗暴的不是最优的 , 还会影响芯片性能 , 尤其是在中断上下文中使用打印输出的情况下 。这种操作不是线程安全的 , 可能会导致打印输出的信息不对 。
空闲输出模式下当调用打印输出函数时 , 指向要打印输出信息的指针会被存储到一个内部缓冲区中 , 并不会执行具体的输出 。当用户认为现在芯片为空闲状态时可以调用相应的处理函数触发真正的打印输出 。
使用空闲输出模式有以下几点限制:
工程建立
进入SDK跟目录下新建一个名为L-Stick的文件夹 , 然后再在L-Stick文件夹内创建一个名为basic的文件夹来存储我们本章中的实验代码 , 然后再在basic文件夹内创建一个名为RTT的文件夹来存储我们本节的例子 。
我们从SDK中的blink的例子复制以下文件到我们本节的工程目录RTT下
然后打开文件稍稍改动以下使我们的RTT工程能够正常编译
第5行 := ../../../../../..修改为 := ../../../第6行:= ../../..修改为:= ./删除第38行整行
然后打开终端cd到我们本节的RTT目录下就可以执行make命令进行编译了 。
修改.h
打开我们在 4.1.3 建立的工程目录下的.h文件将文件中的内容全部删除 , 替换为下面的内容
#ifndef SDK_CONFIG_H#define SDK_CONFIG_H// Logger#define NRF_LOG_ENABLED 1#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1#define NRF_LOG_USES_COLORS 1#define NRF_LOG_COLOR_DEFAULT 0#define NRF_LOG_ERROR_COLOR 2#define NRF_LOG_WARNING_COLOR 4#define NRF_LOG_DEFAULT_LEVEL 4#define NRF_LOG_DEFERRED 0#define NRF_LOG_BUFSIZE 1024#define NRF_LOG_ALLOW_OVERFLOW 1#define NRF_LOG_USES_TIMESTAMP 0#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 32768#define NRF_LOG_FILTERS_ENABLED 0#define NRF_LOG_CLI_CMDS 0#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8// Log RTT backend#define NRF_LOG_BACKEND_RTT_ENABLED 1#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3// SEGGER RTT#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0// Block allocator module#define NRF_BALLOC_ENABLED 1#define NRF_BALLOC_CLI_CMDS 0#define NRF_BALLOC_CONFIG_LOG_ENABLED 0#define NRF_BALLOC_CONFIG_LOG_LEVEL 3#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3#define NRF_BALLOC_CONFIG_INFO_COLOR 0#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0// fprintf function#define NRF_FPRINTF_ENABLED 1#endif