/* | |
* Copyright (c) 2019 LuoZhongYao | |
* SPDX-License-Identifier: Apache-2.0 | |
*/ | |
#include <kernel.h> | |
#include <device.h> | |
#include <init.h> | |
#include <sys/printk.h> | |
extern void __printk_hook_install(int (*fn)(int)); | |
extern void __stdout_hook_install(int (*fn)(int)); | |
static int semihost_console_out(int ch) | |
{ | |
static unsigned char c; | |
c = ch; | |
__asm__ __volatile__ ( | |
"movs r1, %0\n" | |
"movs r0, #3\n" | |
"bkpt 0xab\n" | |
: | |
: "r" (&c) | |
: "r0", "r1"); | |
return ch; | |
} | |
static int semihost_console_init(const struct device *dev) | |
{ | |
ARG_UNUSED(dev); | |
__printk_hook_install(semihost_console_out); | |
__stdout_hook_install(semihost_console_out); | |
return 0; | |
} | |
SYS_INIT(semihost_console_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); |