dontknowwhoiam 发表于 2018-3-16 16:53:45

printf在TrueSTUDIO中无法使用

printf在TrueSTUDIO不起作用,不知道如何设置。在Keil中可以通过使能MicroLIB来重映射fputc函数来使用printf。

jjbboox 发表于 2018-3-16 17:06:29

TrueSTUDIO没用过,但是和SW4STM32都用的是GUN的编译器,所以和SW4STM32的方式是一样的,就是重定向 int __io_putchar(int ch)函数,而不是KEIL的fputc函数。
int __io_putchar(int ch) {
      HAL_UART_Transmit(&huart2, (uint8_t*)&ch, 1, 0xffff);
      return ch;
}


这样就可以用了。
另外在工程属性设置的->->->->->中添加[-u _printf_float]参数就可以了。


dontknowwhoiam 发表于 2018-3-16 18:19:16

jjbboox 发表于 2018-3-16 17:06
TrueSTUDIO没用过,但是和SW4STM32都用的是GUN的编译器,所以和SW4STM32的方式是一样的,就是重定向 int __ ...

谢谢。你说的很对,得使用__io_putchar进行重映射。在TrueSTUDI上试了试,还是不知道怎么设置。最后找到了解决办法,需要调用一个叫syscalls.c的源文件,配合__io_putchar来实现。

jjbboox 发表于 2018-3-16 18:48:35

本帖最后由 jjbboox 于 2018-3-16 18:50 编辑

dontknowwhoiam 发表于 2018-3-16 18:19
谢谢。你说的很对,得使用__io_putchar进行重映射。在TrueSTUDI上试了试,还是不知道怎么设置。最后找到 ...
是的,我居然把syscalls.c的事情给忘记了,不好意思哈!另外可能printf如果不输出浮点数的话,那个Linker的参数可以不加。毕竟加上以后会占掉差不多10K的空间。

xmstudio 发表于 2018-3-22 08:20:14

我不清楚这里的printf是不是通过串口打印信息,我用了一种笨办法,利用sprintf把需要打印的东西做成字符串,用指针*c指向这个字符串,然后用if(*c)判断字符串没有结束,如果没有结束就向串口发送这个字符,最后指针*c++来指向下一个字符,这些东西可以写成一个循环用来串口打印

dsjsjf 发表于 2018-3-22 09:09:07

我是来学习的,,这个编译器还不会用

feixiang20 发表于 2018-3-22 09:13:11

是不是头文件的问题

x5y4z3 发表于 2018-3-22 09:26:12

先从 PUT 的 Function 一步步开始测起。

maxtch 发表于 2018-3-22 13:30:09

你可以参考一下 newlib 的文档和 syscalls.c,里面对于实现哪些功能需要哪些函数有比较详细的介绍的。

anobodykey 发表于 2018-3-22 22:23:22

看下库例程吧,基本上每个库都会有printf示例的
页: [1] 2
查看完整版本: printf在TrueSTUDIO中无法使用