最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

stm32多串口公用printf的问题

IT圈 admin 59浏览 0评论

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 )

发布评论

评论列表 (0)

  1. 暂无评论