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

(萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念

目录

前言与导论

碎碎念

所以,我到底需要知道哪些东西呢

从一些基础的概念入手

常见的工具和说法

ST公司

MDK5 (Keil5)

CubeMX

如何使用MDK5的一些常用功能

MDK5的一些常见的设置


前言与导论

非常感谢2301_77816627-CSDN博客的提问,他非常好奇如何在起步的阶段学习STM32。笔者自己也是没学多久的STM32,当然下面的说法会有一些漏洞。但是,我仍然想分享一下自己对学习STM32的看法。中间肯定会有不少的疏漏,烦请各位看官大佬见笑了,如果有任何错误,可以直接犀利的在评论区指出,或者给我任何建议,我会第一时间同您交流!

碎碎念

大部分人可能是从51单片机开始学习,笔者自己也是大一的时候学习过非常粗浅的51单片机,在后来需要项目应用的时候才去学习STM32,我相信不少人更多的是从应用层开始接触我们的STM32的。

一个非常经典的疑问就是——我手头有一块非常巨大的开发板,比如说笔者现在敲电脑的旁边就是一块STM32G431RBT6开发板和正点原子家的STM32F103ZET6精英开发板,或者是一块非常迷你的核心板(最小系统板),比如我的左手边就是若干的STM32F103C8T6核心板。当然,这些概念可能会一下把萌新吓跑,在你慌张的准备退出这个标签的时候不妨留步,烦请听我慢慢道来。

嵌入式单片机领域,如果没有上过前置的课程,那可能会显得相当困难。

比如说微机原理(这里属于单片机开发体系当中的架构层次,也就是说,我们眼中的STM32单片机,是一个叫做ARM架构派生的一个产品,您不妨理解为根据这个arm架构的模板,开发出来的),在这个层次上,我们正在讨论的,会是非常具体的(对于架构具体,对萌新而言是灾难)行为——比如说,我如何操作寄存器来控制一个GPIO口的高低电平呢?我如何通过向一个地址写东西来控制实际映射到的外设呢?

比如说数电和模电——这样的电路怎么样就实现了我们GPIO的开漏推挽输出呢?如何实现了IIC协议的硬件层次通信呢?如何就让我们的USART就可以进行一定的串行通信了,又如何进行一定的收发呢?SPI硬件电如何保证了我们描述是否接受到信号发出信号的呢?

比如说C语言甚至是ARM架构汇编,编程语言是我们操纵手头的小单片机,焕发巨大魔力的有利的,直接的工具,他是我们应用层代码——何为应用层?就是直接看得到,摸的着的现象。比如说,当我们讨论

喂!把PA3上外接的LED灯点亮!

好嘞!我这边手头刚处理好使用硬件IIC完成OLED的通信业务逻辑!

的时候,我们就是在完成应用层,也就是最后直接跟用户对接的部分。

还有其他非常多的,甚至包括不少人不屑一谈,但是实际上劝退大把人的代码移植(隶属于编译技术),报错处理(笔者甚至遇到大把完全不懂编译器链接器的),软件工程(完全不知道如何组织自己项目的)等等,单片机的学习,在这里就可以提现出来了——非常的杂,软件硬件都有所交叉,甚至还要延伸到最底层的计算机架构(可以不懂嘛?可以不懂,但代价就是出现问题了你只能两手一摆,拿着示波器逻辑分析仪一顿瞎分析,还没有所以然,写一个代码完全没办法移植修修改改,对面的哥们更改两行代码就完成了整个工程的移植)

所以,笔者在这里,需要尝试整理一下,学习单片机,哪些领域,哪些层级是你需要注意的

1 会用的层级:你不需要关心你的板子到底做了什么,你只需要知道常见的单片机自身的概念,常用外设的概念,常见协议的概念。你知道如何配置Cubemx完成你的目的,你知道如何操作Keil来烧录上传你的板子,你知道如何使用STLink或者是DAP完成你对你手头板子的调试工作。你知道如何使用常见的排查手段——硬件上是示波器,万用表,逻辑分析仪;软件上是打串口日志,对非时序敏感的器件做调试操作等等。你不知道,也会葫芦吞枣的去根据别人的博客猜测可能的步骤。

2 理解的层级:慢慢的,会开始关注拿到新器件的手册,新开发板的手册,知道如何去根据自己的目的查询对应的关键词查询你的问题,你会去熟悉常见的你需要看的配置和资源有哪些(IO口?使用的协议和对应的状态?),你会去查询常见协议的设计的思路和实现的原理,甚至去扒电路图看看特定的你感兴趣的部分的电路实现。

3 更高的层次:现在,可能会去查询arm的手册看看你手头的芯片到底是怎么一回事。他是如何被设计的,因此可以用在哪些场景。你会设计一个庞大的嵌入式系统完成一个特定的任务,而且知道出现在眼前的问题如何使用更加准确的手段排查。笔者完全没到这个地步,但是认识的佬不少远超于这个水平,实在让人难以追赶,哈哈!

所以,我到底需要知道哪些东西呢

  1. 首先,如果完全没有接触过C语言,电路分析和派生的数电模电课程,笔者真心的建议你好好学学,不着急立马开始玩单片机,否则,你也不过是照搬别人的东西,自己什么也学不会,别人一问三不知。

  2. 你需要学习如何使用常见的工具:对于初学者,你会使用MDK5(Keil)完成单片机的开发(当然可以是CubeIDE),或者使用CubeMX快速的生成对ST家的芯片的配置模板。你要理解编辑器,编译器,链接器的存在,和他们到底在干什么的作用,笔者之前潜伏在正点原子的群里,就发现大量的人完全混淆这些概念,导致MDK的抛错完全看不懂,这是嵌入式教学中的一个巨大的失误——不对你使用的工具进行详细的介绍和说明他们到底在做什么的讲解,导致不少新人完全不知道发生了什么,代码怎么就跑起来了。当然,笔者比较温和,实际上现在不知道问题也不大,多接触一些慢慢会有所感觉。这里不过是抛出这些概念罢了

  3. 你需要理解常见的概念。当我们讨论——GPIO口,上拉下拉,外设等等的概念的时候,你可以对应的查询相关的概念。递归式的学习每一个出现的新名词,直到达到自己学习的极限。对于单片机,我们会说GPIO口(如何跟外围的设备进行交互),时钟树和晶振速度(你的单片机工作的速度多快?),定时器(字面含义)等等的概念,具体的你购买开发板的时候肯定会附送资料,跟着学!

  4. 你需要学习如何阅读手册,教程可以算作你的手册,购买外设商家附送的网盘资料可以是你的手册,一些datasheet网站上收录的手册也可以是你的参考资料,学习根据手册进行编程,是一个嵌入式人的标准素养

  5. 你需要学会使用单片机提供的能力操作你的外设,事实上这个是最先的。大部分的人首先会完成点亮一个LED的小实验,请记住,拿到一个板子,当你学会点亮一个LED的时候,你就正式的入门这个板子的使用了。随后,你还会驱动比如说其他更加复杂的外设。对摁键的检测,对OLED的控制,对电机舵机的把控等等。从这里开始,你就进入了应用层的学习,逐步走上正轨了。

最基本的步骤就是如此。

从一些基础的概念入手

常见的工具和说法

ST公司

当你打开这篇文章的时候,你肯定已经拥有了一块ST家的单片机(比如说STM32F103ZET6),但是不知道如何进行学习。ST是一个搞单片机的公司,你可以认为手中的这个芯片就是他们家的东西。

MDK5 (Keil5)

还记得你写C语言嘛?在大学里,笔者的老师要求我们使用老毕等VC6.0编辑器编辑我们的代码,我自己是VSCode/QtCreator写C/C++,算法竞赛党喜欢使用Code Block或者是Dev C++ 完成开发,他们都属于一个叫做IDE的产物。IDE,也就是集成开发环境,为你包揽万象,你不需要关心如何完全的配置你的编译器链接器,编辑器,调试器设置,他们通通被IDE接管了。你只需要在IDE中点点瞧瞧,点这个摁扭点那个按钮,事情就结束了。

在嵌入式中,一个最为经典的方案就是拿MDK5作为IDE开发单片机。

Keil MDK5安装详细步骤-CSDN博客

笔者随手搜了一下就搜到了安装的办法。学会使用搜索引擎是你学习嵌入式的一个重要的保障!

CubeMX

CubeMX是ST家为了让他们的芯片更加容易的被开发,使用Java开发的一个好用的快速配置软件,它可以快速的生成一个已经完成了初始化代码的工程模板,比如说,正点原子的教程幸苦的写了2个小时的代码,CubeMX点几下,然后生成工程,进去把LED电平差拉起来,LED就点亮了,前后不超过3分钟。对于初学者,这个软件能够快速的方便的生成一部分代码,但是对自己更长远的发展和学习不利,笔者建议是——写业务速速用,学习的时候,还是先理解每一个文件在做什么比较好。

STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

具体的介绍,请参考官方网站,注意的是——学习英文也是嵌入式中不可或缺的一部分,因为大部分的文档都是英文的(笑)。

如何使用MDK5的一些常用功能

MDK5的一些常见的设置

笔者写了两年的单片机,大大小小的项目过来,发现常见的需要改动的配置,这里我会说明一下。笔者随手打开了一个STM32F407ZGT6的,正点原子的工程。

打开界面,在你的左手侧的栏内,这是一个讲述的点:

这就是一个典型的目录工程结构。当然,如何分类是自由的,笔者就不喜欢分成这样,喜欢分成include和source后,根据是哪个外设的控制进行单独的分类,你喜欢分成如何,需要自己在开发当中慢慢体会,慢慢就会知道每一种分发的优缺点何在。这不是讲博客就能说的彻底。笔者决定将这个问题留给即将启程学习STM单片机的你。

(笔者使用的VSCode下自己开发的图形显示框架目录结构)

你当然可以添加你自己的C语言文件和头文件,甚至后面可以是汇编文件,取决于你的开发的场景,还有你的水平(笑)

Keil工程添加源文件和头文件(.c和.h)的方法_keil添加头文件.h-CSDN博客

另一个我们打交道的是这个地方。前四个图标设计到的概念是构建。

翻开你的C语言教程,自己默念五次自己写的程序如何从C语言文件到汇编文件再到二进制可执行文件。一般而言,我们会生成.hex文件(关于hex文件的生成规则和到底如何使用,这不属于萌新范畴的知识,感兴趣的朋友自行查阅,对于完全无基础的朋友,我打赌你会灰溜溜的回来继续看我写的内容的),也就是说,我们的IDE,会收集我上面显示工程内的所有的C语言源文件。注意,是所有的!,所以,小心重复的添加C语言源文件,否则它会被编译两次!在链接的时候就会触发符号重定义的错误。

我们先到魔术棒(也就是LED下拉框的右侧),点一下他,就会跳出来这个界面👇常见的一般我们会接触到这些设置:

  1. arm编译器的版本——这是设计到编译器的特征的时候会考虑的,一般而言,萌新不需要考虑这个,直到就好

  2. 是否使用微库——微库是编译器自身实现的一些常见的C语言的工具函数,一般的除非明确启用,一般我们都是自己实现。

来到Output选项卡,如果你是使用一个完全空白的工程,一般而言,不会生成可以进行烧录的hex,我们就是在这里进行更改!勾选Create HEX File生成可以被烧录的二进制文件。

旁边的C/C++编译器设置则是更加高级的一些C/C++设置。一般而言,找不到头文件/目标代码没被参与编译/更改编译的选项等的议题,都是在这里进行解决的。如果不清楚具体改什么,笔者建议自己到搜索引擎上查明白。

这里,重点介绍Define和IncludePath两个选项:

  • define则是说明预定义的宏,不懂什么是宏的,去查#define,这是C语言的知识的范畴

  • includePath说明了头文件的检索路径,当你发现你的头文件找不到的时候,需要设置头文件的检索路径,你需要点击includePath后面的三个...进行添加,一般而言,添加哪个文件夹,他只会扫描当前文件夹的所有文件,如果你的头文件在这个路径之下的一个子文件夹中,他是不会递归搜索的

    当只有include ./Core
    -Core
    |-----a.h       // #include "a.h"可以找到
    |-----b.h       // #include "b.h"可以找到
    |-----c|---d.h   // #include "d.h"找不到,但是#include"c/d.h"可找到|---e.h   // #include "e.h"找不到,但是#include"c/e.h"可找到

下面的内容跟调试精密相关了

笔者使用的是STLink和DAP比较多,你需要做的是在笔者框处的地方做设置

设置下拉框为你使用的调试器。STLink V2那就是STLink-Debugger,DAP那就是如图所示的,JLink那就是JLink Debugger.

点击Settings,在这里,你可以看到调试器现在的工作状态,正常的说,当你选择好调试器之后,给板子和调试器上电,就会看到ID号,举个例子:

笔者连接好了DAP和STM32F407ZGT6后,就会出现这样的界面,到这里,基本上板子就可与被烧录了,

记住,你还需要到这个地方,也就是讲选项卡从Debug切换到Flash Download去,勾选Reset And Run,这是因为调试器上传结束程序后,默认的行为是等待我们手动RESET后才会重新执行(比如嗯下开发板上的reset摁扭),这里我们勾选后就不用设置了。

(感谢HNHKHNH-CSDN博客的补充,笔者需要提到的是——你需要关心一下这里的Device Typed的片上的Flash(On-chip Flash),一般而言,一些芯片这里是空的,需要你进行配置和选择)

        一般的,你需要选择的是On-Chip  Flash中 容量(Size)最大的选项,在这里也就是片上的中密度闪存(第一个选项),如果你吃不准到底是啥,具体看手册和其他人的博客!

回到这里,下面框处的摁扭,就是在完成上述的工作后,点击就会进行你编译结束的程序的上传(注意每一次上传之前,必须编译!不然会烧老的代码,就会发现你写的代码没有实现效果的更改!)。

关于调试,实在太多,请看大佬的博客:

Keil5软件使用-进阶调试篇_keil调试教程-CSDN博客

还有其他的部分,如果有疑问或者建议,欢迎补充!

相关文章:

(萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念

目录 前言与导论 碎碎念 所以,我到底需要知道哪些东西呢 从一些基础的概念入手 常见的工具和说法 ST公司 MDK5 (Keil5) CubeMX 如何使用MDK5的一些常用功能 MDK5的一些常见的设置 前言与导论 非常感谢2301_77816627-CSDN博客的提问,他非常好奇…...

java nio 原理 非阻塞IO Netty

一、为什么必须去了解NIO 首先你需要之后Netty的主要实现手段就是Nio,很多人一直学不明白Netty,根本原因是 除了日常开发中很难能够实践,很大一部分原因是不熟悉NIO,事实上真正熟悉了NIO和它背后的原理之后,去查看Netty的源码就有…...

【ClickHouse】Ubuntu下离线安装ClickHouse数据库并使用DBeaver连接

目录 0. 安装前准备1 安装ClickHouse1.1 下载安装包1.2 离线安装1.3 配置密码1.4 启动ClickHouse服务 2 DBeaver连接配置2.1 下载ClickHouse驱动2.2 DBeaver配置2.2.1 配置主要参数2.2.2 配置驱动 2.3 常见问题处理2.3.1 修改远程登录配置2.3.2 更新驱动配置 0. 安装前准备 有…...

vue2打包带路径的项目,刷新404问题解决

问题描述 Vue 2 项目打包时设置了 publicPath: /web/,并通过 Nginx 配置访问 http://ip/web 时可以正常加载首页,但刷新页面时出现 404 错误 原nginx的配置 location /web {alias /www/dist; # 静态文件地址try_files $uri $uri/ /index.html;index i…...

【计算机视觉】文本识别

计算机视觉,广义的文本识别是指对输入的图像进行分析处理,识别出图像中的文字信息,这里的图像可以使传统的文档图像,也可以是现实世界中的场景图像。 简介 无论是传统方法还是基于深度深度学习的方法,完整的文本识别…...

Vue和React的区别

组件开发方式&#xff1a; Vue 使用单文件组件&#xff08;SFC&#xff09;, HTML, JS 和 CSS 在一个文件内实现 <template><div class"my-component"><!-- HTML模板 --></div> </template><script> export default {// JavaScr…...

STM32 是什么?同类产品有哪些

STM32 是什么&#xff1f; STM32 是由意法半导体&#xff08;STMicroelectronics&#xff09;推出的基于 ARM Cortex-M 内核 的 32 位微控制器&#xff08;MCU&#xff09;系列。它专为高性能、低功耗的嵌入式应用设计&#xff0c;广泛应用于以下领域&#xff1a; 工业控制&am…...

Git学习使用笔记

目录 一、基本介绍 1.1 版本控制 1.2 版本控制软件的基础功能 1.3 多人协作开发/集中式版本控制 1.4 分布式版本控制 二、Git安装 2.1下载git 2.2 使用Github Desktop软件 2.2.1 创建本地仓库 2.2.2 删除本地仓库 2.2.3 仓库文件操作 2.2.4 多人协作 2.2.4.1 分…...

Bash 中的运算方式

目录 概述&#xff1a; 1. (()) 运算符 2. let 命令 3. expr 命令 4. $[] 直接运算 5. bc&#xff08;计算器&#xff0c;支持浮点数&#xff09; 6. awk&#xff08;强大的文本处理工具&#xff0c;也可计算&#xff09; 概述&#xff1a; Bash 本身只支持整数运算&am…...

NLP Word Embeddings

Word representation One-hot形式 在上一周介绍RNN类模型时&#xff0c;使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的&#xff0c;算法很难学习到单词之间的关系。 比如下面的例子&#xff0c;即使语言模型已经知道orange juice是常用组合词&#xf…...

Unity UI个人总结

个人总结&#xff0c;太简单的直接跳过。 一、缩放模式 1.固定像素大小 就是设置一个100x100的方框&#xff0c;在1920x1080像素下在屏幕中长度占比1/19&#xff0c;在3840x2160&#xff0c;方框在屏幕中长度占比1/38。也就是像素长款不变&#xff0c;在屏幕中占比发生变化 2.…...

开发基础(8):鸿蒙图表开发

mpchart mpchart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI,mpchart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图等自定义图表库。 柱状图 导入import {BarChart, …...

Vue的简单入门 一

声明&#xff1a;本版块根据B站学习&#xff0c;创建的是vue3项目&#xff0c;用的是vue2语法风格&#xff0c;仅供初学者学习。 目录 一、Vue项目的创建 1.已安装15.0或更高版本的Node.js 2.创建项目 二、 简单认识目录结构 三、模块语法中的指令 1.v-html 1.文本插值…...

vs2022支持.netframework4.0

下载nuget包 .netframework4.0 解压nuget 复制到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 参考 https://www.cnblogs.com/bdqczhl/p/18670152 https://blog.csdn.net/xiaomeng1998_/article/details/135979884...

[前端] axios网络请求二次封装

一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用&#xff0c;提高可维护性。 —这个有两个方案&#xff1a;一个是二次封装一个是实例化。&#xff08;设置一些公共的参数&#xff0c;然后进行请求&#xff09; 为什么可以解决代码的复用&#xff1a; 这是…...

前端包管理器的发展以及Npm、Yarn和Pnpm对比

在现代前端开发中&#xff0c;包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展&#xff0c;开发者经历了从 npm 一统天下到 Yarn 挑战格局&#xff0c;再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器&#xff08;npm/Yarn/pnpm&#xff09;进行全方位…...

城电科技| 光伏太阳花:让绿色能源随处绽放

在追求绿色可持续发展的今天&#xff0c;清洁能源设备不断涌现&#xff0c;城电科技的光伏太阳花便是其中的佼佼者。它不仅造型独特美观&#xff0c;更凭借出色的性能&#xff0c;在多个场景中都能发挥重要作用。那么&#xff0c;这款神奇的光伏太阳花究竟适合安装在哪里呢&…...

LVS集群(DR/NAT)

特性NAT 模式DR 模式工作原理Director 修改请求/响应的 IP 地址和端口&#xff0c;流量双向经过 DirectorDirector 仅修改请求的 MAC 地址&#xff0c;响应由 Real Server 直接返回客户端性能较低&#xff08;需处理双向流量&#xff0c;易成瓶颈&#xff09;高&#xff08;仅处…...

保姆级GitHub大文件(100mb-2gb)上传教程

GLF&#xff08;Git Large File Storage&#xff09;安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…...

【Jenkins流水线搭建】

Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…...

linux 安装ftp

1、安装vsftpd sudo yum install -y vsftpd 2、运行以下命令&#xff0c;启动FTP服务&#xff0c;并设置开机自启动。 sudo systemctl start vsftpdsudo systemctl enable vsftpd 3、运行以下命令&#xff0c;查看FTP服务监听的端口。 sudo netstat -antup | grep ftp 出现…...

DDoS技术解析

这里是Themberfue 今天我们不聊别的&#xff0c;我们聊聊著名的网络攻击手段之一的 DDoS&#xff0c;看看其背后的技术细节。 DoS 了解 DDoS 前&#xff0c;先来讲讲 DoS 是什么&#xff0c;此 DoS 而不是 DOS 操作系统啊。1996年9月6日&#xff0c;世界第三古老的网络服务提供…...

移远通信边缘计算模组成功运行DeepSeek模型,以领先的工程能力加速端侧AI落地

近日&#xff0c;国产大模型DeepSeek凭借其“开源开放、高效推理、端侧友好”的核心优势&#xff0c;迅速风靡全球。移远通信基于边缘计算模组SG885G&#xff0c;已成功实现DeepSeek模型的稳定运行&#xff0c;并完成了针对性微调。 目前&#xff0c;该模型正在多款智能终端上进…...

Linux | 进程相关概念(进程、进程状态、进程优先级、环境变量、进程地址空间)

文章目录 进程概念1、冯诺依曼体系结构2、进程2.1基本概念2.2描述进程-PCB2.3组织进程2.4查看进程2.5通过系统调用获取进程标识符2.6通过系统调用创建进程-fork初识fork の 头文件与返回值fork函数的调用逻辑和底层逻辑 3、进程状态3.1状态3.2进程状态查看命令3.2.1 ps命令3.2.…...

站群服务器和普通服务器有哪些不同之处?

站群服务器是一个集中管理工具&#xff0c;可以允许网站管理员同时管理多个网站&#xff0c;但是不要管理员登录每一个网站的后台&#xff0c;在站群模式下&#xff0c;网站管理员通过一个或者多个服务器来托管大量的子站点&#xff0c;可以支持大规模网站的集中管理和优化。 普…...

百度千帆平台对接DeepSeek官方文档

目录 第一步&#xff1a;注册账号&#xff0c;开通千帆服务 第二步&#xff1a;创建应用&#xff0c;获取调用秘钥 第三步&#xff1a;调用模型&#xff0c;开启AI对话 方式一&#xff1a;通过API直接调用 方式二&#xff1a;使用SDK快速调用 方式三&#xff1a;在千帆大模…...

DeepSeek帮助解决Oracle死锁问题

最近在生产上遇到一个死锁问题&#xff0c;Oracle 抛出了 ORA-000060 异常。 业务场景&#xff1a;程序按行读取一个上游系统送的文件数据&#xff08;大概有几万行&#xff09;&#xff0c;读取到数据后&#xff0c;每 500 行分配给一个线程去批量更新数据库&#xff08;使用…...

MySQL无法连接到本地localhost的解决办法2024.11.8

问题描述&#xff1a;我的MySQL可以远程连接服务器&#xff0c;但无法连接自己的localhost。 错误提示&#xff1a; 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因&#xff1a; 1. 检查环境变量是否正确&#xff1a;发现没…...

Nginx之rewrite重写功能

目录 一、rewrite概述 1、rewrite功能 2、跳转场景 二、标准配置指令 1、rewrite日志记录指令 2、未初始化变量告警日志记录指令 3、rewrite 指令 3.1 正则表达式 三、rewrite模块使用实例 1.基于域名的跳转 2.基于客户端 IP 访问跳转 3.?基于旧域名跳转到新域名后…...

Selenium WebDriver自动化测试(扩展篇)--Jenkins持续集成

文章目录 一、引言二、Jenkins简介三、安装部署Jenkins安装部署四、集成Git与Maven安装必要的插件配置Git配置Maven五、创建Job创建自由风格的项目配置源码管理配置构建触发器配置构建环境配置构建步骤配置Post-build Actions六、触发构建示例:GitHub Webhook触发构建七、封装…...

MyBatis拦截器终极指南:从原理到企业级实战

在本篇文章中&#xff0c;我们将深入了解如何编写一个 MyBatis 拦截器&#xff0c;并通过一个示例来展示如何在执行数据库操作&#xff08;如插入或更新&#xff09;时&#xff0c;自动填充某些字段&#xff08;例如 createdBy 和 updatedBy&#xff09;信息。本文将详细讲解拦…...

DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏

DeepSeek4j Spring Boot Starter 快速入门 简介 DeepSeek4j 是一个专为 Spring Boot 设计的 AI 能力集成启动器&#xff0c;可快速接入 DeepSeek 大模型服务。通过简洁的配置和易用的 API&#xff0c;开发者可轻松实现对话交互功能。 环境要求 JDK 8Spring Boot 2.7Maven/Gr…...

linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上

linux 板子的wifi模块连上路由器后&#xff0c;用udhcpc给板子wifi分配ip&#xff0c;udhcpc获取到ip,但没有写入wlan0网卡上 这里的问题是 /usr/share/udhcpc/default.script脚本有问题 用下面正确脚本&#xff0c;即可写进去 #!/bin/sh# udhcpc script for busybox # Copyr…...

【工业安全】-CVE-2022-35555- Tenda W6路由器 命令注入漏洞

文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1&#xff1a;代码分析  4.2&#xff1a;流量分析 5.poc代码&#xff1a; 1.漏洞描述 漏洞编号&#xff1a;CVE-2022-35555 漏洞名称&#xff1a;Tenda W6 命令注入 威胁等级&#xff1a;高危 漏洞详情&#xff1…...

twisted实现MMORPG 游戏数据库操作封装设计与实现

在设计 MMORPG&#xff08;大规模多人在线角色扮演游戏&#xff09;时&#xff0c;数据库系统是游戏架构中至关重要的一部分。数据库不仅承担了游戏中各种数据&#xff08;如玩家数据、物品数据、游戏世界状态等&#xff09;的存储和管理任务&#xff0c;还必须高效地支持并发访…...

【MySQL】基础篇

1. MySQL中的NULL值是怎么存放的&#xff1f; MySQL的compact行格式中会用【NULL值列表】来标记值为NULL的列&#xff0c;NULL值不会存储在行格式中的真实数据部分。 NULL值列表会占用1字节空间&#xff0c;当表中所有字段都被定义成NOT NULL&#xff0c;行格式中就不会有NULL值…...

【自学笔记】机器学习基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 机器学习重点知识点总览一、机器学习基础概念二、机器学习理论基础三、机器学习算法1. 监督学习2. 无监督学习3. 强化学习 四、机器学习处理流程五、机器学习常见问…...

记录阿里云CDN配置

网站接入CDN全流程&#xff0c;共4步&#xff01;-阿里云开发者社区 1、开通阿里云CDN服务 2、添加加速域名 3、验证域名归属权 4、域名添加CDN生成的CNAME解析 按照官网描述增加。细节点&#xff1a; 1. 域名和泛域名区别 2.开启https,要用nginx的证书&#xff0c;和项…...

同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展

1 2025开年&#xff0c;人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸&#xff0c;不仅在国内掀起了技术热潮&#xff0c;并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球&#xff0c;这不仅重塑了产业格…...

聚铭网络入围2025年度江苏省政府采购信息安全设备协议供货名单

近日&#xff0c;2025年度江苏省党政机关、事业单位及团体组织信息安全设备框架协议采购项目入围结果公布。聚铭网络凭借自身专业实力和技术优势脱颖而出&#xff0c;成功入围22个分包。 此次采购项目是江苏省政府采购领域级别最高、覆盖面最广的项目之一。从资格评选到后期材料…...

【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; Linux网络编程 本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g。 &#x1f3e0; yum &#x1f3b8; 什么是yum 当用户想下载软…...

leetcode 297. 二叉树的序列化与反序列化

题目如下 我们常常说单独先序遍历不能完整的表示一棵树是有前提条件的。 为什么&#xff1f;先序遍历是按 根节点 左子树 右子树的方向遍历树且遇到空子树直接返回&#xff0c;这样会造成我们并不知道某个节点的左右子树存在与否&#xff0c;故我们无法确定树的形状。但是如果…...

OpenAI 放王炸,将发布整合多项技术的 GPT-5,并免费无限使用,该模型有哪些技术亮点

对于 ChatGPT 的免费用户&#xff0c;将可以无限制地访问 GPT-5&#xff0c;但仅限于标准的智能级别。该级别会设定滥用限制&#xff0c;以防止不当使用(意思就是你得付费嘛)。 OpenAI CEO Sam Altman 今天在 X 上透露了 GPT-4.5 和 GPT-5 的最新发展计划。 OpenAI 将发布代…...

Ubuntu22.04 使用useradd 创建用户时,没有创建家目录时,如何手动创建家目录

测试案例&#xff1a; 使用useradd不加参数创建test目录 如下可以看出使用 useradd 创建用户的时候默认不会创建家目录 rootlocal:~# useradd test rootlocal:~# id test uid1001(test) gid1001(test) groups1001(test) rootlocal:~# cat /etc/passwd | grep test test:x:1001:…...

浅聊Docker使用、部署

在Java面试中&#xff0c;当被问到关于Docker中间件的使用、部署及在实际项目中的考虑时&#xff0c;可以按照以下结构和内容来详细回答&#xff1a; 一、Docker中间件的使用 1. Docker是什么&#xff1f; Docker是一个开源平台&#xff0c;允许开发者将应用程序及其依赖项打…...

Java面试第一山!《集合》!

一、引言 在 Java 编程的世界里&#xff0c;数据的存储和处理是非常重要的环节。Java 集合框架就像是一个功能强大的工具箱&#xff0c;为我们提供了各种各样的数据结构来高效地存储和操作数据。今天&#xff0c;跟随小编一起来深入了解 Java 集合框架&#xff0c;这不仅有助于…...

力扣-二叉树-257 二叉树的所有路径

思路 除去根节点&#xff0c;每一层添加->val&#xff0c;然后使用前序遍历的顺序 代码 class Solution { public:vector<string> res;void getTreePaths(string s, TreeNode* root){s "->";s to_string(root->val);if(root->left nullptr &…...

异构计算架构助力智能座舱实现高效低耗体验

摘要: 随着智能汽车的飞速发展,智能座舱作为人车交互的核心区域,对算力、功耗及延迟等性能指标提出了严苛要求。异构计算架构凭借在硬件、软件与系统层面的深度优化,能显著提升智能座舱的算力利用率,降低功耗与延迟,为用户打造高效、低能耗的智能座舱体验。本文深入剖析…...

【vscode】VScode Remote SSH配置

VScode使用remote ssh 到服务器上的Docker容器中 1. 配置远程服务器docker容器的端口映射&#xff0c;例如将服务器的2222端口映射到container的22端口(默认) 1.1 在容器系统的sshd_config文件中配置参数 #配置文件 vim /etc/ssh/sshd_config #打开端口号 Port 221.2 建立容…...

急停信号的含义

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#的运动控制程序的时候&#xff0c;一个必要的步骤就是确认设备按钮的急停…...