最近在调试的时候最近新建的一下项目,用的Keil5下载程序后不能运行,debug后能运行 ,发现这个问题还让我纠结了很久,最开始我以为是我换了GD32的原因,是不是需要GDLINK的下载器,结果不是,问题一样的存在,买个GDlink下载器还出了一个小插曲(新下载器固件和排线有问题),GDlink下载器情况一样的存在。
这时我才想到可能问题在我自已,反复调试了一下中点开了汇编页面,发现是BKPT 0XAB处会停下,这里以为是没有用MicroLIB,结果就了的,那就有可能是所谓的半主机模式:semihosting机制 引起的。
参考https://developer.arm.com/documentation/ka002219/latest
我的解决办法就很粗暴了,直接重定一下输出的库函数。
当一下搬动工,在以前的官方示例工程中 把main.c中输出函数相关的COPY过来就解决了。
/* Private function prototypes -----------------------------------------------*/
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{}
return ch;
}
问题完美解决。
发个帖,记录一下自已的问题。 |