前言
我们知道嵌入式开发嵌入式系统开发模式最大特点是软件、硬件综合开发。这是因为嵌入式产品是软硬件的结合体,软件针对硬件开发、固化、不可修改,那么我们如何进行软硬件交互的呢?
以计算机为例,自计算机诞生以来,其体系结构都为冯诺依曼模型,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)。
那么计算机的基础构成,都是只能识别高低电平的硬件设备,我们也只能用0、1来进行控制,这就产生了二进制,用来控制硬件结构,而C语言是人用来识别的编程语言,机器识别不了,所以产生了编辑器和编译器,编辑器用来供人完善程序,编译器将高级语言转化成可供机器识别的二进制语言。本文会阐述编辑器的基本用法和编译器的使用。
一、编辑器是什么?
1.编辑器简介
编辑器是软体程序,一般是指用来修改电脑档案的编写软件,但也有人称 PE2、HE4(汉书)……等文书软件为编辑器。常见的编辑器有文本编辑器、网页编辑器、源程序编辑器、图像编辑器,声音编辑器和视频编辑器等。
程序编辑器是指用来进行编辑程序的软体程序,能把存在计算机中的源程序显示在屏幕上,然后根据需要进行增加、删除、替换和联结等操作。用户利用此程序对存储在计算机中的文卷进行增加、删除、修改、剪贴等加工处理。
那么vi编辑器又是什么?
Linux vi 命令也就是指 vi 编辑器,它们是一个意思。vi 编辑器是 Linux/UNIX 环境下经典的编辑器。Linux vi 命令非常强大,熟练地使用它可以高效的编辑代码,配置系统文件等,是程序员和运维人员必须掌握的技能。
可以说每一个 Linux 程序员都是从学习使用 vi 开始学习 Linux 环境编程的。因此,即使是在集成开发环境盛行的今天,是否能够熟练使用 vi 仍然被看做是衡量 Linux 程序员基本功的标准之一。
vi 编辑器只是一个文本编辑程序,它没有菜单,只有命令,且命令繁多。虽然学习这些命令比较费时费力,但是一旦你掌握了这些命令,你就会发现 vi 十分高效和强大,丝毫不逊色任何一款 Windows 上的编辑器。
其实,现在的 UNIX/Linux 大都使用 vim 代替了 vi。vim 是 vi 的增强版(vi Improved),与 vi 编辑器完全兼容,而且实现了很多增强功能。vi 编辑器会依据文件扩展名或者是文件内的开头信息, 判断该文件的内容而自动的执行该程序的语法判断式,再以颜色来显示程序代码与一般信息。
2.vi编辑器的基本操作
2.1 vi编辑器的进入方式
vi 文件名 或 vim 文件名
2.2 vi编辑器的基本操作
vi编辑器的三种模式:
命令模式、插入模式、底行模式
2.2.1 命令模式
刚进入编辑器的模式就是命令模式
命令模式主要作用就是对代码进行复制粘贴等操作
怎样进入命令模式:
刚进入编辑器的模式就是命令模式
在其他模式中按ESC键即可进入命令模式
从命令模式切换到插入模式的方法:
a 从光标所在字符的后面进入插入模式
i 从光标所在字符的前面进入插入模式
o 从光标所在行的下一行进入插入模式
A 从光标所在行的末尾位置进入插入模式
I 从光标所在行的起始位置进入插入模式
O 从光标所在行的上一行进入插入模式
命令模式常用操作:
yy 复制光标所在的这一行
p 粘贴
nyy 赋值n行
dd 剪切一行
ndd 剪切n行
u 撤销
gg 光标移动到第一行
ngg 光标移动到第n行
G 光标移动到最后一行
x 删除光标对应的字符
X 删除光标对应的前一个字符
/xxx 查询当前代码中所有出现的内容xxx,并高亮显示
使用n光标指向下一个,N光标指向上一个
2.2.2 插入模式
插入模式主要作用就是写代码
2.2.3 底行模式
底行模式主要作用就是对文件进行保存退出等操作
如何进入底行模式:
在命令模式下输入:进入底行模式
底行模式常用操作:
w 保存
q 退出
wq 保存并退出
q! 强制退出,不用保存就可以退出
noh 取消高亮显示
vsp 文件名 左右分屏打开此文件
sp 文件名 上下分屏打开此文件
wqa 所有打开的文件保存并退出
x 保存并退出,或者在命令模式下输入shift zz也可以保存并退出
%s/a/b/g 将文件中所有的a替换成b
m,ns/a/b/g 将文件第m行到第n行的所有的a替换成b
注:以上只是部分基础命令。
二、第一个C代码
2.1 打开文件
首先通过vi编辑器打开指定文件然后编写代码,
如果是C语言代码,文件一般后缀名为.c,用于标识是一个C语言代码
vi hello.c
2.2 编写代码
#include <stdio.h>
int main(){
printf("helloword!\n");
return 0;
}
写完代码在底行模式下保存并退出即可。
三、编译工具 -- gcc编译器
C语言代码是没有办法让计算机直接识别的,计算机直接识别的只有二进制码,所以编译的流程就是先将C语言代码编译成汇编代码,然后将汇编代码编译成二进制代码,最后计算机执行即可
3.1 gcc编译器基本使用
3.1.1 不指定可执行文件的名字
编译代码:
gcc hello.c
编译完毕后会自动生成可执行文件a.out
运行可执行文件:
./a.out
3.1.2 指定可执行文件的名字
gcc编译器默认的生成a.out的二进制文件,后面接-o可以自己命名生成文件。
注:生成文件后缀切记不要用.c,这与原C文件重名会替换掉原C文件。
编译代码:
gcc hello.c -o hello
运行可执行文件:
./hello
3.2 代码注释方法已经中英文切换
中英文切换:
使用ctrl+space键切换中英文(不同版本设置可能不同,可以查看快捷键确认)
C语言程序中的注释方法:
方法1:注释一行
//...
方法2:注释多行
/*
...
...
...
*/
方法3:注释很多
#if 0
...
...
...
#endif
3.3 第一个代码的基本解释
//#include:#开头的代码称之为预处理指令,一般结尾不加;
// include用于包含调用函数的头文件
// stdio.h是printf函数的声明所在的头文件,
// 所以要使用printf函数,就需要包含这个头文件
// 注意:如果是包含头文件,一般使用<>或者""
#include <stdio.h>
//int main()
//int:函数返回值类型
//main:主函数,是C程序代码的入口,
// 一个C程序必须有并且只能有一个main函数
//():括号里面用于指定参数,如果没有参数可以不写,但是括号必须加
int main()
//{}:大括号里面对应的就是这个函数的指定代码块
{
//printf:是一个函数,功能是向终端输出一个字符串,这是一条程序代码,
// 所以每一条语句后面需要加;
//\n:换行符
printf("hello, world!\n");
//return:函数执行完毕之后要返回的值就在return的后面指定即可
// 返回的值的类型必须与函数名左边的类型一致
// 主函数最后返回0一般标识当前程序执行结束
return 0;
}
3.4 gcc编译之后出现问题的解决方法
如果在编译的时候出现警告,例如
大多数的警告都可以忽略,出现警告还是可以生成可执行文件的,所以大多数情况都不会有影响,但是最好将警告也处理了
如果代码在编译的时候出现错误,是不会生成可执行文件的
出现错误之后是一定要解决,一般gcc编译器会告诉你错误的位置在哪,需要定位到代码的位置之后作出修改,但是有时候位置不太准确,需要在定位的位置的上一行或者下一行去找错误;
上面图片一般的错误表示少;
下图片中的错误是使用了中文的标点符号;
以下图片中的错误是函数名写错或者头文件未添加;