2024年4月2日发(作者:皋思慧)
网上找到的资料,支持多串口printf,但编译提示:
..SYSTEMusartusart.c(64): error: #77-D: this declaration
has no storage class or type specifier
PUTCHAR_POTOTYPE 该如何操作?
#include
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc (int ch, FILE
*f)
#endif
PUTCHAR_POTOTYPE
{
USART_SendData(USART1, (u8) ch);
while(USART_GetFlagStatus(USART1,USART_FL
AG_TC)==RESET);
return ch;
}
void USART3_printf(char *fmt, ...)
{
char buffer[CMD_BUFFER_LEN+1];
u8 i=0;
va_list arg_ptr;
va_start(arg_ptr,fmt);
vsnprintf(buffer,CMD_BUFFER_LEN+1,fmt,arg_pt
r);
while((i { USART_SendData(USART3, (u8)buffer[i++]); while(USART_GetFlagStatus(USART3,USART_FL AG_TC)==RESET); } va_end(arg_ptr); } 2012/07/15 19:11 这等于你自己重构了一个... printf一个就够了吧,其他可以直 接用写DR的方式.没发现printf 不够用过... [1楼] 正点原子 等级: 站长 注册时间:2010/12/02 10:41 回复数: 43927 我的淘宝小店: 主题数: 356 酷贴数:25 论坛积分:47495 来自: 湖南 离线 回复 2012/07/15 22:24 现在是要用2个串口,如果不用 printf函数的话,程序处理上比 较麻烦,输出的格式有点多 [2楼] licgang 等级: 注册时间:2012/06/19 11:08 回复数: 20 主题数: 5 论坛积分:35 离线 回复 2012/07/15 23:06 [3楼] 正点原子 哦,那你得找找能支持2个printf 的实现方法. 等级: 站长 注册时间:2010/12/02 10:41 回复数: 43927 主题数: 356 酷贴数:25 论坛积分:47495 来自: 湖南 离线 我的淘宝小店: 2012/08/05 11:20 回复 [4楼] licgang 等级: 注册时间:2012/06/19 11:08 回复数: 20 主题数: 5 论坛积分:35 离线 这两天有空研究了下printf函 数,参照网上资料自己写了个模 拟printf函数,这样可以方便实 现多串口printf了 其实printf函数最关键的就是可 变参数的获取了,这里要用到 stdarg.h库,经过测试基本没有 问题了。 void myitoa(int data,char *buf )
2024年4月2日发(作者:皋思慧)
网上找到的资料,支持多串口printf,但编译提示:
..SYSTEMusartusart.c(64): error: #77-D: this declaration
has no storage class or type specifier
PUTCHAR_POTOTYPE 该如何操作?
#include
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc (int ch, FILE
*f)
#endif
PUTCHAR_POTOTYPE
{
USART_SendData(USART1, (u8) ch);
while(USART_GetFlagStatus(USART1,USART_FL
AG_TC)==RESET);
return ch;
}
void USART3_printf(char *fmt, ...)
{
char buffer[CMD_BUFFER_LEN+1];
u8 i=0;
va_list arg_ptr;
va_start(arg_ptr,fmt);
vsnprintf(buffer,CMD_BUFFER_LEN+1,fmt,arg_pt
r);
while((i { USART_SendData(USART3, (u8)buffer[i++]); while(USART_GetFlagStatus(USART3,USART_FL AG_TC)==RESET); } va_end(arg_ptr); } 2012/07/15 19:11 这等于你自己重构了一个... printf一个就够了吧,其他可以直 接用写DR的方式.没发现printf 不够用过... [1楼] 正点原子 等级: 站长 注册时间:2010/12/02 10:41 回复数: 43927 我的淘宝小店: 主题数: 356 酷贴数:25 论坛积分:47495 来自: 湖南 离线 回复 2012/07/15 22:24 现在是要用2个串口,如果不用 printf函数的话,程序处理上比 较麻烦,输出的格式有点多 [2楼] licgang 等级: 注册时间:2012/06/19 11:08 回复数: 20 主题数: 5 论坛积分:35 离线 回复 2012/07/15 23:06 [3楼] 正点原子 哦,那你得找找能支持2个printf 的实现方法. 等级: 站长 注册时间:2010/12/02 10:41 回复数: 43927 主题数: 356 酷贴数:25 论坛积分:47495 来自: 湖南 离线 我的淘宝小店: 2012/08/05 11:20 回复 [4楼] licgang 等级: 注册时间:2012/06/19 11:08 回复数: 20 主题数: 5 论坛积分:35 离线 这两天有空研究了下printf函 数,参照网上资料自己写了个模 拟printf函数,这样可以方便实 现多串口printf了 其实printf函数最关键的就是可 变参数的获取了,这里要用到 stdarg.h库,经过测试基本没有 问题了。 void myitoa(int data,char *buf )