admin管理员组文章数量:1652208
首先需要准备的一些工具(后续带有专门的工具链接)
1 串口驱动
- CH341SER -> 用RS232串口线连接开发板和电脑传输数据
2 Notepad++
- 编辑代码工具 -> linux系统和windows系统进行共享目录时
3 SecureCRT
- 用于控制开发板,相当于Linux下的终端界面
4.1 Ubuntu-18.04(上课过程使用:16.04 ~ 18.04)
- ubuntu是linux系统(18.04 - 2018年4月出版 - 20.04 、 22.04)
检查之前课设的 ubuntu 是否符合标准/是否可用 - 根据虚拟机中是否有 交叉编译器 (终端下输入命令:arm-linux-gcc -v)
4.2 Ubuntu - 12.04
若使用 Ubuntu-12.04 要注意的是使用 用户 / 访客 模式
4.3.VSCoode
(我个人觉得Vscoode是比较万能的一个工具,但是设置编译环境有点麻烦)
// 用户模式:
gec@ubuntu:~$
// 访客模式:
guest-TrOVIR@ubuntu:~$
// 访客模式下,无法进入 共享文件夹
介绍一个切换 用户/访客 模式:
5 VMware:
- 虚拟机:虚拟的电脑 - 用于承载其他系统(一台电脑双系统)
一般使用 VMware15 pro 即可;
问题1:若开打虚拟机会蓝屏。 解决办法:则需要安装VM16版本;
问题2:无法打开虚拟机,显示xxx-v已禁用。 解决办法:关机 -> 进入BIOS模式 -> 开启虚拟化
解决方式大概两种:
1.大多数时候,虚拟机打不开都是因为防火墙拦截所致.
解决方案:断网,关闭杀毒软件(360,腾讯管家等),关闭防火墙
2.如果断网,关闭防火墙后,打开虚拟机还是没有反应.可能是软件运行的权 限不够,此时要以管理员身份来运行VMware.解决方案:右键VMware图标-属性-兼容性-以管理员身份运行此程序.
02 步骤: (按照工具文件的安装包进行一个设置)
需要安装一个虚拟安装的官网:https://www.vmware/
安装需要的虚拟机:
1. 打开在官网下载的VMware安装包,然后点击【下一步】
2. 勾选【我接受许可协议中的条款】,然后点击【下一步】;
3. 自定义VMware的安装位置,取消勾选的两项,然后点击【下一步】;
4. 取消勾选的两项,然后点击【下一步】;
5. 点击【完成】,VMware安装完成。(然后就可以开始你虚拟机了)
后续操作位安装压缩包的ubuntu目录,找到相关的文件运行相关的文件!
1.然后点击开始运行
2 虚拟机密码:(123456)
提示:
我们发现关机开机需要花费大量时间,就尽量不要关虚拟机,直接挂起即可,有利提高开发效率
挂起虚拟机的步骤:(点击上方的暂定按键即可挂起)
3 打开虚拟机终端:
终端(ctrl+alt+T):用于编写所有操作命令//打开即出现liunx下的终端
或者是右击出现OPEN打开的方式进入
然后是相关的快捷键:
快捷键 | 作用 |
ctrl + alt + T | 打开终端 |
ctrl + C | 结束程序 |
ctrl + Z | 结束进程 |
ctrl + L(终端令行输出:clear 效果一样) | 清屏 |
F11 | ubuntu命令行模式界面 |
Ctrl + shift + “+=” | 终端字体放大 |
Ctrl + "-_" | 终端字体缩小 |
Ctrl + Alt | 鼠标退出ubuntu系统(windows和ubuntu切换) |
Tab | 自动补充键(输入前缀即可)补全代码按键 |
Ctrl + Q | Notepad++ 多行注释与取消注释切换 |
Ctrl + K | Notepad++ 多行注释 |
Ctrl + shift + K | Notepad++ 多行取消注释 |
↑ ↓ | 终端下查询输入命令历史记录 |
做一个简单的是项目实现:
03 共享目录设置:
共享文件夹:为了虚拟机和Windows之间建立联系,进行文件互通,有利于我们进行代码编译修改
共享文件夹的的图文解析:(相当于一个桥梁进行传输)
04 访问共享文件夹:
共享文件夹:相当于 windows系统 和 linux系统 “沟通的桥梁”。
// 切换到共享文件夹路径中
gec@ubuntu:~$ cd /mnt/hgfs/共享文件夹名字(自己的)
gec@ubuntu:/mnt/hgfs/共享文件夹名字(自己的)$
若已设置,却不显示共享路径:(一般不会有第二种情况,极少数会出现这个问题)
1 查看是否设置共享路径成功命令:
2 确实设置陈成功后,输入以下命令:
/* 如果之前没有命令包则先执行
sudo apt-get install open-vm-tools
*/
// 输入以下命令
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o allow_other
3 完成则设置成功,可以进入 /mnt/hgfs 目录下进行 ls 查看
练习:
设置共享文件夹目录(共享目录名为share!
第二节课时
01 路径介绍:
(注意:每层路径都使用 / 区分开)
路径名 | 路径 | 通俗讲解 | |
家目录 | ~ | 自己linux系统的家 | |
根目录 | / | 装载linux所有系统文件 | |
共享目录 | /mnt/hgfs/共享文件名 | 连接linux和windows的“桥梁” | |
当前目录下 | . | ||
上一层目录 | .. | ||
全部文件 | * | ||
上一次目录 | - | 刚从哪层切换过来的目录 | |
驱动目录 | /dev | 之后开发板使用经常用到 |
02 shell命令:(注意:每个shell命令都需要 空格 分开)
命令 | 作用 | 使用方法 |
ls | 查看目录信息 | ls (路径名) -l :查看文件详细信息 -a :查看全部文件 |
cd | 切换目录 | cd 路径名 (若不添加路径名,则默认去到家目录下) |
cp | 拷贝文件/目录 | cp 文件名 要拷贝的路径 (若拷贝目录需要进行递归操作:-r) |
mv | 1 移动 2 重命名 | 有两个设置模式! 1 mv 文件名 要移动到的路径( 2 mv 文件名 新的文件名 (如果没有文件夹则重新命名) |
cat | 查看文件内容 | cat 文件名 |
touch | 创建文件 | touch 新文件名 |
mkdir | 创建目录 | mkdir 新目录名(注意是小写) |
rm | 删除文件 | rm 文件名 (若删除目录需要进行递归操作:-r) |
chmod | 修改文件权限 | chmod 权限参数 文件名 |
man | 查看man手册 | man 版本号 函数名 (若不知道版本号,则 -f 查找) (q:退出 h:详细讲解) |
03 chmod 修改权限
文件权限示例:-rwxrwxrwx
- | rwx | rwx | rwx |
文件类型 | 文件所属者(user) | 文件所属组(grouth) | 文件其他组(other) |
ugo----简单来记录
权限参数模板:
权限参数: | r - 读 w - 写 x - 执行 | r | w | x | r | w | x | r | w | x | ||
二进制 (1/0 -> 有/无) | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | |||
十进制 (有则+ / 无则+0) | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 | |||
参考示例: | 文件所属者 | 文件所属组 | 文件其他组 | |||||||||
二进制值: | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | |||
十进制值: | 4+2+1 = 7 | 4+2+0 = 6 | 0+0+1 = 1 | |||||||||
权限注释: | 所属者可读可写可执行 | 所属组可读可写 | 其他组仅可执行 |
注意:烧录在板子上的时候需要给与一定的限权
01 vi/vim编辑器
// vi编辑器使用
gec@ubuntu:/mnt/hgfs/share_217$ vi main.c
// vim编辑器使用
gec@ubuntu:/mnt/hgfs/share_217$ vim main.c
1.1 vi/vim 的 3种模式:
命令模式:(最初进入,所有模式切换都需经过的途径)
dd: 删除光标所在行
插入模式:(命令模式下,按 i 进入插入模式;按 Esc 退出命令模式;)
在此模式下,可 编辑/写入 字节数据
低行模式:(“:” + 命令;按 Esc 退出命令模式;)
在低行模式下,可以进行 保存、退出、设置行号、查找 ... 功能;
保存文件 | 退出 | 设置vi/vim行号 | 保存并退出 | 强制保存并退出 |
:w | :q | :set nu | :wq | :wq! |
02 gedit编辑器(linux下的文本编辑器):
gec@ubuntu:/mnt/hgfs/share_217$ gedit main.c
2.1 gedit快捷键:(与WINDS差不多使用的快捷键)
复制 | 粘贴 | 剪切 | 后撤 | 保存 |
ctrl + c | ctrl + v | ctrl + x | ctrl + z | ctrl + s |
03 Notepad++编辑器:
基于 windows 下的编辑器,可支持多种语言编辑格式(但是记得你要选好后缀,不然会有一些格式的错误)Notepad++功能比 Windows 中的 Notepad(记事本)强大,除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码。Notepad++ 不仅有语法高亮度显示,也有语法折叠功能,并且支持宏以及扩充基本功能的外挂模组。(它是一个免费的软件)
Notepad++是免费软件,可以免费使用,自带中文,支持众多计算机程序语言: C,C++,Java,pascal,C#,XML,SQL,Ada,HTML,PHP,ASP, AutoIt, 汇编, DOS批处理, Caml, COBOL, Cmake, CSS,D, Diff, ActionScript, Fortran, Gui4Cli, Haskell, INNO, JSP, KIXtart, LISP, Lua, Make处理(Makefile), Matlab, INI文件, MS-DOS Style, NSIS, Normal text, Objective-C, Pascal,Python, Javascript,Verilog,Haskell,InnoSetup,CMake,VHDL,Matlab
(直接解压安装既可以使用)
快捷键 | 作用 |
ctrl + K | 注释 选定代码块 |
ctrl + shift + K | 取消注释 选定代码块 |
ctrl + Q | 注释/取消注释 选定代码块 |
Tab | 对齐 |
shift + Tab | 缩进 |
04 程序编译 + 运行文件:
gcc:GND代码编译器,用于编译代码(程序每次修改后都需要保存并重新编译,不然会出错)
# 编译命令:gcc 源码文件 -o 可执行文件名
gec@ubuntu:/mnt/hgfs/share_217$ gcc main.c -o main
# 运行可执行文件:./可执行文件名
gec@ubuntu:/mnt/hgfs/share_217$ ./main
helloworld
# 若不指定生成可执行文件名,则默认生成可执行文件名为:a.xxx linux-a.out windows-a.exe
gec@ubuntu:/mnt/hgfs/share_217$ gcc main.c
gec@ubuntu:/mnt/hgfs/share_217$ ls
a.exe a.out main main.c
复习一下 C语言:七大原则:空行、空格、成对书写、缩进、对齐、代码行、注释七方面的书写规
硬性要求:
1 该换行就换行;
2 该缩进对齐就缩进对齐;
3 符号间需要空格;
4 参数定义规范;
5 符号成对书写;
6 注释:单行注释: // 多行注释: /* */
c语言格式:
#include <stdio.h>
// int main(参数个数, 第1个参数,第2个参数 ...)
// 根据函数返回值定义对应函数类型
int main(int argc, char *argv[])
{
// printf("argv[0] : %s\n", argv[0]);
printf("argv[1] : %s\n", argv[1]);
printf("argv[2] : %s\n", argv[2]);
return 0;
}
// 终端下:
gec@ubuntu:/mnt/hgfs/share$ gcc main.c -o main (-o 可以运行执行文件) 一定是编译,然后在运行!!
gec@ubuntu:/mnt/hgfs/share$ ./main zhangsan lisi
argv[0] : ./main
argv[1] : awei
argv[2] : zhangsi
基础知识:
关系运算符(一般使用if进行一个使用)
常用类型 | int | char | float | long |
大小(字节) | 4 | 1 | 4 | 8 |
关系运算符 | 相等条件为真 | 不相等条件为真 | 大于 / 小于 | 大于等于 / 小于等于 |
符号 | == | != | > | >= |
逻辑运算符 | 与条件 | 或条件 | 非条件 |
符号 | && | || | ! |
ASCII码对照表:(虚拟机使用MAN ASCLL可以查看手册,不太建议去背起来)
2 条件判断
if(条件A)
{
// 如果条件A为真,则运行此代码
demo_A ... ;
}
else if(条件B)
{
// 如果条件A不满则,则检测条件B是否满足;
// 条件B为真,则运行此代码
demo_B ... ;
}
else
{
// 若不满足条件A&&条件B,则运行此代码
demo_B ... ;
}
3 循环逻辑:
while(){ }:
别给写成是while(1)死循环!!!!
for循环:
for(变量初始化; 条件; 每次循环变量的变化){
操作;
}
例子:
for(num=1; num<=5; num++){
sleep(1);
printf("num:%d\n", num);
}
4 数组介绍:
一维数组:数组名[ 数组大小 ] = {};
示例:
注:数组创建, [] 中要给一个常量才可以,不能使用变量。可以直接用常量,或者使用宏定义。
数组的初始化(实现数组的监控)
// 示例代码:
void main(){
// 定义数组 arr[]
// 大小:3个char型
// 并初始化值arr[0] = 'A', arr[1] = 'b';
char arr[3] = {'A','b'};
for(int i=0; i<3; i++){
printf("%c ", arr[i]);
}
}
// ubuntu终端:
gec@ubuntu:/mnt/hgfs/share$ ./a.out
A b
int arr[6] ="abcdef";
结论:
- 数组是具有相同类型的集合,数组的大小(即所占字节数)由元素个数乘以单个元素的大小。
- 数组只能够整体初始化,不能被整体赋值。只能使用循环从第一个逐个遍历赋值。
- 初始化时,数组的维度或元素个数可忽略 ,编译器会根据花括号中元素个数初始化数组元素的个数。
- 当花括号中用于初始化值的个数不足数组元素大小时,数组剩下的元素依次用0初始化。
- 字符型数组在计算机内部用的时对应的ascii码值进行存储的。
- 一般用”“引起的字符串,不用数组保存时,一般都被直接编译到字符常量区,并且不可被修改。
二维数组格式:
数组名[ 元素组数 ][ 每组元素大小 ] = {};
数组名[ 行 ][ 列 ];
A[3][4]
(注意:二维数组可省略元素组数(系统自动根据初始化/输入数据决定),不可省略每组元素大小空间)即为可以省略行!!但是不可以省略每一组的空间大小!
// 示例代码:
int main(){
// 输入字符串存放到 arr[]
int i;
char arr[3][10];
for(i=0; i<3; i++){
scanf("%s",arr[i]);
}
// 打印输出 arr[]
for(i=0; i<3; i++){
printf("\t%s\n",arr[i]);
}
}
// ubuntu终端:
gec@ubuntu:/mnt/hgfs/share$ ./a.out
zhangsan
lisi
wangwu
zhangsan
lisi
wangwu
05 指针:
C语言中指针是一种数据类型,指针是存放数据的内存单元地址。
计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节,为了便于管理,必须为每个存储单元编号,该编号就是存储单元的“地址”,每个存储单元拥有一个唯一的地址。
指针变量除了可以存放变量的地址外,还可以存放其他数据的地址,例如可以存放数组和函数的地址。
* | 解引用符号 |
& | 取地址符号 |
%p | 打印地址类型 |
%ls | 打印指针数据 |
指针变量的使用
1. 给指针变量赋值
格式:指针变量=地址型表达式
“地址型表达式”即运算结果是地址型的表达式。C语言规定,变量地址只能通过取地址运算符获得,即“&”,其运算对象是变量或数组元素名,运算结果是对应变量或数组元素的地址。
需要注意的是,虽然地址是一个整数,但是C语言中不允许把整数看成“地址常量”,所以此处的“地址型表达式”不能是整数。
2. 使用指针变量
格式:指针变量名
需要使用地址时,可以直接引用指针变量名。
3. 通过指针变量引用所指向的变量
格式:*指针变量名
“*指针变量名” 代表其指向的变量或数组元素,其中的“*”称为指针运算符。需要注意的是,这种引用方式要求指针变量必须已经定义且有值。
4. 指针的基本运算:
1. 取地址运算符 &
取地址运算符“&”的功能是取变量的地址,它是单目运算符。取地址运算符的运算对象必须是已经定义的变量或数组元素,但不能是数组名。运算结果是运算对象的地址。
2. 指针运算符 *
指针运算符“*”的功能是取指针变量所指向地址中的内容,与取地址运算符“&”的运算是互逆的,它是单目运算符。指针运算符的运算对象必须是地址,可以是已赋值的指针变量,也可以是变量或数组元素的地址,但不能是整数,也不能是非地址型的变量。运算结果就是地址对应的变量。
06 结构体使用
结构的意义:把多个类型变量整合成一个struct 结构体必须的单词
struct tag {
member-list;
member-list;
member-list;
...
} variable-list;
// struct: 结构体
// tag: 标签
// menber-list: 标准变量
// variable-list: 结构体变量
int num;
struct num;
结构体示例代码:
#include <stdio.h>
struct student{
char *name; //名字
int num; //学号
char sex; //性别
float height; //身高
}zhangsan={"张三", 1, 'M', 190.66666};
// jiegoutibianliang.xxx ————> 结构体 的 xxx属性 //并没有严格的规定!!!
int main(){
printf("info: No.%d\n", zhangsan.num);
printf("name: %s\n", zhangsan.name);
printf("sex: %c\n", zhangsan.sex);
printf("height: %.2f\n", zhangsan.height);
return 0;
}
结构体练习题目:
示例:
版权声明:本文标题:嵌入式接口技术基础(粤嵌教学) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729581021a1207450.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论