u-boot移植随笔:u-boot shell与ASCII码

前几天让u-boot的shell更接近“shell”,发现可以使用Ctrl-p等等来控制,心里总在想它们是怎么实现的,怎么能读取到我按下Ctrl-p的呢?今天又看了u-boot的代码,找了好久,蓦然回首,原来是在./common下面的main.c中,——我就说呢,在SI中看这个文件时候,没发现旁边下拉条那么短,聪明人一看就知道这里面有不少东西!唉,一时没注意。

看一下main.c文件中的cread_line函数(这个函数有一个while(1)死循环,遇到回车、Ctrl-c才跳出,命令补齐也在这个函数中体现),由

ichar = getcmd_getch();

获取到输入的字符,经过很复杂的处理后,终于等到回车键按下了(不按下怎么执行命令呢?对吧?),使用cread_add_to_hist保存起来——为了实现命令历史,又牵出另外的很复杂的过程。解析输入的字符就完成了,至于之后的处理,依然是很复杂的很复杂的过程。

找啊找啊,终于发现这么几行:

case CTL_CH('a'): BEGINNING_OF_LINE(); break; case CTL_CH('c'): /* ^C - break */ *buf = '/0'; /* discard input */ return (-1); case CTL_CH('f'): if (num < eol_num) { getcmd_putch(buf[num]); num++; } break; case CTL_CH('b'): if (num) { getcmd_putch(CTL_BACKSPACE); num--; } break; case CTL_CH('d'): if (num < eol_num) { wlen = eol_num - num - 1; if (wlen) { memmove(&buf[num], &buf[num+1], wlen); putnstr(buf + num, wlen); } getcmd_putch(' '); do { getcmd_putch(CTL_BACKSPACE); } while (wlen--); eol_num--; } break;

CTL_CH()是一个宏,从字面上理解是Ctrl加上一个字符,定义如下:

#define CTL_CH(c)  ((c) - 'a' + 1)

我很奇怪,怎么减去个'a'再加个1就能判断我按下Ctrl了呢?我打开VC建好工程,测试一下CTL_CH('b'),结果给我个笑脸,更百思不得其解。

又想到去查ASCII码表,开始找那几个基本上几乎一样,没有什么有用的信息。后来不小心看到一张内容稍微多一点,上面有一栏是“终端显示”,我一看,前面怎么排列得这么整齐?^A到^Z,难道这个就是Ctrl-A到Ctrl-Z?我猜应该是了,不然找不到其它理由了。你看,^B是2,'b'-'a'+1就等于2啊!肯定是这个原因!

但是ASCII码前面三十几个具体是干嘛的?网上都说是控制、通信用,但没亲自捣鼓,除了“/t”、“/n”经常用外,其它的没印象啊。如果要追到底,估计要追究到那个久远的年代了,算了,等哪天闲得没事干了再去追吧。

以前只知道emacs能使用ctrl-p、ctrl-n,现在,u-boot的shell、linux的shell中都能使用ctrl-p、ctrl-n等等,它们的原理应该是一样的。

本文假设已经实现了u-boot shell自动补齐、命令历史等功能(就是加多两个宏),并且没有深入追究那些代码来龙去脉。

本文即兴而写,随意看看,不必当真。

下面附上一份经过山人结合网上许多资料整理出的ASCII码表格,表格整理得不美观,但应该不会影响阅读。

ASCII码表

 

Dec

Hex

Oct

Char

Terminal

   备注

Dec

Hex

Oct

Char

0

0

0

(null)

^@

64

40

100

@

1

1

1

soh

^A

文件头的开始

65

41

101

A

2

2

2

stx

^B

文本的开始

66

42

102

B

3

3

3

etx

^C

文本的结束

67

43

103

C

4

4

4

eot

^D

传输的结束

68

44

104

D

5

5

5

enq

^E

询问

69

45

105

E

6

6

6

ack

^F

确认

70

46

106

F

7

7

7

bel

^G

响铃

71

47

107

G

8

8

10

bs

^H

后退

72

48

110

H

9

9

11

ht

^I

水平跳格

73

49

111

I

10

0A

12

nl

^J

换行

74

4A

112

J

11

0B

13

vt

^K

