打印
[应用相关]

KEIL GNU99下printf 重定义问题求助

[复制链接]
1700|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2021-11-2 16:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

keil5.35

选择ARM COMPILER 6

选择GNU99

在网上找了一些**,说到 要把 int fputc(int ch, FILE *f)替换成    int _write(int fd, char *ptr, int len),但是现在有一些小问题,就是编译后是不会报错的,但是程序没有运行,仿真的时候点run,会停顿在  0x08001CE8 BEAB      BKPT          0xAB,多点几次run就会运行起来,并且打印出来指定的数据。求大佬指点 GNU99下串口重定义还有哪些需要添加的。

  • int _write(int fd, char *ptr, int len)
  • {
  •     int i = 0;
  •     /*
  •      * write "len" of char from "ptr" to file id "fd"
  •      * Return number of char written.
  •      *
  •     * Only work for STDOUT, STDIN, and STDERR
  •      */
  •     if (fd > 2)
  •     {
  •         return -1;
  •     }
  •     while (*ptr && (i < len))
  •     {
  •         usart_send_blocking(USART1, *ptr);
  •         if (*ptr == '\n')
  •         {
  •             usart_send_blocking(USART1, '\r');
  •         }
  •         i++;
  •         ptr++;
  •     }
  •     return i;
  • }


使用特权

评论回复
沙发
flycamelaaa| | 2021-11-2 16:15 | 只看该作者
应该是要选上 use microlib

使用特权

评论回复
板凳
powerantone| | 2021-11-2 16:15 | 只看该作者
ARM COMPILER 6好像用的人不多,太多项目都是ARM COMPILER 5的,这方面资料也比较少。

使用特权

评论回复
地板
stormwind123| | 2021-11-2 16:16 | 只看该作者

6版啊?6版要重写fputc还是啥函数。你去下个stm32cubx,随便生成一个工程,在里面选gnu和uart里面的printf重定向,然后把这部分抄到你的芯片就好了。

使用特权

评论回复
5
koala889| | 2021-11-4 15:52 | 只看该作者
貌似两种重定义都可以,
没加其他的什么,不知道你这里是哪里出问题了

使用特权

评论回复
6
晓伍| | 2021-12-1 09:58 | 只看该作者
这方面的资料比较少

使用特权

评论回复
7
sonicll| | 2021-12-1 10:12 | 只看该作者
AC6编译器继续用fputc()就可以,这个应该只跟编译器有关,跟编译器选择的C语言标准没关系,如果你要用GCC的编译器的话,才需要改成_write

使用特权

评论回复
8
八层楼| | 2021-12-1 12:11 | 只看该作者
只要不报错就好

使用特权

评论回复
9
观海| | 2021-12-1 12:13 | 只看该作者
为什么要重写呢

使用特权

评论回复
10
guanjiaer| | 2021-12-1 12:14 | 只看该作者
写的多了就有经验了

使用特权

评论回复
11
tpgf| | 2021-12-1 13:08 | 只看该作者
这是一个他的功能吗

使用特权

评论回复
12
heimaojingzhang| | 2021-12-1 13:10 | 只看该作者
需要进行一些配置吗

使用特权

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

本版积分规则

1172

主题

5129

帖子

12

粉丝