嵌入式 DAY3

vim编辑器

vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim)
vi有3个模式:插入模式、命令模式、低行模式
如 vim hello.c 即打开hello.c文件(没有先创建)

命令模式

vim打开文件,即为命令模式
此模式下操作:
x 删除一个字符,nx删除n字符(n为具体数字)
dd 剪切一行字符(可用来删除),ndd剪切n行
nyy复制n行
shift+g跳到最后一行,gg回到第一行
*查找光标所在字符串,按n查看下一个
u撤销操作
shift+zz退出即ZZ

插入模式

命令模式下按a或i进入插入模式,按esc回到命令模式
在此模式下进行程序编写

底行模式

命令模式下按“:”进入命令底行模式,/进入搜索底行
此模式操作:
wq保存退出(w保存q退出) wq! w! q!这里!表示强制
输入数字直接跳转到对应行
sp 文件名 打开另一文件,ctrl+w可上下移动光标
:set nu :显示行号 set nonu :取消显示行号
:s/old/new :用new替换行中首次出现的old
????/old/new/g :用new替换行中所有的old
:n,m s/old/new/g :用new替换从n到m行里所有的old
/vpser :向光标下搜索vpser字符串

gcc工具链

gcc test.c -o test
生产test可执行文件
上述编译过程是分为四个阶段进行的:
即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)
预处理:
gcc -E test.c -o test.i
test.i是文本文件处理所有以#开头的代码
#开头代码:
1.头文件(进行展开)
2.宏定义(替换)
3.条件编译

编译:
gcc -S test.i -o test.s
对生成的test.i文件编译,生成汇编代码

汇编:
gcc -c test.s -o test.o
对于生成的汇编代码文件test.s,将其编译为二进制目标文件
连接
gcc test.o -o test
将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件
附加的目标文件包括静态连接库和动态连接库

在命令行窗口中,执行
./test
即可完成程序功能

多个程序文件的编译
gcc test1.c test2.c -o test
由test1.c和 test2.c两个源文件生成可执行程序test

gcc常用指令:
-static :链接静态库(将库文件搬移打程序中,故不需要库支持)

make和makefile

make命令运行时,须要一个 Makefile 文件,以告诉make命令须要怎么样的去编译和链接程序。
规则的基本格式是:
target: dependency
(Tab字符)command
target(目标): 通常是要产生的文件的名称
dependency(依赖): 指用来输入从而产生目标的文件
command(命令): 是make执行的动作,一个规则可以有多条命令,每个命令占一行。命令行的第一个字符是Tab。

Target=hello
Object=1.o 2.o

$(Target):$(Object)
	gcc $(Object) -o $(Target)

.PHONY : clean
clean : 
	rm -rf *.o hello



1.o和2.o会根据1.c,2.c自动生成
该代码作用为连接1.o和2.o生成hello
同时兼顾clean功能,输入clean可清除指定文件,方便下次Makefile
输入make即可进行makefile

gdb调试工具

GDB是GNU的调试工具,它可以跟踪被调试的程序,进行设置断点、单步执行等操作
被调试的应用程序在编译时最好使用-g参数将调试信息编入目标文件中:
gcc -g app.c -o app
用以下命令启动对程序app的调试:
gdb app

嵌入式 DAY3

shell使用基础

Shell是命令解析器,将用户的输入的指令转化为机器可以运行的程序。

shell脚本文件创建一般为
vim xxx.sh
格式是固定的,如下:
#!/bin/bash
#comments
Your commands go here

#!/bin/bash
echo  "hello"

运行./xxx.sh
可现实hello显示

echo "hello"
echo "hello" > hello.txt
cat xx/hello.c  >> hello,txt

分别实现了
屏幕显示
创建hello.txt,并将hello写入
将hello.c中内容写入hello,txt
在脚本中使用变量:

TMP="hello"
echo  $TMP(或${tmp})