嵌入式 > 技术百科 > 详情

单片机系统重写printf函数

发布时间:2020-12-17 发布时间:
|

//将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);

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用于MAX7456随屏显示器SPI