垂直跳格

75

4B

113

K

12

0C

14

ff

^L

格式馈给

76

4C

114

L

13

0D

15

er

^M

回车

77

4D

115

M

14

0E

16

so

^N

向外移出

78

4E

116

N

15

0F

17

si

^O

向内移入

79

4F

117

O

16

10

20

dle

^P

数据传送换码

80

50

120

P

17

11

21

dc1

^Q

设备控制1

81

51

121

Q

18

12

22

dc2

^R

设备控制2

82

52

122

R

19

13

23

dc3

^S

设备控制3

83

53

123

S

20

14

24

dc4

^T

设备控制4

84

54

124

T

21

15

25

nak

^U

否定

85

55

125

U

22

16

26

syn

^V

同步空闲

86

56

126

V

23

17

27

etb

^W

传输块结束

87

57

127

W

24

18

30

can

^X

取消

88

58

130

X

25

19

31

em

^Y

媒体结束

89

59

131

Y

26

1A

32

sub

^Z

90

5A

132

Z

27

1B

33

esc

^[

退出

91

5B

133

[

28

1C

34

fs

^*

域分隔符

92

5C

134

/

29

1D

35

gs

^]

组分隔符

93

5D

135

]

30

1E

36

re

^^

记录分隔符

94

5E

136

^

31

1F

37

us

^_

单元分隔符

95

5F

137

_

32

20

40

sp

(Space)

空格

96

60

140

'

33

21

41

!

 

 

97

61

141

a

34

22

42

"

 

 

98

62

142

b

35

23

43

#

 

 

99

63

143

c

36

24

44

$

 

 

100

64

144

d

37

25

45

%

 

 

101

65

145

e

38

26

46

&

 

 

102

66

146

f

39

27

47

