• 嵌入式接口技术基础(笔记更新版本)


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

    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是比较万能的一个工具,但是设置编译环境有点麻烦)

    1. // 用户模式:
    2. gec@ubuntu:~$
    3. // 访客模式:
    4. guest-TrOVIR@ubuntu:~$
    5. // 访客模式下,无法进入 共享文件夹

    介绍一个切换 用户/访客 模式:

     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系统 “沟通的桥梁”。

    1. // 切换到共享文件夹路径中
    2. gec@ubuntu:~$ cd /mnt/hgfs/共享文件夹名字(自己的)
    3. gec@ubuntu:/mnt/hgfs/共享文件夹名字(自己的)$

     若已设置,却不显示共享路径:(一般不会有第二种情况,极少数会出现这个问题)

    1 查看是否设置共享路径成功命令:

    2 确实设置陈成功后,输入以下命令:

    1. /* 如果之前没有命令包则先执行
    2. sudo apt-get install open-vm-tools
    3. */
    4. // 输入以下命令
    5. 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编辑器

    1. // vi编辑器使用
    2. gec@ubuntu:/mnt/hgfs/share_217$ vi main.c
    3. // vim编辑器使用
    4. 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代码编译器,用于编译代码(程序每次修改后都需要保存并重新编译,不然会出错)

    1. # 编译命令:gcc 源码文件 -o 可执行文件名
    2. gec@ubuntu:/mnt/hgfs/share_217$ gcc main.c -o main
    3. # 运行可执行文件:./可执行文件名
    4. gec@ubuntu:/mnt/hgfs/share_217$ ./main
    5. helloworld
    6. # 若不指定生成可执行文件名,则默认生成可执行文件名为:a.xxx linux-a.out windows-a.exe
    7. gec@ubuntu:/mnt/hgfs/share_217$ gcc main.c
    8. gec@ubuntu:/mnt/hgfs/share_217$ ls
    9. a.exe a.out main main.c

    复习一下 C语言:七大原则:空行、空格、成对书写、缩进、对齐、代码行、注释七方面的书写规

    硬性要求:

    1 该换行就换行;

    2 该缩进对齐就缩进对齐;

    3 符号间需要空格;

    4 参数定义规范;

    5 符号成对书写;

    6 注释:单行注释: //       多行注释: /* */

    c语言格式:

    1. #include
    2. // int main(参数个数, 第1个参数,第2个参数 ...)
    3. // 根据函数返回值定义对应函数类型
    4. int main(int argc, char *argv[])
    5. {
    6. // printf("argv[0] : %s\n", argv[0]);
    7. printf("argv[1] : %s\n", argv[1]);
    8. printf("argv[2] : %s\n", argv[2]);
    9. return 0;
    10. }
    11. // 终端下:
    12. gec@ubuntu:/mnt/hgfs/share$ gcc main.c -o main (-o 可以运行执行文件) 一定是编译,然后在运行!!
    13. gec@ubuntu:/mnt/hgfs/share$ ./main zhangsan lisi
    14. argv[0] : ./main
    15. argv[1] : awei
    16. argv[2] : zhangsi

    基础知识:

    关系运算符(一般使用if进行一个使用)

    常用类型

    int

    char

    float

    long

    大小(字节)

    4

    1

    4

    8

    关系运算符

    相等条件为真

    不相等条件为真

    大于 / 小于

    大于等于 / 小于等于

    符号

    ==

    !=

    >

    >=

    逻辑运算符

    与条件

    或条件

    非条件

    符号

    &&

    ||

    ASCII码对照表:(虚拟机使用MAN ASCLL可以查看手册,不太建议去背起来)

    2 条件判断

    1. if(条件A)
    2. {
    3. // 如果条件A为真,则运行此代码
    4. demo_A ... ;
    5. }
    6. else if(条件B)
    7. {
    8. // 如果条件A不满则,则检测条件B是否满足;
    9. // 条件B为真,则运行此代码
    10. demo_B ... ;
    11. }
    12. else
    13. {
    14. // 若不满足条件A&&条件B,则运行此代码
    15. demo_B ... ;
    16. }

    3 循环逻辑:

    while(){ }:

     别给写成是while(1)死循环!!!!

    for循环:

    1. for(变量初始化; 条件; 每次循环变量的变化){
    2. 操作;
    3. }

    例子:

    1. for(num=1; num<=5; num++){
    2. sleep(1);
    3. printf("num:%d\n", num);
    4. }

    4 数组介绍:

    一维数组:数组名[ 数组大小 ] = {};

    示例:

    注:数组创建, [] 中要给一个常量才可以,不能使用变量。可以直接用常量,或者使用宏定义。

    数组的初始化(实现数组的监控)

    1. // 示例代码:
    2. void main(){
    3. // 定义数组 arr[]
    4. // 大小:3个char型
    5. // 并初始化值arr[0] = 'A', arr[1] = 'b';
    6. char arr[3] = {'A','b'};
    7. for(int i=0; i<3; i++){
    8. printf("%c ", arr[i]);
    9. }
    10. }
    11. // ubuntu终端:
    12. gec@ubuntu:/mnt/hgfs/share$ ./a.out
    13. A b

    int arr[6] ="abcdef";

    结论:

    • 数组是具有相同类型的集合,数组的大小(即所占字节数)由元素个数乘以单个元素的大小。
    • 数组只能够整体初始化,不能被整体赋值。只能使用循环从第一个逐个遍历赋值。
    • 初始化时,数组的维度或元素个数可忽略 ,编译器会根据花括号中元素个数初始化数组元素的个数。
    • 当花括号中用于初始化值的个数不足数组元素大小时,数组剩下的元素依次用0初始化。
    • 字符型数组在计算机内部用的时对应的ascii码值进行存储的。
    • 一般用”“引起的字符串,不用数组保存时,一般都被直接编译到字符常量区,并且不可被修改。

    二维数组格式:

    数组名[ 元素组数 ][ 每组元素大小 ] = {};

    数组名[ 行 ][ 列 ];

    A[3][4]

    (注意:二维数组可省略元素组数(系统自动根据初始化/输入数据决定),不可省略每组元素大小空间)即为可以省略行!!但是不可以省略每一组的空间大小!

    1. // 示例代码:
    2. int main(){
    3. // 输入字符串存放到 arr[]
    4. int i;
    5. char arr[3][10];
    6. for(i=0; i<3; i++){
    7. scanf("%s",arr[i]);
    8. }
    9. // 打印输出 arr[]
    10. for(i=0; i<3; i++){
    11. printf("\t%s\n",arr[i]);
    12. }
    13. }
    14. // ubuntu终端:
    15. gec@ubuntu:/mnt/hgfs/share$ ./a.out
    16. zhangsan
    17. lisi
    18. wangwu
    19. zhangsan
    20. lisi
    21. wangwu

    05 指针:

    C语言中指针是一种数据类型,指针是存放数据的内存单元地址。

    计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节,为了便于管理,必须为每个存储单元编号,该编号就是存储单元的“地址”,每个存储单元拥有一个唯一的地址。

    指针变量除了可以存放变量的地址外,还可以存放其他数据的地址,例如可以存放数组和函数的地址。

    *

    解引用符号

    &

    取地址符号

    %p

    打印地址类型

    %ls

    打印指针数据

    指针变量的使用
    1. 给指针变量赋值

    格式:指针变量=地址型表达式

    “地址型表达式”即运算结果是地址型的表达式。C语言规定,变量地址只能通过取地址运算符获得,即“&”,其运算对象是变量或数组元素名,运算结果是对应变量或数组元素的地址。

    需要注意的是,虽然地址是一个整数,但是C语言中不允许把整数看成“地址常量”,所以此处的“地址型表达式”不能是整数。

    2. 使用指针变量

    格式:指针变量名

    需要使用地址时,可以直接引用指针变量名。

    3. 通过指针变量引用所指向的变量

    格式:*指针变量名

    “*指针变量名” 代表其指向的变量或数组元素,其中的“*”称为指针运算符。需要注意的是,这种引用方式要求指针变量必须已经定义且有值。


    4. 指针的基本运算:

    1. 取地址运算符 &

    取地址运算符“&”的功能是取变量的地址,它是单目运算符。取地址运算符的运算对象必须是已经定义的变量或数组元素,但不能是数组名。运算结果是运算对象的地址。

    2. 指针运算符 *

    指针运算符“*”的功能是取指针变量所指向地址中的内容,与取地址运算符“&”的运算是互逆的,它是单目运算符。指针运算符的运算对象必须是地址,可以是已赋值的指针变量,也可以是变量或数组元素的地址,但不能是整数,也不能是非地址型的变量。运算结果就是地址对应的变量。
     

    06 结构体使用

    结构的意义:把多个类型变量整合成一个struct 结构体必须的单词

    1. struct tag {
    2. member-list;
    3. member-list;
    4. member-list;
    5. ...
    6. } variable-list;
    7. // struct: 结构体
    8. // tag: 标签
    9. // menber-list: 标准变量
    10. // variable-list: 结构体变量
    11. int num;
    12. struct num;

    结构体示例代码:

    1. #include
    2. struct student{
    3. char *name; //名字
    4. int num; //学号
    5. char sex; //性别
    6. float height; //身高
    7. }zhangsan={"张三", 1, 'M', 190.66666};
    8. // jiegoutibianliang.xxx ————> 结构体 的 xxx属性 //并没有严格的规定!!!
    9. int main(){
    10. printf("info: No.%d\n", zhangsan.num);
    11. printf("name: %s\n", zhangsan.name);
    12. printf("sex: %c\n", zhangsan.sex);
    13. printf("height: %.2f\n", zhangsan.height);
    14. return 0;
    15. }

    结构体练习题目:

     示例:

     

  • 相关阅读:
    Perl 脚本运行时提示:Can‘t locate Win32/OLE.pm in @INC
    基于利用协议模拟工具解决工控CTF题
    精简版 — Hive开发常用操作
    【测试】测试执行流程
    物联网设备通信
    头条文章_signature
    IDEA上MySQL的jar包导入教程
    acwing算法基础之搜索与图论--最短路问题
    【深入研究Hotspot源码与Linux内核】
    Matlab实验二
  • 原文地址:https://blog.csdn.net/m0_64148096/article/details/126593954