当前位置: 首页 > news >正文

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置

目录

前沿

Ubuntu 和 Windows 文件互传

Ubuntu 下 NFS 和 SSH 服务开启

 Ubuntu 交叉编译工具链安装

Source Insight 软件安装和使用

Visual Studio Code 软件的安装和使用


前沿

为什么我们要学习裸机开发呢?

        1、裸机开发是了解所使用的 CPU 最直接、最简单的方法,比如使用的 I.MX6U,跟STM32 一样,裸机开发是直接操作 CPU 的寄存器。Linux 驱动开发最终也是操作的寄存器,但是在操作寄存器之前要先编写一个符合 Linux 驱动的框架。同样一个点灯驱动,裸机可能只需要十几行代码,但是 Linux 下的驱动就需要几十行代码。
        2、大部分 Linux 驱动初学者都是从 STM32 转过来的,Linux 驱动开发和 STM32 开发区别很大,比如 Linux 没有 MDK、IAR 这样的集成开发环境,需要我们自己在 Ubuntu 下搭建交叉编译环境。
        3、裸机开发是连接 Cortex-M(如 STM32)单片机和 Cortex-A(如 I.MX6U)处理器的桥梁。

        要进行裸机开发肯定要先搭建好开发环境,我们在开始学习 STM32 的时候肯定需要安装一堆的软件,比如 MDK、IAR、串口调试助手等等,这个就是 STM32 的开发环境搭建。同样的,要想在 Ubuntu 下进行 Cortex-A(I.MX6U)开发也需要安装一些软件,进行开发环境的搭建,环境搭建好以后我们就可以进行开发了。环境搭建分为 Ubuntu 和 Windows,因为我们最熟悉 Windows,所以代码编写、查找资料啥的肯定是在 Windows 下进行的。但是 Linux 开发又必须在 Ubuntu 下进行,所以还需要搭建 Ubuntu 下的开发环境,主要是交叉编译器的安装,所以接下来分为:Ubuntu 和 Windows,介绍这两种系统下环境的搭建。

Ubuntu 和 Windows 文件互传

        在开发的过程中会频繁的在 Windows 和 Ubuntu 下进行文件传输,比如在 Windwos 下进行代码编写,然后将编写好的代码拿到 Ubuntu 下进行编译。Windows 和 Ubuntu 下的文件互传我们需要使用 FTP 服务,设置方法如下:

1.开启Ubuntu下的FTP服务

打开 Ubuntu 的终端窗口,然后执行如下命令来安装 FTP 服务:

sudo apt-get install vsftpd

等待软件自动安装,安装完成以后使用 VI 命令打开/etc/vsftpd.conf,命令如下:

sudo vi/etc/vsftpd.conf

打开 vsftpd.conf 文件以后找到如下两行:

local_enable=YES
write_enable=YES

确保上面两行前面没有“#”,有的话就取消掉,完成以后如图 下所示:

修改完 vsftpd.conf 以后保存退出,使用如下命令重启 FTP 服务: 

sudo /etc/init.d/vsftpd restart

2、Windows下FTP客户端安装

Windows 下 FTP 客户端我们使用 FileZilla,这是个免费的 FTP 客户端软件,可以在 FileZilla
官网下载,下载地址如下:https://www.filezilla.cn/download,下载界面如下图所示:

 打开 FileZilla 软件,界面如下图所示:

 3、FileZilla 软件设置

        Ubuntu 作为 FTP 服务器,FileZilla 作为 FTP 客户端,客户端肯定要连接到服务器上,打开站点管理器,点击:文件->站点管理器,打开以后如下图所示:

        点击图中的“新站点(N)”按钮来创建站点,新建站点以后就会在“我的站点”下出现新建的这个站点,站点的名称可以自行修改,比如我将新的站点命名为“Ubuntu”如下图所示: 

        选中新创建的“Ubuntu”站点,然后对站点的“常规”进行设置,设置如下图所示:

        按照上图中设置好以后,点击“连接”按钮,第一次连接可能会弹出提示是否保存密码的对话框,点击确定即可。连接成功以后如下图所示:

        连接成功以后如图上图所示,其中左边就是 Windows 文件目录,右边是 Ubuntu 文件目录,默认进入用户根目录下(比如我电脑的“/home/zhangyu”)。但是注意观察在图上中Ubuntu 文件目录下的中文目录都是乱码的,这是因为编码方式没有选对,先断开连接,点击:服务器(S)->断开连接,然后打开站点管理器,选中要设置的站点“Ubuntu”,选择“字符集”,如下图所示:

        按照上图设置好字符集以后重新连接到 FTP 服务器上,重新链接到 FTP 服务器以后Ubuntu 下的文件目录中文显示就正常了,如下图所示 :

         如果要将 Windows 下的文件或文件夹拷贝到 Ubuntu 中,只需要在上图中左侧的Windows 区域选中要拷贝的文件或者文件夹,然后直接拖到右侧的 Ubuntu 中指定的目录即可。将 Ubuntu 中的文件或者文件夹拷贝到 Windows 中也是直接拖放。

