[应用相关] KEIL GNU99下printf 重定义问题求助

[复制链接]
 楼主| 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重定向,然后把这部分抄到你的芯片就好了。
koala889 发表于 2021-11-4 15:52 | 显示全部楼层
貌似两种重定义都可以,
没加其他的什么,不知道你这里是哪里出问题了
晓伍 发表于 2021-12-1 09:58 | 显示全部楼层
这方面的资料比较少
sonicll 发表于 2021-12-1 10:12 | 显示全部楼层
AC6编译器继续用fputc()就可以,这个应该只跟编译器有关,跟编译器选择的C语言标准没关系,如果你要用GCC的编译器的话,才需要改成_write
八层楼 发表于 2021-12-1 12:11 | 显示全部楼层
只要不报错就好
观海 发表于 2021-12-1 12:13 | 显示全部楼层
为什么要重写呢
guanjiaer 发表于 2021-12-1 12:14 | 显示全部楼层
写的多了就有经验了
tpgf 发表于 2021-12-1 13:08 | 显示全部楼层
这是一个他的功能吗
heimaojingzhang 发表于 2021-12-1 13:10 | 显示全部楼层
需要进行一些配置吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1296

主题

6236

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部