博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单片机系统重写printf函数
阅读量:4223 次
发布时间:2019-05-26

本文共 694 字,大约阅读时间需要 2 分钟。

 

//将stdio.h头文件中的printf函数注释掉不然会冲突//stdio.h头文件还是要包含的里面有va_list的定义//使用vsprintf将要打印的数据赋给字符串//使用字符串发送函数发送字符串 //不要把这个数组放在printf函数里面,一方面会在栈分配内存上耗费时间//另一方面也是最主要的如果栈空间不够了还要分配100个字节那就会导致//堆栈溢出,CC2530使用256字节的IDATA的一部分作为栈空间,我设置成了0xC0//也就是192字节,在函数调用层次很深的时候在调用printf函数就会很容易//导致堆栈溢出,出现莫名其妙的问题。char string[100];void printf(char *fmt,...){    va_list ap;                	//typedef char *va_list; va_list是char型的指针    va_start(ap,fmt);        	//这个函数的功能是,找到第一个可变形参的地址,并把地址赋给ap    vsprintf(string,fmt,ap);	//其实这个函数才是核心函数,没研究。。。    UartSendString(string);    	//这个函数就是发送字符串函数,通过上一个函数,就把该提取的东西都提取了    va_end(ap);                	//结束函数}

其实使用sprintf函数就可以实现printf功能了,例如:

sprintf(string,fmt,...);UartSendString(string);

 

 

转载地址:http://huemi.baihongyu.com/

你可能感兴趣的文章
编写苹果游戏中心应用程序(翻译 1.8 获取本地玩家的好友信息)
查看>>
WebGL自学教程《OpenGL ES 2.0编程指南》翻译——勘误表
查看>>
WebGL自学教程——WebGL示例:12. 要有光
查看>>
WebGL自学教程——WebGL示例:13.0 代码整理
查看>>
WebGL自学教程——WebGL示例:14.0 代码整理
查看>>
恶心的社会
查看>>
中国式危机公关9加1策略(第五章 慎用信息控制策略)
查看>>
展现自己的人生智慧
查看>>
深入理解java多态性
查看>>
Java新手进阶:细说引用类型
查看>>
osg中使用MatrixTransform来实现模型的平移/旋转/缩放
查看>>
(一) Qt Model/View 的简单说明
查看>>
(二)使用预定义模型 QStringListModel例子
查看>>
UVM:7.4.5 加入存储器
查看>>
UVM:7.5.1 期望值与镜像值
查看>>
UVM:7.5.2 常用操作及其对期望值和镜像值的影响
查看>>
UVM:7.6.1 检查后门访问中hdl 路径的sequence
查看>>
UVM:7.6.2 检查默认值的sequence
查看>>
UVM:7.7.1 使用reg_predictor
查看>>
UVM:7.7.2 使用UVM_PREDICT_DIRECT功能与mirror 操作
查看>>