Ubuntu 下 NFS 和 SSH 服务开启

1.NFS 服务开启

        后面进行 Linux 驱动开发的时候需要 NFS 启动,因此要先安装并开启 Ubuntu 中的 NFS服务,使用如下命令安装 NFS 服务:

sudo apt-get install nfs-kernel-server rpcbind

        等待安装完成,安装完成以后在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹,如下图所示:

        上图中创建的 nfs 文件夹供 nfs 服务器使用,以后我们可以在开发板上通过网络文件系统来访问 nfs 文件夹,要先配置 nfs,使用如下命令打开 nfs 配置文件/etc/exports:

sudo vi/etc/exports

 重启 NFS 服务,使用命令如下:

sudo /etc/init.d/nfs-kernel-server restart

SSH 服务开启

        开启 Ubuntu 的 SSH 服务以后我们就可以在 Windwos 下使用终端软件登陆到 Ubuntu,比如使用 SecureCRT,Ubuntu 下使用如下命令开启 SSH 服务:

sudo apt-get install openssh-server

        上述命令安装 ssh 服务,ssh 的配置文件为/etc/ssh/sshd_config,使用默认配置即可。

 Ubuntu 交叉编译工具链安装

1.交叉编译器安装

        ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器,我们在前边文章Ubuntu下Linux C编程里面已经介绍了如何在 Liux 进行 C 语言开发,里面使用 GCC 编译器进行代码编译,但是 Ubuntu 自带的 gcc 编译器是针对 X86 架构的!而我们现在要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架构代码的 GCC 编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:

  • 它肯定是一个 GCC 编译器。
  • 这个 GCC 编译器是运行在 X86 架构的 PC 上的。
  • 这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯片上运行的。

        交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。

        交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器,Linaro 是一间非营利性质的开放源代码软件工程公司,Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链(编译器),关于 Linaro 详细的介绍可以到 Linaro 官网查阅。Linaro GCC 编译器下载地址如下:
https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/

打开以后的界面如下图所示:

         在上图中有很多种交叉编译器,我们只需要关注这两种: gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.tar.xz 和 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz,第一个是针对 32 位系统的,第二个是针对 64 位系统的。根据自己所使用的 Ubuntu 系统类型选择合适的版本,比如我安装的 Ubuntu 16.04 是 64 位系统,因此我要使用 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。

        我们要先将交叉编译工具拷贝到 Ubuntu 中,在上边我们在当前用户根目录下创建了一个名为“linux”的文件夹,在这个 linux 文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的 FileZilla 将交叉编译器拷贝到 Ubuntu 中刚刚新建的“tool”文件夹中,操作如下图所示,且成功完成的话FileZilla会有提示。

         在 Ubuntu 中创建目录:/usr/local/arm,命令如下:

sudo mkdir /usr/local/arm

        创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm 这个目录中,在终端使用命令“ cd” 进入 到 存放 有交 叉编 译 器的 目录 ,比如我前面将交叉编译器拷贝到了目录“/home/zuozhongkai/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm 中:

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f

操作如下图所示:

拷贝完成以后在/usr/local/arm 目录中对交叉编译工具进行解压,解压命令如下:

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

        等待解压完成,解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linuxgnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。

        修改环境变量,使用 VI 打开/etc/profile 文件,命令如下:

