52 lines
1.1 KiB
C
52 lines
1.1 KiB
C
/*
|
|
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include "pico/stdio/driver.h"
|
|
#include "pico/stdio_semihosting.h"
|
|
#include "pico/binary_info.h"
|
|
|
|
//static void __attribute__((naked)) semihosting_puts(const char *s) {
|
|
// __asm (
|
|
//
|
|
// "mov r1, r0\n"
|
|
// "mov r0, #4\n"
|
|
// "bkpt 0xab\n"
|
|
// "bx lr\n"
|
|
// );
|
|
//}
|
|
|
|
static void __attribute__((naked)) semihosting_putc(char c) {
|
|
__asm (
|
|
|
|
"mov r1, r0\n"
|
|
"mov r0, #3\n"
|
|
"bkpt 0xab\n"
|
|
"bx lr\n"
|
|
);
|
|
}
|
|
|
|
|
|
static void stdio_semihosting_out_chars(const char *buf, int length) {
|
|
for (uint i = 0; i <length; i++) {
|
|
semihosting_putc(buf[i]);
|
|
}
|
|
}
|
|
|
|
stdio_driver_t stdio_semihosting = {
|
|
.out_chars = stdio_semihosting_out_chars,
|
|
#if PICO_STDIO_ENABLE_CRLF_SUPPORT
|
|
.crlf_enabled = PICO_STDIO_SEMIHOSTING_DEFAULT_CRLF
|
|
#endif
|
|
};
|
|
|
|
void stdio_semihosting_init() {
|
|
#if !PICO_NO_BI_STDIO_SEMIHOSTING
|
|
bi_decl_if_func_used(bi_program_feature("semihosting stdout"));
|
|
#endif
|
|
stdio_set_driver_enabled(&stdio_semihosting, true);
|
|
}
|
|
|