stm32多串口公用printf的问题.docx_第1页
stm32多串口公用printf的问题.docx_第2页
stm32多串口公用printf的问题.docx_第3页
stm32多串口公用printf的问题.docx_第4页
stm32多串口公用printf的问题.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网上找到的资料,支持多串口printf,但编译提示:.SYSTEMusartusart.c(64): error: #77-D: this declaration has no storage class or type specifierPUTCHAR_POTOTYPE 该如何操作?#include #ifdef_GNUC_#definePUTCHAR_PROTOTYPE int _io_putchar(int ch)#else#definePUTCHAR_PROTOTYPE int fputc (int ch, FILE *f)#endifPUTCHAR_POTOTYPEUSART_SendData(USART1, (u8) ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)=RESET); return ch;void USART3_printf(char *fmt, .)char bufferCMD_BUFFER_LEN+1;u8i=0;va_listarg_ptr;va_start(arg_ptr,fmt);vsnprintf(buffer,CMD_BUFFER_LEN+1,fmt,arg_ptr);while(iCMD_BUFFER_LEN) & bufferi)USART_SendData(USART3, (u8)bufferi+);while(USART_GetFlagStatus(USART3,USART_FLAG_TC)=RESET);va_end(arg_ptr);2012/07/15 19:111楼正点原子等级:站长注册时间:2010/12/02 10:41回复数: 43927主题数: 356酷贴数:25论坛积分:47495来自: 湖南离线这等于你自己重构了一个.printf一个就够了吧,其他可以直接用写DR的方式.没发现printf不够用过.我的淘宝小店:回复2012/07/15 22:242楼licgang等级:注册时间:2012/06/19 11:08回复数: 20主题数: 5论坛积分:35离线现在是要用2个串口,如果不用printf函数的话,程序处理上比较麻烦,输出的格式有点多回复2012/07/15 23:063楼正点原子等级:站长注册时间:2010/12/02 10:41回复数: 43927主题数: 356酷贴数:25论坛积分:47495来自: 湖南离线哦,那你得找找能支持2个printf的实现方法.我的淘宝小店:回复2012/08/05 11:204楼licgang等级:注册时间:2012/06/19 11:08回复数: 20主题数: 5论坛积分:35离线这两天有空研究了下printf函数,参照网上资料自己写了个模拟printf函数,这样可以方便实现多串口printf了其实printf函数最关键的就是可变参数的获取了,这里要用到stdarg.h库,经过测试基本没有问题了。void myitoa(int data,char *buf )int temp,j=0,i=0;while(data)/反序生成数字,可自己取个数字测试,如123,反序字符数组中的值为321 bufi+ = data%10+0;/将转换后的数字字符存放在字符数组中 data = data/10;/删除已经转换的数字,为取下一个数字做好准备bufi-=0;/转换完后还需要在字符数组后面加一个字符串结束标志/0,代表是一个字符串while( j i )/刚刚转换好的字符串是逆序的必须把它反转过来temp = bufj;bufj = bufi;bufi = temp;i-,j+;/-COM3 printf-/void DBGprintf(const char *format, .)va_list ap;char c,nc;va_start(ap, format);/从右到左将参数入栈,ap指向formatwhile (c = *format+)if(c = %&(nc = *format+) != 0)switch(nc) case c: /输出1个字符 char ch = va_arg(ap, int); /调用后栈位置+1 DBG_SendASC(ch); /com3发送字符 break; case s: /输出字符串 char *p = va_arg(ap, char *); DBG_SendStr(u8 *)p); /com3发送字符串 break; case d:int data = va_arg(ap,int); char buf16; myitoa(data,buf); DBG_SendStr(u8 *)buf); break; default: DBG_SendASC(nc); elseDBG_SendASC(c); va_end(ap);/关闭指针回复2012/08/05 11:245楼正点原子等级:站长注册时间:2010/12/02 10:41回复数: 43927主题数: 356酷贴数:25论坛积分:47495来自: 湖南离线可以写成形如:myprintf(u8uartx,constchar*format,.)其中,uartx,就是要输出的串口,比如1,2,3,4,5对应串口15.后见面的两个参数就是标准的printf参数了.这样使用起来更方便.我的淘宝小店:回复2012/08/05 11:546楼licgang等级:注册时间:2012/06/19 11:08回复数: 20主题数: 5论坛积分:35离线后面是要这样写方便些,贴出代码来主要是让大家看下,顺便测试看有没有什么问题,目前测试都还正常刚才测试打印INT整数,发现STM32int是32位的,上面程序默认的INT类型是有符号的,超出0x7fffffff,输出不正常。这个要对程序做些修改才行,这点使用的时候要注意了网上找到的资料,支持多串口printf,但编译提示:.SYSTEMusartusart.c(64): error: #77-D: this declaration has no storage class or type specifierPUTCHAR_POTOTYPE 该如何操作?#include #ifdef_GNUC_#definePUTCHAR_PROTOTYPE int _io_putchar(int ch)#else#definePUTCHAR_PROTOTYPE int fputc (int ch, FILE *f)#endifPUTCHAR_POTOTYPEUSART_SendData(USART1, (u8) ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)=RESET); return ch;void USART3_printf(char *fmt, .)char bufferCMD_BUFFER_LEN+1;u8i=0;va_listarg_ptr;va_start(arg_ptr,fmt);vsnprintf(buffer,CMD_BUFFER_LEN+1,fmt,arg_ptr);while(iCMD_BUFFER_LEN) & bufferi)USART_SendData(USART3, (u8)bufferi+);while(USART_GetFlagStatus(USART3,USART_FLAG_TC)=RESET);va_end(arg_ptr);这两天有空研究了下printf函数,参照网上资料自己写了个模拟printf函数,这样可以方便实现多串口printf了其实printf函数最关键的就是可变参数的获取了,这里要用到stdarg.h库,经过测试基本没有问题了。void myitoa(int data,char *buf )int temp,j=0,i=0;while(data)/反序生成数字,可自己取个数字测试,如123,反序字符数组中的值为321 bufi+ = data%10+0;/将转换后的数字字符存放在字符数组中 data = data/10;/删除已经转换的数字,为取下一个数字做好准备bufi-=0;/转换完后还需要在字符数组后面加一个字符串结束标志/0,代表是一个字符串while( j i )/刚刚转换好的字符串是逆序的必须把它反转过来temp = bufj;bufj = bufi;bufi = temp;i-,j+;/-COM3 printf-/void DBGprintf(const char *format, .)va_list ap;char c,nc;va_start(ap, format);/从右到左将参数入栈,ap指向formatwhile (c = *format+)if(c = %&(nc = *format+) != 0)switch(nc) case c: /输出1个字符 char ch = va_arg(ap, int); /调用后栈位置+1 DBG_SendASC(ch); /com3发送字符 break; case s: /输出字符串 char *p = va_arg(ap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论