Hello guys!
I'm having a problem here. I want to use the printf() function in a STM32F3 application to print debug messages to UART1. I've done this before on a M0 and worked like a charm.
The problem on the M4 is this: If I declare
#pragma import (__use_no_semihosting)
to append my own putc function to print the printf() output to a UART I get linker error
L6915E: Library reports error: __use_no_semihosting was requested, but _sys_exit was referenced
I'm using full assert and the std periph lib nothing more...
Any idea to fix that? Thanks!
When retargeting I use this :
//****************************************************************************** #include <rt_misc.h> #pragma import(__use_no_semihosting_swi) struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int ch, FILE *f) { ITM_SendChar(ch); return(ch); } int fgetc(FILE *f) { char ch; ch = 1; return((int)ch); } int ferror(FILE *f) { /* Your implementation of ferror */ return EOF; } void _ttywrch(int ch) { ITM_SendChar(ch); } void _sys_exit(int return_code) { label: goto label; /* endless loop */ } //******************************************************************************
Hi, Westonsupermare Pier.
I've been having some problem when I try to use printf on this configuration. Everything goes OK, compile and linker part, but when I run debug I've got a HardFault Exception. It happens at the exact moment when it tries to call the printf function. Do you have any idea what it is?
Look in the disassembly view at exactly what is faulting. Review the code in the context of the registers.
If it is a BKPT instruction, then it is linking in the wrong code.
Is the stack adequate for the printf() to function? It is faulting on a memory access, or and instruction issue?
View all questions in Keil forum