打印

Keil5下载程序后不能运行,debug后能运行 已解决。

[复制链接]
799|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
XY598646744|  楼主 | 2022-5-20 17:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在调试的时候最近新建的一下项目,用的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;
}

问题完美解决。
发个帖,记录一下自已的问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

56

帖子

0

粉丝