Commit 5f1c6ee2 authored by Carles Cufi's avatar Carles Cufi Committed by Anas Nashif
Browse files

console: Add a Segger RTT console driver



The Real Time Terminal functionality of the Segger J-Link
debug probe and software suite allows applications to write
to a certain RAM area that is read in real-time by the
debugger. This is specially useful when a UART is not
available to provide a console.
This commit adds a console driver that outputs over an RTT
"connection".

Change-Id: Ifce8020060e9f519a61f3f1fbe9f56f98da2ef7f
Signed-off-by: default avatarCarles Cufi <carles.cufi@nordicsemi.no>
parent d9150ee3
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -127,6 +127,17 @@ config RAM_CONSOLE_BUFFER_SIZE
	Size of the RAM console buffer. Messages will wrap around if the
	length is exceeded.

config RTT_CONSOLE
	bool
	prompt "Use RTT console"
	depends on HAS_SEGGER_RTT
	select CONSOLE_HAS_DRIVER
	default n
	help
	Emit console messages to a RAM buffer that is then read by the
	Segger J-Link software and displayed on a computer in real-time.
	Requires support for Segger J-Link on the companion IC onboard.

config IPM_CONSOLE_SENDER
	bool
	prompt "Inter-processor Mailbox console sender"
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ obj-$(CONFIG_ENABLE_SHELL) += shells/
obj-$(CONFIG_CONSOLE_HANDLER_SHELL) += console_handler_shell.o
obj-$(CONFIG_UART_CONSOLE) += uart_console.o
obj-$(CONFIG_RAM_CONSOLE) += ram_console.o
obj-$(CONFIG_RTT_CONSOLE) += rtt_console.o
obj-$(CONFIG_IPM_CONSOLE_RECEIVER) += ipm_console_receiver.o
obj-$(CONFIG_IPM_CONSOLE_SENDER) += ipm_console_sender.o
obj-$(CONFIG_UART_PIPE) += uart_pipe.o
+51 −0
Original line number Diff line number Diff line
/* rtt_console.c - Console messages to a RAM buffer that is then read by
 * the Segger J-Link debugger
 */

/*
 * Copyright (c) 2016 Nordic Semiconductor ASA
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#include <kernel.h>
#include <misc/printk.h>
#include <device.h>
#include <init.h>
#include <rtt/SEGGER_RTT.h>

extern void __printk_hook_install(int (*fn)(int));
extern void __stdout_hook_install(int (*fn)(int));

static int rtt_console_out(int character)
{
	char c = (char)character;

	SEGGER_RTT_WriteNoLock(0, &c, 1);
	return character;
}

static int rtt_console_init(struct device *d)
{
	ARG_UNUSED(d);

	SEGGER_RTT_Init();

	__printk_hook_install(rtt_console_out);
	__stdout_hook_install(rtt_console_out);

	return 0;
}

SYS_INIT(rtt_console_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);