sudo vi /etc/profile

        打开/etc/profile 以后,在最后面输入如下所示内容:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

         添加完以后的/etc/profile如下图所示:

        修改好以后就保存退出,重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功了。

2.安装相关的库

        在使用交叉编译器之前还需要安装一下其它的库,命令如下:

sudo apt-get install lsb-core lib32stdc++6

        等待这些库安装完成

3.交叉编译器验证

        首先查看一下交叉编译工具的版本号,输入如下命令:

arm-linux-gnueabihf-gcc -v

        如果交叉编译器安装正确的话就会显示版本号,如下图所示:

        从上图中可以看出当前交叉编译器的版本号为 4.9.4,说明交叉编译工具链安装成功。在前边的介绍中我们使用 Ubuntu 自带的 GCC 编译器,我们用的是命令“gcc”。要使用刚刚安装的交叉编译器的时候使用的命令是“arm-linux-gnueabihf-gcc”,“arm-linux-gnueabihfgcc”的含义如下:

  • arm 表示这是编译 arm 架构代码的编译器。
  • linux 表示运行在 linux 环境下。
  • gnueabihf 表示嵌入式二进制接口。
  • gcc 表示是 gcc 工具。

        最好的验证方法就是直接编译一个例程,我们就编译第一个裸机例程“1_leds”试试,在前面创建的 linux 文件夹下创建 driver/board_driver 文件夹,用来存放裸机例程,如图下图所示:

         将第一个裸机例程“1_leds”拷贝到 board_driver 中,然后执行 make 命令进行编译,如下图所示:

        从上图中可以看到例程“1_leds”编译成功了,编译生成了 led.o 和 led.bin 这两个文件,使用如下命令查看 led.o 文件信息: 

file led.o

        结果如下图所示:

        从上图中可以看到 led.o 是 32 位 LSB 的 ELF 格式文件,目标机架构为 ARM,说明我们的交叉编译器工作正常。 

Source Insight 软件安装和使用

        由于这个软件是付费的,所以我不太喜欢用这个软件开发,先介绍一下下,我在开发过程中还是喜欢用Visual Studio Code.

1. Source Insight 安装

        Source Inisght 是一款功能强大的代码编辑、阅读工具,工作在 Windows 下,我们可以Source Insight来进行代码编写和阅读,编写完成以后将代码拷贝到 Ubuntu中去编译即可。SourceInsight 下载地址为:https://www.sourceinsight.com/download/,如下图所示:

        双击“sourceinsight4086-setup.exe”即可开始安装,首先是如下图所示欢迎界面 :

        点击上图所示的“Next”按钮进入下一步,如下图所示:

        选择上图中的“I accept the terms in the license adreement”,然后点击“Next”按钮,进入安装目录选择界面,根据自己的实际情况选择合适的安装目录,如下图所示:

        选择好安装目录以后点击“Next”按钮,进入图 4.4.1.5 所示的准备安装界面:

        点击上图中的“Install”按钮开始安装,等待安装完成,安装完成以后如下图所示:

        点击上图中的“Finish”按钮退出安装,安装成功以后会在桌面上出现 Source Insight4.0 的图标,如下图所示: 

        双击图标打开 Source Inisght 4.0,第一次打开的话会有 Licese 提示,因为 Source Insight 4.0 是个收费软件,所以是需要购买 License 的,如果没有购买的话可以免费体验 30 天,如下图所示:

        在上图中,如果你已经购买了 licese 那么就选择第一个,如果没有购买 licese 的话就选择第二个免费体验 30 天,选择好以后点击“Next”按钮,进入下图所示界面

        填写完上图中的信息,然后点击“Next”,填写好以后一路“Next”下去就可以了,打开以后的默认界面如下图所示

        至此 Source Insight 安装完成。

2. Source Insight 新建工程

        跟 MDK、IAR 一样,Source Insight 是需要创建工程的,但是远没有 MDK 和 IAR 那么复杂,先新建一个工程文件夹, 比如 test,test 用来存放工程所有文件,包括 Source Insight 工程文件和 C 语言源码文件。

        注意!Source Insight 的工程不能有中文路径!!!!!!

