printf在TrueSTUDIO中无法使用
printf在TrueSTUDIO不起作用,不知道如何设置。在Keil中可以通过使能MicroLIB来重映射fputc函数来使用printf。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]参数就可以了。
jjbboox 发表于 2018-3-16 17:06
TrueSTUDIO没用过,但是和SW4STM32都用的是GUN的编译器,所以和SW4STM32的方式是一样的,就是重定向 int __ ...
谢谢。你说的很对,得使用__io_putchar进行重映射。在TrueSTUDI上试了试,还是不知道怎么设置。最后找到了解决办法,需要调用一个叫syscalls.c的源文件,配合__io_putchar来实现。 本帖最后由 jjbboox 于 2018-3-16 18:50 编辑
dontknowwhoiam 发表于 2018-3-16 18:19
谢谢。你说的很对,得使用__io_putchar进行重映射。在TrueSTUDI上试了试,还是不知道怎么设置。最后找到 ...
是的,我居然把syscalls.c的事情给忘记了,不好意思哈!另外可能printf如果不输出浮点数的话,那个Linker的参数可以不加。毕竟加上以后会占掉差不多10K的空间。
我不清楚这里的printf是不是通过串口打印信息,我用了一种笨办法,利用sprintf把需要打印的东西做成字符串,用指针*c指向这个字符串,然后用if(*c)判断字符串没有结束,如果没有结束就向串口发送这个字符,最后指针*c++来指向下一个字符,这些东西可以写成一个循环用来串口打印 我是来学习的,,这个编译器还不会用 是不是头文件的问题 先从 PUT 的 Function 一步步开始测起。
你可以参考一下 newlib 的文档和 syscalls.c,里面对于实现哪些功能需要哪些函数有比较详细的介绍的。 看下库例程吧,基本上每个库都会有printf示例的
页:
[1]
2