问答

汇集网友智慧,解决技术难题

21ic问答首页 - printf命令报错采

国产芯片 技术交流 printf AT32 AT32_Work_Bench RT

printf命令报错采

zhjb12024-11-12
用AT32_Work_Bench创建工程项目,设置了usart1,在程序中printf命令编译通不过?是否还需要之间什么辅助命令或宏代码?
谢谢
回答 +关注 1
490人浏览 4人回答问题 分享 举报
4 个回答
  • 自己回答:
    浏览网站和案例集 找到一段代码,有点像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文档的最后,再给个空格即可。
  • 要引用库
  • 说白了,就是printf是C库,如果你要用的话,就要在编译阶段链接C库,很多人在用单片机的时候,担心C库对资源、堆栈的占用不可控,所以都是重写部分C库要用到的函数,比如printf
  • 自己解答吧。include "stdio.h"
    后就不报错了,printf命令不报错还是无法打印。
    最后参考厂家原工程,添加了里面的一些语句就可以执行printf语句了
    编程采用keilV5.25。

您需要登录后才可以回复 登录 | 注册