Visual Studio Code 软件的安装和使用

1.Visual Studio Code 的安装

        Visual Stuio Code 和 Source Insight 一样,都是编辑器,Visual Studio Sode 本教程以后就简称为 VSCode,VSCode 是微软出的一款编辑器,但是免费的。VSCode 有 Windows、Linux 和macOS 三个版本的,是一个跨平台的编辑器。VSCode 下载地是:https://code.visualstudio.com/,下载界面如下图所示:

        在上图中下载自己想要的版本,本教程需要 Windows 和 Linux 这两个版本,所以下载这两个即可。

Windows 版本安装(傻瓜式安装)

        Windows 版本的安装和容易,和其他 Windows 一样,双击.exe 安装包,然后一路“下一步”即
可,安装完成以后在桌面上就会有 VSCode 的图标,如下图所示:

         双击图上图打开 VSCode,默认界面如下图所示:

 Linux 版本安装

        我们有时候也需要在 Ubuntu 下阅读代码,所以还需要在 Ubuntu 下安装 VSCode。然后我们使用如下命令进行安装:

sudo dpkg -i code_1.32.3-1552606978_amd64.deb

        等待安装完成,如下图所示:

2. Visual Studio Code 插件的安装

        VSCode 支持多种语言,比如 C/C++、Python、C#等等,本教程我们主要用来编写 C/C++称序的,所以需要安装 C/C++的扩展包,扩展包安装很简单,如下图所示:

        我们需要按照的插件有下面几个: 

  • 1)、C/C++,这个肯定是必须的。
  • 2)、C/C++ Snippets,即 C/C++重用代码块。
  • 3)、C/C++ Advanced Lint,即 C/C++静态检测 。
  • 4)、Code Runner,即代码运行。
  • 5)、Include AutoComplete,即自动头文件包含。
  • 6)、Rainbow Brackets,彩虹花括号,有助于阅读代码。
  • 7)、One Dark Pro,VSCode 的主题。
  • 8)、GBKtoUTF8,将 GBK 转换为 UTF8。
  • 9)、ARM,即支持 ARM 汇编语法高亮显示。
  • 10)、Chinese(Simplified),即中文环境。
  • 11)、vscode-icons,VSCode 图标插件,主要是资源管理器下各个文件夹的图标。
  • 12)、compareit,比较插件,可以用于比较两个文件的差异。
  • 13)、DeviceTree,设备树语法插件。
  • 14)、TabNine,一款 AI 自动补全插件,强烈推荐,谁用谁知道!

        如果想要查看已经安装好的插件,可以按照下图的方法进行查看:

        安装好插件以后就可以进行代码编辑了,截至目前,VSCode 界面都是英文环境,我们已经安装了中文插件了,最后将 VSCode 改为中文环境,按下“Ctrl+Shift+P”打开搜索框,在搜索框里面输入“config”,然后选择“Configure Display Language”。如下图所示:

        在打开的 local.json 文件中将 locale 修改为 zh-cn,如图下图所示:

        修改完成以后保存 local.json,然后重新打开 VSCode,测试 VSCode 就变成了中文的了,如下图所示:

3.Visual Studio Code 新建工程

        新建一个文件夹用于存放工程,比如我新建的文件夹目录为 E:\VScode_Program\1_test,路径尽量不要有中文和空格。打开 VSCode,然后在 VSCode 上点击文件->打开文件夹…,选刚刚
创建的“test”文件夹,打开以后如下图所示:

        从上图可以看出此时的文件夹“TEST”是空的,点击文件->将工作区另存为…,打开工作区命名对话框,输入要保存的工作区路径和工作区名字,如下图所示:

        工作区保存成功以后,点击图上图中的“新建文件”按钮创建 main.c 和 main.h 这两个文件,创建成功以后 VSCode 如下图所示:

         从下图可以看出,此时“实验 TEST”中有main.c 和 main.h,这三个文件和文件夹同样会出现在“实验TEST文件夹中,如下图所示:

         在main.h中输入如下所示内容:

