嵌入式C语言基础入门
Linux 简单指令,vi 编辑器,gcc 编译器,数据类型
目录
嵌入式开发需要使用 Llinux 系统 进行相关操作
而 C语言是嵌入式开发的第一语言
因此,C语言在开始学习时最好在 Linux 下编译
所以这里只简单介绍在Llinux系统下进行C语言学习使用到的简单命令
1. Linux入门操作指令
1.1 文件系统结构
Linux 文件系统就是一个树形的分层组织结构(树状目录结构)
/bin: Binaries (二进制文件) 的缩写, 存放着最经常使用的命令。
/dev :Device(设备) 的缩写, 存放 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc:Etcetera(等等) 的缩写,存放所有的系统管理所需要的配置文件和子目录。
/home:普通用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
... ...

1.2 常用操作指令
1.2.1 pwd
pwd:显示用户在文件系统中的当前位置
打开命令终端窗口,用户就处在自己的用户主目录的位置

1.2.2 man
man 命令:命令的帮助(使用)

1.2.3 ls
ls [ Option(选项) ] [ files_or_dirs(目录) ]:
ls:显示当前目录内容


ls -a:显示隐藏文件

ls -l :显示详细信息


补充:- :无权限
ls -r:显示层级目录
1.2.4 Ctrl + Shift + t
新建窗口:Ctrl + Shift + t

1.2.5 ctrl+l
清屏:Ctrl + l


1.2.6 查看文件内容
查看文件内容:cat / nl / tail / tail
(1)cat 文件:查看文件
cat -s 文件:多个空行删减(合并)为一个空行
cat -b 文件:显示行号
(2)nl 文件:查看文件并显示行号
(3)head 文件:查看文件内容前十行
head - n 文件:查看文件内容前 n 行
tail 文件:查看文件内容后十行
tail - n 文件:查看文件内容后 n 行
1.2.7 vi
编写文件内容:vi 文件名
若不存在该文件,则默认创建
1.2.8 cp
复制文件:cp 文件1 文件2 / 路径
将文件1复制到同层目录下并命名为 文件2 / 复制到某路径中
复制文件夹:cp -r 文件夹1 文件夹2
1.2.9 mv
移动文件:mv 文件 位置
将文件移动到该位置
mv 文件 位置 / 文件:移动并重命名
1.2.10 touch
创建文件:touch - 文件(未存在的)
修改时间戳:touch 文件(已存在的)
1.2.11 rm
删除文件:rm - i 文件
- i :会添加交互
删文件夹:rm - r 文件夹
1.2.12 mkdir
创建文件夹:mkdir 文件夹名
mkdir -p 文件夹名:级联创建文件夹
2 vi 编辑器
2.1 概述
vi 是Linux 中最基本的编辑器
而编写 C语言源代码需要在编辑器中进行
编写文件:vi 文件名
但是此操作之后还是无法编辑文件
2.2 三种模式
这涉及到 vi 的三种模式:命令行模式,插入模式,底行模式
vi 文件名 进入的是命令行模式
命令行模式进入到插入模式( insert ):
i:进入编辑状态,光标不发生移动
I(大写):进入编辑状态,光标置于该行行首(行首转插入)
a:进入编辑状态,光标向后移动一位
A:进入编辑状态,光标置于该行行尾(行尾转插入)
o:进入编辑状态,原光标下插入新的一行,光标置于新行行首
O:进入编辑状态,原光标上插入新的一行,光标置于新行行首
底行模式:进行文件的保存,查找,替换,列出行号等(指令前有冒号)
执行以下操作前须要切换回插入模式:Esc
保存::w ,类似于window 系统下的 ctrl + s
保存并退出::wq

