再来一版简易的printf函数实现

来源:本站
导读:目前正在解读《再来一版简易的printf函数实现》的相关信息,《再来一版简易的printf函数实现》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《再来一版简易的printf函数实现》的详细说明。
简介:以前发过两版简易的串口printf函数实现,最近学习了一段时间Linux的库文件,回过头又有不同的理解。

这一版函数基于MSP430F169,%d %x %o %b的实现不再由自己编写函数,而是调用MSP430-GCC的标准库函数:

#include

char *itoa(int num, char *str, int radix);

send_fun函数指针,指向调用的UARTx的字节发送函数:

void uart_printf(send_fun fun, char *fmt, ...)

{

char *pnt = (char *)&fmt + sizeof(fmt);

char *str, buf[9];

int radix;

while (*fmt != '') {

if (*fmt != '%') {

fun(*fmt);

fmt += 1;

continue;

}

switch (*(fmt + 1)) {

case 'c':

fun(*((int *)pnt));

pnt += sizeof(int);

fmt += 2;

continue;

case 's':

str = (char *)*((int *)pnt);

while (*str != '')

fun(*str++);

pnt += sizeof(int);

fmt += 2;

continue;

case 'd':

radix = 10;

goto SEND_NUM;

case 'x':

radix = 16;

goto SEND_NUM;

case 'o':

radix = 8;

goto SEND_NUM;

case 'b':

radix = 2;

goto SEND_NUM;

SEND_NUM:

str = itoa(*(int *)pnt, buf, radix);

while (*str != '')

fun(*str++);

pnt += sizeof(int);

fmt += 2;

continue;

default:

break;

}

}

}

实际上,库stdio.h中也提供了printf的实现,直接调用它们就可以了:

int __attribute__((format (printf, 2, 3))) uprintf(int (*func)(int c), const char *fmt, ...);

提醒:《再来一版简易的printf函数实现》最后刷新时间 2024-03-14 01:01:42,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《再来一版简易的printf函数实现》该内容的真实性请自行鉴别。