linux与window的\r与\n

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
应用程序
void niuniu(void)
{
    char buf[16];
    char *p[6];
    int i;
 
    led_init();
    uart_init();
 
    while(1)
    {
        puts("\r\nuart> ");
        gets(buf);
        // 去掉\r\n
        buf[strlen(buf)-2] = '\0';
        // strtok函数会使用全局变量
        p[0] = strtok(buf, " ");
        for(i=1; p[i-1]!=NULL; i++)
        {
            p[i] = strtok(NULL, " ");
        }
        if(strcmp(p[0], "ledon") == 0)
        {
            if(strcmp(p[1], "all") == 0)
            {
                for(i=1; i<5; i++)
                {
                    led_on(i);
                }
            }
            else
            {
                for(i=1; p[i]!=NULL; i++)
                {
                    led_on(*p[i]-48);
                }
            }
        }
        if(strcmp(p[0], "ledoff") == 0)
        {
            if(strcmp(p[1], "all") == 0)
            {
                for(i=1; i<5; i++)
                {
                    led_off(i);
                }
            }
            else
            {
                for(i=1; p[i]!=NULL; i++)
                {
                    led_off(*p[i]-48);
                }
            }
        }
    }
}
#endif
///////////驱动程序
#if UART==1
void uart_init(void)
{
    // 选择GPH2和GPH3的功能为UART
    GPH.GPHCON = ((~(0xf<<4))&GPH.GPHCON)|(0xa<<4);
 
    // 配置UART0为,8位数据,无校验,1位停止位,正常模式
    UART0.ULCON0 = 0x3;
    // 配置UART0为,中断或者轮巡方式
    UART0.UCON0 = 0x5;
    // 配置UART0为,波特率9600
    // 12M/(9600*16)-1
    UART0.UBRDIV0 = 0x4d;
}
 
void putc(char c)
{
    // 数据放入发送保持寄存器,然后在波特率协调下,发送移位器把保持寄存器中的数据一位一位的发送出去
    UART0.UTXH0 = c;
 
    // 等待发送保持寄存器中的数据发送完毕
    while(!(UART0.UTRSTAT0&(0x1<<1)))
    {
    }
}
 
void puts(char *s)
{
    while(*s != '\0')
    {
        putc(*s++);
    }
}
 
char getc(void)
{
    while(!(UART0.UTRSTAT0&(0x1<<0)))
    {
    }
 
    return UART0.URXH0;
}
 
void gets(char *s)
{
    // kermit按下enter时,发送\r
    do
    {
        *s = getc();
        // kermit不会显示它发送的数据
        putc(*s);
    }while(*s++ != '\r');
 
    // kermit软件\r回车\n换行
Linux下虽然回车只有一个\n,但是\n起到了两个效果。
_______________________________________________________________________________
    *s++ = '\n';
    // puts需要\0
    *s = '\0';
}
#endif
//////////////////////////////
Linux下
\r代表回车(回到行首)
\n  代表换行(下一行,当前位置)
puts("\r\n uart> ");//直接调用puts函数,后边自动有一个\0
char buf[16];   gets(buf);
 
当你在kermit下主动输入一个ledon 1时,会自动被这个函数获取,但是获取的是ledon \r
(\r是你在kermit环境下,自己按回车加上去的)
然后gets函数会自动在后边加一个\n\0.
////////////
 
Puts(“>>>>>\r1234”);
Puts(“<<<<<<\r\n5678”);
Puts(“+++++++\ntttt”);
结果
1234<<<<<<
5678++++++++++++
              tttt
//////////////////////////
Windos 环境下,写一个yan.txt
当输入一个1,回车,
当输入一个2,回车,
当输入一个3的时候,保存退出。
然后放到linux里边,命令od -c yan.txt
结果
    1  \r  \n   2  \r  \n   3
命令  ls -l |grep yan.txt
-rwxr-xr-x  1 lh   lh           7    2014-09-18 09:01 yan.txt
只有七个字节。
Linux环境下,写一个piao
当输入一个1,回车,
当输入一个2,回车,
当输入一个3的时候,保存退出。(这里确实没有输入回车)
命令  ls  -l |grep piao
结果 -rw-r--r--  1 lh   lh           6   2014-09-18 09:07 piao
命令    od -c piao
结果  1  \n   2  \n   3  \n
Linux环境下,写一个piao2
当输入一个1,回车,
当输入一个2,回车,
当输入一个3的时候,出车,保存退出。
命令  ls  -l |grep piao2
结果 -rw-r--r--  1 lh   lh           7   2014-09-18 09:07 piao
命令    od -c piao2
结果  1  \n   2  \n   3  \n   \n

  

posted @   飘然离去  阅读(491)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示