# include<stdio.h>int add(int a, int b)

        在main.c中输入如下所示内容:

# include <main.h>int add(int a, int b){return (a+b);}int main(void)
{int value = 0;value = add(5,6);printf("5 + 6 = %d", value);return 0;}

        代码编辑完成以后VSCode 界面如图所示:

         从上图可以看出,VSCode 的编辑的代码高亮很漂亮,阅读起来很舒服。但是此时提示找不到“stdio.h”这个头文件,如下图所示错误提示:

        在上图中提示找不到“main.h”,同样的在 main.h 文件中会提示找不到“stdio.h”。这是因为我们没有添加头文件路径。按下“Ctrl+Shift+P”打开搜索框,然后输入“Edit configurations”,选择“C/C++:Edit configurations…”,

        C/C++的配置文件是个 json 文件,名为:c_cpp_properties.json,此文件默认内容如下图所示:

        c_cpp_properties.json 中的变量“includePath”用于指定工程中的头文件路径,但是“stdio.h”是 C 语言库文件,而 VSCode 只是个编辑器,没有编译器,所以肯定是没有 stdio.h 的,除非我们自行安装一个编译器,比如 CygWin,然后在 includePath 中添加编译器的头文件。这里我们就不添加了,因为我们不会使用 VSCode 来编译程序,这里主要知道如何指定头文件路径就可以了。

        我们在 VScode 上打开一个新文件的话会覆盖掉以前的文件,这是因为 VSCode 默认开启了预览模式,预览模式下单击左侧的文件就会覆盖掉当前的打开的文件。如果不想覆盖的话采用双击打开即可,或者设置 VSCode 关闭预览模式,设置如下图所示:

        我们在编写代码的时候有时候会在右下角有如下图所示的警告提示:

        这是因为插件 C/C++ Lint 打开了几个功能,我们将其关闭就可以了,顺便也可以学习一下VSCode 插件配置方法, 如下图所示:

         在 C/C++ Lint 配置界面上找到 CLang:Enable、Cppcheck:Enable、Flexlint:Enable 这个三个,然后取消掉勾选即可,下图所示:

         按照上图所示取消这三个有关 C/C++ Lint 的配置以后就不会有图所示的错误提示了。但是关闭 Cppcheck:Enable 以后 VSCode 就不能实时检查错误了,大家根据实际情况选择即可。

相关文章:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置

目录 前沿 Ubuntu 和 Windows 文件互传 Ubuntu 下 NFS 和 SSH 服务开启 Ubuntu 交叉编译工具链安装 Source Insight 软件安装和使用 Visual Studio Code 软件的安装和使用 前沿 为什么我们要学习裸机开发呢&#xff1f; 1、裸机开发是了解所使用的 CPU 最直接、最简单的方…...

Java文件复制多种方法