2.3 复制与粘贴命令
只能在命令行模式进行代码的复制,粘贴操作
复制:yy(yank),默认复制该行
n yy :复制 n 行
粘贴:p / P (pute)
p:光标所在行的下一行进行粘贴
P:光标所在行的上一行进行粘贴
剪切:dd(delete),类似于 CTRL + X
n dd :剪切 n 行
撤回上一步:u(undo)
按照字符删除:x
n x:一次删除 n 个字符
2.4 保存和退出命令
只能在底行模式进行代码的保存与退出操作
:q:退出没有修改的文件,一般不单独使用;若文件被修改没有保存,此命令无效
常与 :wq(保存并退出) 搭配使用
:q!:强制退出,且不保存修改过的文件,常用于修改后不满意不保存的情况
:w File:另存为 File 给出的文件名,不退出,源文件不会被覆盖
2.5 vi 光标命令
k:上移
j:下移
h:左移
l:右移
:set nu:设置行号
:set nonu:取消显示行号
1 G:移动光标到文件第一行
G:移动光标到文件最后一行
:N:移动光标到第 N 行
2.6 查找命令
/字符串:查找字符串,类似于 ctrl + f 的功能
n:继续向下查找
N:继续向上查找
2.7 替换命令
利用 :s 可以实现字符串的替换
:表示底行模式输入的指令
s:表示替换
.,$ :表示替换范围为当前行到最后一行
1,$:表示替换范围为第一行到最后一行
%:表示替换范围为全文
:s/str1/str2:将当前行(默认为当前行)的第一个 str1 替换为 str2
:s/str1/str2/g:在当前行(s默认为当前行)范围中将所有的 str1 替换为 str2
:%s/str1/str2/g:在全文范围中将 str1 全部替换为 str2
2.8 复制与剪切命令(非整行)
y0:将光标至行首的字符拷入剪贴板
y$:将光标至行尾的字符拷入剪贴板
d0:将光标至行首的字符剪切入剪贴板
d$:将光标至行尾的字符剪切入剪贴板
:n1,n2 y:块复制
:n1,n2 d:块剪切
2.9 显示编辑器当前状态
进入 vi 编辑器:vi 文件名
输入: :set showmode
2.10 快速移动到该行行首/尾
移动到该行: :N(冒号+目标行数对应数字)
该行行首:^
该行行尾:$
3. gcc 编译器
3.1 概述
GNU 推出的多平台编译器(前面介绍的是 vi 编辑器)
可将 C,C++ 源程序编译成可执行文件
支持以下后缀:
.c C语言源程序
.h 程序包含的头文件
.i 已经预处理过的 C 源代码文件
.s 汇编语言源代码文件
.o 编译后的目标文件
3.2 编译流程
gcc -o 文件名.c 文件名
- o 输出可执行文件
- e 输出预处理文件
- c 只要求编译器输出目标代码
- g 用于调试
./文件名 查看输出结果
此外,代码在编译调试过程中需要重新生成执行文件

4. 数据类型

4.1 基本数据类型
3.1.1 bool
bool 不是基本数据类型,使用时需借助头文件 #include <stdbool.h>;
若不借助头文件,须声明为 _Bool

3.1.2 char

其他数据类型本人觉得无需介绍,故省略;
5. 存储类型
声明变量时,需要遵循以下规则:
存储类型 变量类型 变量名 ;
5.1 auto
缺省的参数类型就是 auto
进入代码块(block)系统为变量自动分配内存
当退出块时,系统释放分配给自动变量的内存
重新进入块,系统会为自动变量再次分配内存,原先的值已经没有了
5.2 register
将变量直接放入 CPU 的寄存器中,而非内存
可以加快程序的运行速度
但这样变量就没有地址,无法使用其指针
此外,寄存器的个数与容量是有限制的
所以并不是所有数据类型都可以直接放进去

5.3 static 变量
静态存储类型的变量,默认值为 0
在内存地址中以固定地址存放,而非堆栈
这样,只要程序没有结束,在内存中就不会被销毁
可以声明在函数体内或函数体外


5.4 extern 变量
extern 称为外部参照引用型
extern 修饰的变量在其他文件中的函数或程序段都可以被引用

注意:static 修饰 extern 存储类型的变量,该变量就不能被其他文件使用,即 extern 失效;

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)