AC78 printf
时间: 2023-11-12 14:55:10 浏览: 30
AC78并不是一个常见的编译器版本,所以很可能你的问题是针对AC6或者AC7的。根据引用提到的问题描述,你在从AC5迁移到AC6时遇到了问题。根据引用提到的,你可能需要用不同的方法来处理printf的retarget。可以尝试使用Arm Compiler 6的retarget方法来替代Arm Compiler 5的方法。你可以在代码中实现fputc和fgetc函数,并将这些函数与串口的发送和接收函数进行绑定。
相关问题
AC7801 printf
AC7801使用Arm Compiler 6时,printf retarget的做法与Arm Compiler 5相同。具体做法是通过定义fputc和fgetc函数来重定向printf输出到串口。例如,可以使用以下代码:
int fputc(int ch, FILE *f) {
return uartSendChar(ch);
}
int fgetc(FILE *f) {
return uartReceiveChar();
}
对于AC7801使用MicroLIB编译时报错的问题,可以使用以下条件编译来解决:
#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
// Arm Compiler
#elif defined __GNUC__
// Normal GCC
#endif
关于printf串口输出的retarget,如果选择了AC5的默认优化等级-O0,可能会导致代码执行效率低下。而AC6编译器在-O0优化等级下,n级条件表达式可能会产生巨大的栈需求。因此,需要调整为-O0以外的优化等级来提高代码执行效率。
printf输出浮点数的格式
在C语言中,可以使用以下格式符来输出浮点数:
- %f:输出单精度浮点数,以小数形式输出。
- %lf:输出双精度浮点数,以小数形式输出。
- %e:输出单精度浮点数,以指数形式输出。
- %le:输出双精度浮点数,以指数形式输出。
- %g:根据实际情况输出单精度或双精度浮点数,以小数或指数形式输出。
另外,可以使用修饰符来控制输出的精度和宽度,例如 %.2f 表示输出两位小数。