1、InputStream与OutputStream 创建两个文件 - 源和目标。然后我们从源创建InputStream并使用OutputStream将其写入目标文件进行 java 复制文件操作。 private static void copyFileUsingStream(File source, File dest) throws IOException {InputStream is null;OutputStr…...

Java语言-----封装、继承、抽象、多态、接口

目录 前言 一.封装 1.1封装的定义 1.2访问修饰符的使用 二.继承 2.1继承的定义 2.2继承的方法 2.3继承使用注意点 三.多态 3,1多态的定义 3.2动态绑定 3.3方法重写 3.4向上&#xff08;向下&#xff09;转型 四.抽象 4.1抽象的概述和定义 4.2抽象的使用 五…...

基于深度学习的瓶子检测软件(UI界面+YOLOv5+训练数据集)

摘要&#xff1a;基于深度学习的瓶子检测软件用于自动化瓶子检测与识别&#xff0c;对于各种场景下的塑料瓶、玻璃瓶等进行检测并计数&#xff0c;辅助计算机瓶子生产回收等工序。本文详细介绍深度学习的瓶子检测软件&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的…...

仿网易云小程序(一)

目录 一、项目准备 二、项目初始化 1.新建项目 2.封装service请求 三、底部导航栏的设计 四、MV页面的设计 1.将获取到的数据进行渲染 2.播放量数据进行处理转换 3.时长数据进行处理转换 五、MV组件的抽离封装 六、请求的抽离video 七、下拉重新请求新的数据 八、跳转到…...

【C++】vector模拟实现及其应用

文章目录vector的介绍vector的使用及其实现vector的定义vector iterator 的使用vector空间增长问题vector的增删查改vector的介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素…...

JS看这一篇就够啦,JS基础大全,可用于快速回顾知识,面试首选

1 JS简介 更多JS内容可以看MDN&#xff1a;点击传送 浏览器分成两部分&#xff1a;渲染引擎和 JS 引擎 渲染引擎&#xff1a;用来解析HTML与CSS&#xff0c;俗称内核&#xff0c;比如 chrome 浏览器的 blink &#xff0c;老版本的 webkitJS 引擎&#xff1a;也称为 JS 解释器…...

武汉凯迪正大GB4208外壳防护等级试具

一、IP1X 试验探棒 产品概述&#xff1a; 符合IEC61032图1试具A、GB16842试具A、GB4208IP1、IEC60529IP1、IEC60065 等标准要求。用于防止手背触及的防护检验。 技术参数&#xff1a; 1、探球直径&#xff1a;50mm 2、挡板直径&#xff1a;45mm 3、挡板厚度&#xff1a;…...

Cent OS 从零部署ruoyi-cloud教程

1、java环境安装 https://blog.csdn.net/m0_61035257/article/details/125705400 Java_home设置 https://blog.csdn.net/m0_51104427/article/details/123924893 2、mysql安装 https://blog.csdn.net/ShockChen7/article/details/126965940 若安装的是Mysql8&#xff0c;建议…...

ChatGPT相关核心算法

ChatGPT 的卓越表现得益于其背后多项核心算法的支持和配合。本文将分别介绍作为其实现基础的 Transformer 模型、激发出其所蕴含知识的Prompt/Instruction Tuning 算法、其涌现出的思维链能力、以及确保其与人类意图对齐的基于人类反馈的强化学习算法。 1.基于Transformer的预…...

Python导入模块,Python import用法(超级详细)

使用 Python 进行编程时&#xff0c;有些功能没必须自己实现&#xff0c;可以借助 Python 现有的标准库或者其他人提供的第三方库。比如说&#xff0c;在前面章节中&#xff0c;我们使用了一些数学函数&#xff0c;例如余弦函数 cos()、绝对值函数 fabs() 等&#xff0c;它们位…...

大量产品“GPT 化”,开源大模型 AI 应用开发框架发布

大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;让我们看到了 AI 在自然语言处理方面的潜力&#xff0c;它涌现出来的创造力和思维能力令人叹为观止&#xff0c;并在新一代人机交互领域释放了大量的想象空间。 目前&#xff0c;决策者、产品负责人和开发者都在抢滩…...

STM32——IIC总线(MPU6050应用)

目录 一、IIC介绍 二、MPU6050 三、MPU6050实例 四、EEPROM ---------------------------------------------------------------------------------------------------------------------------- 每次都是IIC好没新意啊&#xff0c;我决定这次录视频的时候举两个例子&…...

ADB使用经验

adb是Android Debug Bridge的缩写&#xff0c;是一种用于与Android设备通信的命令行工具。它可以通过USB连接或Wi-Fi连接&#xff0c;允许开发者在计算机和Android设备之间进行文件传输、安装应用程序、调试应用程序等操作。要使用adb&#xff0c;需要先将Android设备与计算机连…...

详解LinkedHashSet和LinkedHashMap

目录 一.LinkedHashSet和LinkedHashMap 1.基本介绍 2.与HashSet和HashMap的区别 3.LinkedHashSet和LinkedHashMap具体的方法 1.LinkedHashSet 2.LinkedHashMap 二.模拟代码实现LinkedHashMap 三.具体应用 一.LinkedHashSet和LinkedHashMap 1.基本介绍 顾名思义,根据名…...

C++ LinuxWebServer 2万7千字的面经长文(下)

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; Linux Web Server项目虽然是现在C求职者的人手一个的项目&#xff0c;但是想要吃透这个项目&#xff0c;还是…...

RK3568平台开发系列讲解(驱动基础篇)IO 模型的分类

🚀返回专栏总目录 文章目录 一、阻塞 IO二、非阻塞 IO三、IO 多路复用四、信号驱动五、异步 IO沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将针对IO模型进行分类。 假设有这样一个场景,从磁盘中循环读取 100M 的数据并处理,磁盘读取 100M 需要花费 20 秒的…...

ChatGPT 有哪些 “激动人心的时刻“?以及自己的一些思考

文章目录一、前言二、主要内容三、一些思考&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 近日&#xff0c;英伟达创始人兼 CEO 黄仁勋与 OpenAI 联合创始人及首席科学家伊尔亚-苏茨克维 (Ilya Sutskever) 展开了一次 “炉边谈话”。 黄仁…...

Thingsboard开源物联网平台智慧农业实例快速部署教程(二)【手把手部署UI与动态数据】

Thingsboard开源物联网平台智慧农业实例快速部署教程&#xff08;二&#xff09;【部署UI与动态数据】 文章目录Thingsboard开源物联网平台智慧农业实例快速部署教程&#xff08;二&#xff09;【部署UI与动态数据】1. 页面总览2. 设备2.1 数据字段定义2.2 设备映射关系2.3 添加…...

Redis事务

1、事务概要 Redis事务是一个单独的隔离操作&#xff1a; 事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断。 Redis事务的主要作用 串联多个命令&#xff0c;防止别的命令插队。 事务的3个命令 MultiExe…...

【蛤蟆先生去看心理医生】

第一章 整个人都不太好 人物性格描述蛤蟆热情、时尚、爱冒险&#xff0c;现在抑郁&#xff0c;不能自拔獾智慧、威严河鼠关心朋友&#xff0c;有点絮叨鼹鼠体贴善良 第二章 擎友前来相助 讲诉了鼹鼠和河鼠对蛤蟆情况的担忧和讨论。鼹鼠回忆起过去蛤蟆时髦的打扮和充满活力的生…...

JAVA开发与运维(云安全产品)

在现在的开发和运维中&#xff0c;云生态组件的使用率非常高&#xff0c;很少公司自己维护自己的物理机&#xff0c;网络流量 &#xff0c;监控&#xff0c;第三方中间件&#xff0c;除了少数涉密程度高的部分和公司外&#xff0c;大多数的企业都在使用云生态。比如我们正在开发…...

[Few-shot learning] Siamese neural networks

这篇文章主要介绍的是Siamese Neural Network经典论文&#xff1a; Gregory Koch, et al., Siamese Neural Networks for One-shot Image Recognition. ICML 2015。 神经网络能够取得非常好的效果得益于使用大量的带标签数据进行有监督学习训练。但是这样的训练方法面临两个难题…...

利用qiankun框架在自己项目中集成拖拽式低代码数据可视化开发平台

目前微前端已经是很成熟的技术了&#xff0c;各大公司都推出了自己的微前端框架&#xff0c;比如蚂蚁的qiankun&#xff0c;京东的micro-app&#xff0c;如果你的子应用不使用vite构建的话&#xff0c;我会更加推荐后者&#xff0c;micro-app使用更加简单&#xff0c;micro-app…...

【spring boot】在Java中操作缓存:

文章目录一、Jedis二、Spring Data Redis&#xff08;常用&#xff09;【1】pom.xml【2】application.yml【3】RedisConfig【4】RuiJiWaiMaiApplicationTests三、Spring Cache【1】常用注解&#xff1a;【2】使用案例【3】底层不使用redis&#xff0c;重启服务&#xff0c;内存…...

擂台赛-安全攻防之使用openssh后门获取root密码实战

前言 大家好&#xff0c;我是沐风晓月&#xff0c;我们开始组队学习了&#xff0c;介绍下我们的情况&#xff1a; 这几天跟队员 迎月&#xff0c;虹月&#xff0c;心月&#xff0c;古月打擂台&#xff0c;我和心月一组&#xff0c;相互攻占对方服务器。 终于在今早凌晨三点拿…...

关于React入门基础从哪学起?

文章目录前言一、React简介1. React是什么2. react 与 vue 最大的区别就是:3. React特点4. React介绍描述5. React高效的原因6.React强大之处二、React基础格式1.什么是虚拟dom&#xff1f;2.为什么要创建虚拟dom&#xff1f;三、React也分为俩种创建方式1. 使用js的方式来创建…...

python玄阶斗技--tkinter库

目录 一.tkinter库介绍 二.功能实现 1.窗口创建 2.Button 按钮 3.Entry 文本输入域 4.text 文本框 5.Listbox 多选下拉框 6.Radiobutton 多选项按钮 7.Checkbutton 多选按钮 8.Scale 滑块(拉动条) 9.Scroolbar 滚动条 10.Menu 菜单栏 11. messagebox 消息框 12…...

【MySQL】MySQL的介绍MySQL数据库及MySQL表的基本操作

文章目录数据库的介绍什么是数据库数据库分类MySQL的介绍数据库的基本操作数据库的操作创建数据库查看所有数据库选中指定的数据库删除数据库常用数据类型数值类型字符串类型日期类型表的操作创建表查看指定数据库下的所有表查看指定表的结构删除表小练习数据库的介绍 什么是数…...

【每日随笔】社会上层与中层的博弈 ( 技术无关、没事别点进来看 | 社会上层 | 上层与中层的保护层 | 推荐学习的知识 )

文章目录一、社会上层二、上层与中层的保护层三、推荐学习的知识一、社会上层 社会上层 掌握着 生产资料 和 权利 ; 社会中层 是 小企业主 和 中产打工人 ; 上层 名额有限 生产资料所有者 : 垄断巨头 , 独角兽 , 大型企业主 , 大型企业股东 , 数量有限 ;权利所有者 : 高级别的…...

wordpress导入b站的直播/今天最新的新闻

牛津大学(University of Oxford)MSc Mathematical Finance牛津大学金融数学专业每年1月份开学&#xff0c;对学生本科背景要求较高&#xff0c;比较看重工作经验和数学背景。MSc in Financial Economics每年录取约70人&#xff0c;申请要求GPA3.5;IBT109/IELTS7.5;需要GRE/GMAT…...

wordpress作者认证/信息流优化师是什么

商业计划书撰写指南 &#xff08;本文《商业计划书撰写指南》转载自搜狐理财频道&#xff1a;http://money.sohu.com&#xff09; 商业计划书撰写指南  商业计划书&#xff0c; 商业计划书撰写指南实战  在融资过程中&#xff0c;创业者如何与风险投资者接触并建立良好的合…...

如何在网站上做支付功能/网站提交

在想cocos适配之前&#xff0c;我们想想网页是怎么适配的。浏览器有各种规格&#xff0c;网页的一般做法是&#xff1a;背景图片铺满&#xff0c;网页内容保持在背景图片上居中&#xff0c;就实现了适应或者适配。css一般这样&#xff1a; .bg{ height:582px; background-image…...

深圳做app网站建设/网络推广方式有哪些

package study; //多态性的向上转类型:子类->父类 class A{public void fun1() {System.out.println("父类的fun1方法");}public void fun2() {System.out.println("父类的fun2方法");} }class B extends A{public void fun1() {System.out.println(&qu…...

毕业设计网站建设/个人博客搭建

1 管理root用户密码2 用户授权与权限撤销3 安装图形管理工具1 管理root用户密码1.1 修改密码方法1&#xff1a;用mysqladmin该方式需要知道mysql的原密码命令格式&#xff1a;mysqladmin -hlocalhost -uroot -p password “新密码”方法2&#xff1a;需要登录到mysql授权用户…...

大学生网站开发目的/北京网站seo服务

文章目录STM32CubeMX驱动4脚OLED模块一、准备工作1.硬件平台2.软件平台3.OLED接线图二、操作步骤1.CubeMX配置硬件IIC、串口&#xff08;用于调试&#xff09;生成代码2.导入OLED驱动代码3.调用API4.程序下载&#xff0c;观察现象&#xff08;通用步骤&#xff09;5.实验现象ST…...