`

 

 

103

67

147

g

40

28

50

(

 

 

104

68

150

h

41

29

51

)

 

 

105

69

151

i

42

2A

52

*

 

 

106

6A

152

j

43

2B

53

+

 

 

107

6B

153

k

44

2C

54

,

 

 

108

6C

154

l

45

2D

55

-

 

 

109

6D

155

m

46

2E

56

.

 

 

110

6E

156

n

47

2F

57

/

 

 

111

6F

157

o

48

30

60

0

 

 

112

70

160

p

49

31

61

1

 

 

113

71

161

q

50

32

62

2

 

 

114

72

162

r

51

33

63

3

 

 

115

73

163

s

52

34

64

4

 

 

116

74

164

t

53

35

65

5

 

 

117

75

165

u

54

36

66

6

 

 

118

76

166

v

55

37

67

7

 

 

119

77

167

w

56

38

70

8

 

 

120

78

170

x

57

39

71

9

 

 

121

79

171

y

58

3A

72

:

 

 

122

7A

172

z

59

3B

73

;

 

 

123

7B

173

{

60

3C

74

<

 

 

124

7C

174

|

61

3D

75

=

 

 

125

7D

175

}

62

3E

76

>

 

 

126

7E

176

~

63

3F

77

?

 

 

127

7F

177

del

1、本表列出了ASCII字符集。每一个字符有它的十进制值,十六进制值,终端上的显示结果,ASCII助记名,和ASCII控制字符定义。
2、ASCII字符60—7Fh不能被存储到内存单元或数据记录文件。这些值被转变到40h - 5Fh范围内的等价大写形式。这些字符可以被存到缓冲区,并且在通讯时被发送和接收。
3、ASCII表0-1F及7F共33个字符是控制字符或通信专用字符,其余均为可显示字符。

 
 
 
 
 
 
 
 
 
 

u-boot移植随笔:u-boot shell与ASCII码相关推荐

  1. u-boot移植随笔:让u-boot shell支持tab、命令历史

    u-boot移植随笔:让u-boot shell支持tab.命令历史 前两天一直在想一个问题,u-boot的shell怎么不支持命令自动补齐,命令历史呢?由于受linux的shell影响,只要其它的& ...

  2. 移植U-Boot.1.3.1到S3C244和S3C2410

    移植U-Boot.1.3.1到S3C244和S3C2410 首先,U-Boot1.3.1还没有支持s3c2440,移植仍是用2410的文件稍作修改而成的.2440和2410的区别在我移植1.2.0的文 ...

  3. u-boot移植随笔:u-boot的内存分布图

    花了两天时间来专门研究u-boot的内存分布,这个图网上已经有了,但只是大致图形,没有详细.深入解析.所以自己就专门画了图,添加一些东西. 此外,还专门测试了一下u-boot下全局变量.未初始化变量等 ...

  4. u-boot移植随笔:自定义u-boot命令点灯

    u-boot移植随笔:自定义u-boot命令点灯 前几天一不小心在CSDN论坛上发帖散分,同时许诺完成点灯就结账,经过努力,终于可以在u-boot的shell中输入自定义的命令来点灯了.下面简单讲一下 ...

  5. u-boot移植随笔:System.map文件格式

    u-boot移植随笔:System.map文件格式 背景:正在努力看u-boot代码,已经研究了两三天,内容太多,一时难理清头绪.不过有一定的linux基础,也懂点gnu扩展,elf格式,连接器还没有 ...

  6. Spring Boot Profile使用详解及配置源码解析

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 二师兄 来源 | 程序新视界 在实践的过程中我 ...

  7. Linux移植随笔 tslib

    前段时间让Tslib搞晕头了,原来一切都是版本惹的祸.本文只是一个随笔,随笔者,随意用笔写下心得而已,因此不必较真.正如我所欣赏的"乘兴而来,兴尽而返"一样.--估计当年王子猷是赏 ...

  8. Linux移植随笔:终于解决Tslib的问题了【转】

    转自:http://www.latelee.org/embedded-linux/porting-linux-tslib.html 前段时间让Tslib搞晕头了,原来一切都是版本惹的祸.本文只是一个随 ...

  9. 构建Spring Boot RESTful服务+ Spring Boot执行器

    总览 什么是REST? REST(代表状态转移)是Web构建的体系结构样式,已成为用于Web应用程序的标准软件设计模式 . 代表性国家转移一词最早由REST的发起人,HTTP规范的主要作者之一Roy ...

最新文章

  1. flash 入门课知识小结
  2. Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
  3. 成功解决当Win10系统进行深度学习的时候发现系统C盘满了,教你如何正确卸载一些非必要的内容
  4. insert在python中的用法_python中insert用法是什么_后端开发
  5. springboot @PropertySource+@Value注入properties配置文件属性值
  6. 如何用木板做桥_如何辨别使用的公园椅是否需要保养
  7. 搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法
  8. 基于YOLOv3 与CRNN的中文自然场景文字检测与识别
  9. 【codevs1001】舒适的路线,心累的冰茶几
  10. private函数php,php怎么修改private
  11. 通向财务自由之路08_入市或市场时机选择
  12. 如何在Mac视频中添加表情符号
  13. python系列九:python3迭代器和生成器
  14. Python学习总结(1)——编程准备和基本语法
  15. resin session共享 redis_Spring Boot 利用Redis实现session共享
  16. win10怎么设置默认输入法_微软拼音输入法怎么设置快捷短语
  17. oracle的创建视图,oracle 创建视图
  18. 【实习周报】2019年6月 前端开发实习工作周报汇总
  19. 成都理工大学计算机考研资料汇总
  20. html左侧悬浮音乐插件,固定在网页底部的HTML5音乐播放器插件代码

热门文章

  1. 小红书重拳治理虚假种草 再起诉3家通告平台、MCN机构
  2. 9999元起!荣耀Magic V今日首销:首款骁龙8折叠屏旗舰
  3. 鸿蒙OS加持!华为MatePad2系列将搭载骁龙888/麒麟9000芯
  4. 京东公布3.8“她的节”消费数据:奢品服饰成交额同比增长170%
  5. 苹果发明超薄触摸显示技术:iPhone 12系列有望首发搭载
  6. 头条搜索回应百度:不交钱也会保护品牌词搜索
  7. vivo X30系列发布会邀请函曝光:名副其实的“望远镜”
  8. 快播王欣:区块链今天最重要的成果还只是理念布道
  9. 前魅族科技高级副总裁李楠:iPhone 11的工业设计完全崩盘
  10. 小红书疑似被下架 官方回应正在积极沟通