




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新天际租赁合同范本
- 细菌性食物中毒说课稿-2025-2026学年中职专业课-烹饪营养与安全-中餐烹饪-旅游大类
- 3.3DNA复制方式的推测和实验证据教学设计-2023-2024学年高一下学期生物人教版(2019)必修2
- 快递加盟经营合同
- 1.13 近似数说课稿-2025-2026学年初中数学华东师大版2024七年级上册-华东师大版2024
- 6.2 多彩的职业(说课稿)九年级道德与法治下册同步高效课堂(统编版)
- 关于国庆节周记范文锦集7篇
- 中医学试题及答案
- 商业街区商铺产权交易及社区配套服务合同
- 智能家居体验店租赁及产品销售合同
- 肇庆端州正西社区评估报告
- 朝天椒栽培技术课件
- 科研伦理与学术规范-课后作业答案
- -首次执行衔接问题-行政
- 斯蒂芬金英语介绍
- 秋天的雨 省赛获奖
- JJF 1015-2014计量器具型式评价通用规范
- GB/T 8332-2008泡沫塑料燃烧性能试验方法水平燃烧法
- GB/T 38597-2020低挥发性有机化合物含量涂料产品技术要求
- GB/T 21073-2007环氧涂层七丝预应力钢绞线
- 胸痛的诊断和鉴别诊断课件整理
评论
0/150
提交评论