printf命令报错采

[复制链接]
658|4
手机看帖
扫描二维码
随时随地手机跟帖
zhjb1|  楼主 | 2024-11-12 20:31 | 显示全部楼层

printf命令报错采

自己解答吧。include "stdio.h"
后就不报错了,printf命令不报错还是无法打印。
最后参考厂家原工程,添加了里面的一些语句就可以执行printf语句了
编程采用keilV5.25。

使用特权

评论回复
飞思啦| | 2024-11-13 09:26 | 显示全部楼层
说白了,就是printf是C库,如果你要用的话,就要在编译阶段链接C库,很多人在用单片机的时候,担心C库对资源、堆栈的占用不可控,所以都是重写部分C库要用到的函数,比如printf

使用特权

评论回复
xionghaoyun| | 2024-11-13 10:43 | 显示全部楼层
要引用库

使用特权

评论回复
zhjb1|  楼主 | 2024-11-13 17:00 | 显示全部楼层
自己回答:
浏览网站和案例集 找到一段代码,有点像STM中CubeMX生成工程无法运行printf相似,拿来之后可以了,代码如下:
#if (__ARMCC_VERSION > 6000000)
__asm (".global __use_no_semihosting\n\t");
void _sys_exit(int x){x = x;}
//__use_no_semihosting was requested, but _ttywrch was
void _ttywrch(int ch){ch = ch;}
FILE __stdout;
#else
#ifdef __CC_ARM
  #pragma import(__use_no_semihosting)
  struct __FILE
  {int handle;};
  FILE __stdout;
  void _sys_exit(int x){x = x;}
#endif
#endif

#if defined ( __GNUC__ ) && !defined (__clang__)
//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
PUTCHAR_PROTOTYPE{
  while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET);
  usart_data_transmit(USART1, ch);
  return ch;
}
将这段代码拷贝到main.c文档的最后,再给个空格即可。

使用特权

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

本版积分规则

52

主题

248

帖子

1

粉丝