1.linux
学习嵌入式,首先我们要做的就是了解linux,因为现在市面上的大部分操作系统,都是基于linux系统开发的。而了解linux,就需要用到ubuntu系统,因为ubuntu使用的是原生的纯Linux系统环境。
1.1配置嵌入式环境
在当前电脑操作系统都为window的情况下,使用ubuntu系统有两个方法,第一个就是在电脑中安装ubuntu系统,每次开机的时候可以切换系统,第二个就是安装虚拟机,在虚拟机中打开使用ubuntu系统。最好是第二个,因为在嵌入式学习中,有的时候使用window中的软件编辑更加方便,但是又需要在ubuntu中运行,使用虚拟机就可以很好的来回切换。
我使用的是虚拟机VMware Workstation Pro,在百度上就可以搜索下载,然后下载ubuntu系统文件,并用虚拟机打开就行。
c语言的编辑器有很多,我使用的是VS Code,这个软件几乎所有的功能都由插件提供,需要什么装什么,是轻量,丝滑,极速,备受赞誉的编程神器,在windows、mac、linux中都能使用。
1.2了解linux
1.2.1使用linux
按Ctrl+Alt+R打开终端,或者鼠标右键桌面,在右键菜单栏里打开终端。在linux系统中,用户无法直接调用文件,需要通过系统调用接口一步步选取查找确定目标文件,并且返回界面让用户查看。
linux有两种界面,可以按Ctrl+Alt+F2/F7切换。
linux的优点:开放性,完全免费,多用户,多任务,良好的用户界面,设备独立性,丰富的网络功能,可靠的系统安全性,良好的可移植性。
linux的指令手册:man 函数,在终端输入man man 可以查看man手册的指令列表,输入man -f '指令' 可以查看指令的分类,输入man 数字 指令 可以查看指令的具体作用。
终端中的“~”表示家目录,用户一般只有在家目录下才能修改,添加和删除文件和目录。
1.2.2linux指令
pwd:查看当前目录路径。
sudo -s:进入管理员模式(可以在一切目录下修改,添加和删除文件和目录)
su gec:进入用户模式
ls:列出当前目录内容(不显示子目录文件)
ls /文件名:列出指定目录内容
ctrl+c在linux中表示强制中断/结束。
linux选中内容表示复制,按下滚轮表示粘贴。
ls -l:以长列表形式显示文件信息。
ls -a:显示所有文件(包括隐藏文件,但不显示子目录文件)
cd:切换到指定目录
cp:复制
mv:剪切(不粘贴就是删除)
touch:创建文件
mkdir:创建目录
rm:删除文件
rmdir:删除目录
添加共享文件夹可以使windows和linux对同一文件进行操作。
2c语言
c语言是让人与机器沟通的桥梁。
2.1 了解c语言
头文件:头文件的作用是对函数进行声明,没有头文件运行编译不一定会出现编译错误,但是会发出警告,出现隐式声明。
main:每个程序都要有的主函数,并且只能有一个。如果main前无定义,系统会警告并且自动定义为int main()类型。
int main():整型函数,结尾必须加上return 0;
printf:输出函数
scanf:标准输入
enum:枚举,增加代码可读性。
2.2字符
2.2.1字符类型
int :整型,例:1。4个字节
unsigned:无符号整型,范围内没有负数。4个字节
float:浮点型,例:3.14。4个字节
double:双精度浮点型,在linux中,double的范围包含float,所以linux中只有dlouble没有float。八个字节
char:字符型,例:a(字符),abc(字符串),1个字节
常用数据类型:int,float,char
2.2.2输出类型
%d:输出整型
%c:输出字符型
%s:输出字符串
%f:输出浮点数
%u:输出无符号整型
%p:输出目标地址
2.2.3编码方式
2.2.3.1溢出
非负数以原码方式存放,负数以补码方式存放,非负数以原码直接输出,负数会将补码转换为原码再进行输出。每种类型的字符都有相应的存储字节,超出字节范围就会溢出,溢出值不会保存,所以选用类型时需要注意。
2.2.3.2编码
非负数以原码方式存放,负数以补码方式存放,非负数以原码直接输出,负数会将补码转换为原码再进行输出。如果将负数以%u输出,就会将负数的补码直接以原码方式输出,得到的结果会是类型的最大值减去负数绝对值的数。
2.2.4进制转换
进制转换是char字符里用到的,输入'\ddd'代表输入的是八进制数字,数字范围为0~7,可输入1~3个。输入'\xdd'为十六进制数字,\x是代表十六进制,数字范围为0~9,A~F,可输入1~2个。因为char字符的范围为0~127,所以八进制最大数为'\177',十六进制最大为'\x7F'。
2.3标准输入
scanf:使用时要用&获取地址,并且地址类型要与输入匹配。
getchar():如果scanf输入与地址类型不匹配,scanf不会获取输入,而是保存随机值,并将输入留在数据缓冲区,直到有相匹配的地址取走,而getchar()没有类型要求,可以直接将堵塞的数据取走,让后面的scanf获取之后的数据。