嵌入式接口技术基础(粤嵌教学)

首先需要准备的一些工具(后续带有专门的工具链接)

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.com/

安装需要的虚拟机:

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;
}

结构体练习题目:

 示例:

猜你喜欢

转载自blog.csdn.net/m0_64148096/article/details/126593954
今日推荐