[国嵌攻略][057][串口控制台建立]

控制台分类

1.菜单型控制台,通过选择菜单来执行命令

2.解析型控制台,通过输入命令来执行命令

 

printf()、scanf()函数移植

1.函数采用变参

2.打印信息到串口

3.关键在于把变参转换成字符串,相关函数需要从Linux内核或标准C库中移植

va_list args;

va_start(args, fmt);

vsprintf(buf, fmt, args);

va_end(args);

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/********************************************************************
*名称:puts
*参数:
    str   输出字符串
*返回:
    i     输出字符数
*功能:输出字符串
*********************************************************************/
int puts(const char *str){
    int i;   //输出字符数
     
    for(i = 0; str[i] != '\0'; i++){   //如果输出字符为结束符,那么结束输出字符串
        putc(str[i]);
    }
     
    return i;
}
 
/********************************************************************
*名称:gets
*参数:
    str   输入字符串
*返回:
    i     输入字符数
*功能:输入字符串
*********************************************************************/
int gets(char *str){   //标准C中返回为char *类型的输入字符串指针
    char ch;   //输入字符
    int i;     //输入字符数
     
    ch = getc_echo();
    for(i = 0; ch != '\r'; i++){   //如果输入字符为回车,那么结束输入字符串
        str[i] = ch;
        ch = getc_echo();
    }
    str[i++] = '\r';   //添加回车
    str[i++] = '\n';   //添加换行
    str[i] = '\0';     //添加结束符
     
    return i;
}
 
/********************************************************************
*名称:printf
*参数:
    format   格式化字符串
*返回:
    num      输出字符数
*功能:格式化输出字符串
*********************************************************************/
int printf(const char *format, ...){
    char buffer[BUFSIZE];   //字符串缓存
    va_list args;           //参数列表
    int num;                //输出字符数
     
    //转换参数为字符串
    va_start(args, format);           //读取参数
    vsprintf(buffer, format, args);   //转换参数为字符串
    va_end(args);                     //结束转换
     
    //输出字符串到串口
    num = puts(buffer);
     
    return num;
}
 
/********************************************************************
*名称:scanf
*参数:
    format   格式化输入字符串
*返回:
    num      输入字符数
*功能:格式化输入字符串
*********************************************************************/
int scanf(const char *format, ...){   //标准C中返回为int类型的是否成功标志
    int num;                //输入字符数
    char buffer[BUFSIZE];   //字符串缓存
    va_list args;           //参数列表
     
    //输入字符串到串口
    num = gets(buffer);
     
    //转换字符串为参数
    va_start(args, format);          //读取参数
    vsscanf(buffer, format, args);   //转换字符串为参数
    va_end(args);                    //结束转换
     
    return num;
}

 

posted @   盛夏夜  阅读(738)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示