- 博客(180)
- 收藏
- 关注
原创 【嵌入式】STM32中的SPI通信
SPI是由摩托罗拉公司开发的一种通用数据总线,其中由四根通信线,支持总线挂载多设备(一主多从),是一种的协议。主要是实现主控芯片和外挂芯片之间的交流。这样可以使得STM32可以访问并控制各种外部芯片。本文主要是实现STM32连接W25Q64外挂Flash芯片。I2C的优点是,无论外挂多少设备,只需要两根通信线就可以实现连接,但是由于其默认弱上拉的设计,其由低电平变换到高电平的时候会比较慢,这会使得其通讯频率较低,最高位400kHz。SPI传输更快,其通讯频率更高,最高可达80MHz。
2024-11-04 17:01:42 496
原创 【嵌入式】MQTT详解
QoS 1 需要在 PUBLISH 报文中设置 Packet ID,而作为响应的 PUBACK 报文,则会使用与 PUBLISH 报文相同的 Packet ID,以便发送方收到后删除正确的 PUBLISH 报文缓存。在这之后,发送方可以再次使用当前的 Packet ID 发送新的消息,而接收方再次收到使用这个 Packet ID 的 PUBLISH 报文时,也会将它视为一个全新的消息。QoS 2 解决了 QoS 0、1 消息可能丢失或者重复的问题,但相应地,它也带来了最复杂的交互流程和最高的开销。
2024-10-25 13:33:40 1217
原创 【嵌入式Linux】Linux设备树详解
设备树是是Linux中一种用于描述硬件配置的数据结构,它在系统启动时提供给内核,以便内核能够识别和配置硬件资源。设备树在嵌入式Linux系统中尤其重要,因为这些系统通常不具备标准的硬件配置,需要根据实际的硬件配置来动态配置内核。在Linux中,设备树源文件的扩展名为.dts,其二进制编码文件为.dtb,将.dts编译成.dtb需要使用DTC工具,位于Linux内核的文件夹下。
2024-10-23 15:57:23 1191
原创 【ARM】ARM中断系统详解——以Cortex-A7为例
Cortex-A7 也有中断向量表,内核有 8 个异常中断,中断向量表也是在代码的最前面。看起来A7的中断向量表比STM32F103少很多,这是因为STM32F103使用的Cortex-M系列芯片,中断向量表列举出了一款芯片所有的中断向量,包括芯片外设的所有中断。对于 Cotex-A 内核来说并没有这么做 Cortex-A 内核 CPU 的所有外部中断都属于这个 IRQ 中断,当任意一个外部中断发生的时候都会触发 IRQ 中断。
2024-10-20 00:30:35 1266
原创 C++新特性汇总
这样做的好处是,如果使用int a=3.5f进行变量赋值,那么会对变量进行截断,a的值为3;而使用则会直接编译不通过, 直接语法报错,这样做的好处是不会使得数据被误截断,进一步提高代码的健壮性。
2024-10-06 18:37:02 516
原创 【开发杂谈】ESP32的连续ADC的结果转化 和 C语言中的数据类型对齐
在uint32_t中0值应该是00 00 00 00四个全零的字节, 如果ADC读出的值为2006,那么他的16进制为0x7D6,根据上述规则,0-7位写入第一个字节中,8-11位写入第二个字节的低4位,高四位随机填充为0x6,则实际uint32_t的值是0x00 00 67 D6,在内存中uint32_t的存储形式是。可以看到0xD6被写入在了第一个字节中,0x7则被写入第二个字节的低4位中,而第二个字节的高四位则被填充了0x6。首先,ESP32-S3的ADC最大位宽为12位,也就是范围为0~4095。
2024-10-01 15:59:47 568
原创 【C++】智能指针详解
weak_ptr是一个智能指针,这种智能指针指向一个由shared_ptr管理的对象,但是这种指针并不控制所指向对象的生存期,也不会改变shaed_ptr的引用计数。既然weak_ptr所指向的对象有可能不存在,那么waek_ptr是不能直接用于访问对象的,必须要使用一个叫做lock的成员函数,lock的功能是检查weak_ptr所指向的对象是否还存在,如果是,lock能够返回一个指向共享对象的shared_ptr,如果不存在,则返回一个空的shared_ptr常用操作1.use_count成员函数。
2024-08-18 01:49:47 831
原创 【嵌入式软件开发】ARM64架构基础知识
ARMv8-A是ARM公司发布的第一代支持64位处理器的指令集架构,他在扩充64位寄存器的同时提供对上一代架构指令集的兼容,因而可以同时运行32位和64位应用程序的执行环境。
2024-08-14 15:48:51 2467
原创 【嵌入式】CAN总线详解
CAN总线是一种控制器局域网总线,每一个挂载在CAN局域网的设备,都可以利用CAN去发送信息,也可以接收局域网的各种信息,每个设备都是平等的,共享CAN的资源。广泛应用于汽车、嵌入式和工业控制等领域。CAN总线一共有五种帧。
2024-06-16 19:58:53 2366
原创 【Spring源码】1.1 BeanFactory和ApplicationContext
阅读前须知:需要有一定Spring基础和Spring实践经验。
2024-05-05 20:35:37 931
原创 【嵌入式】STM32和I2C通信
I2C(Inter IC Bus)是有飞利浦公司开发的一种通用数据总线,主要通过两个通信线SCL和SDA进行通信,其中SCL(Serial Clock)是时钟线,用于收发双方同步数据,SDA(Serial Data)是数据线,用于传输数据。是一种同步半双工的数据总线,其有数据应答功能,支持在总线上挂载多个设备。不少的设备,比如说常用的0.42寸的OLED显示器,MPU6050加速度传感器,AT24C02存储器模块,DS3231实时时钟模块等,都是用I2C协议。
2024-03-25 20:33:14 1057
原创 【编译原理】第一章 概述
写在开头:本文以及本博客大多数文章都是作者学习之后的笔记,知识点经过提炼,因此缺少生动详细的解释和样例,不适合初学入门者观看,正确使用方法是学习完该门课程后,可以用本博客温故而知新,快速回忆起遗忘的内容,希望可以帮到各位!编译器的核心功能是将翻译为其基本的要求是生成的目标代码的语义要和源代码一致,因此编译器需要进行大量静态计算(也就是在编译过程中不会进行运算)编译器和解释器的区别:编译器输入需要编译的源程序,输出编译完成后的目标程序;
2024-03-18 10:38:33 405
原创 【神经网络】GAN:生成对抗网络
和传统的神经网络不同,Generator除了接受x的输入之外,还会接受一个简单的分布作为z进行输入,从而使得网络的输出也是一个复杂的分布为什么输出需要时一个分布呢?以视频预测为例,比如说在糖豆人游戏中,我们需要预测视频的接下来的10帧是怎么样的问题是传统的神经网络(NN)训练出来的结果,在拐角处,一个糖豆人会分裂为两个糖豆人,一个向左一个向右,这是因为在普通NN中,糖豆人向左和向右都有可能,是概率不同,因此他将这两个结果都显示了出来。
2023-11-11 19:13:01 2014 2
原创 【Spring】Spring技术栈需掌握技术点
本文旨在总结Spring技术栈需要掌握的一些技术点,面试不一定问,因此本文并非是面试导向,而是实战导向。笔者曾经学习过Spring相关内容,但是由于读研做了一些其他工作,一些关键内容发现已经模糊不清,为了加强记忆,于是决定将相关知识点记录下来。
2023-11-09 18:08:20 92
原创 【算法笔记】LCR 086. 分割回文串
Java中的List变量存储的是List的地址,而非List本身,因此可以构建一个path列表,用于存储当前已经遍历的序列,当dfs向下遍历的时候则将新遍历的字符串加入path中;当向上回溯的时候,可以将path中的最后一个元素remove掉,从而恢复到上一个遍历状态。dfs遍历出来的第一个序列是[a, a, b],显然该序列都是回文子串,接着回溯,遍历下一个序列,为[a, ab],不是回文子串,去除…如此往下遍历,将符合要求的序列加入到结果集res中,直到遍历整个解空间树。
2023-10-11 12:14:28 324
原创 【深度学习】Mini-Batch梯度下降法
反之,较小的子集会导致噪声较大,下降的精度不高,但是单次训练速度快,而且较小的子集也无法充分来自于向量化的训练加速,总训练时间反而不是最快的。在实际中,选择适中的子集大小能够保证一定的精度,也能提高速度,并且利用好向量化带来的加速,在此基础之上,根据自己的目标选择合适的子集大小,平衡好训练速度和精度问题。而在情况2中,因为每个样本都是单独的Mini-Batch,大多数时候会朝着最小值前进,但是有一些样本是噪声样本,因此偶尔会指向错误的方向,因此这会使得其路线十分的九转十八弯(紫线)。原数据集的特征部分为。
2023-09-09 16:59:23 1090
原创 【机器学习】异常检测
假设你是一名飞机涡扇引擎工程师,你在每个引擎出厂之前都需要检测两个指标——启动震动幅度和温度,查看其是否正常。在此之前你已经积累了相当多合格的发动机的出厂检测数据,如下图所示我们把上述的正常启动的数据集总结为DataSetx1x2...xm如果一个新的例子xtest离点集很远,那可能这个样例是异常的那么如何衡量“很远”呢?一般我们会有一个函数p(x)负责计算,并且有一个阈值ϵ,当pxtestϵ的时候,我们认为该样例异常;而当pxtes。
2023-07-24 19:49:55 503
原创 【机器学习】支持向量机SVM入门
相较于之前学习的线性回归和神经网络,支持向量机(Supprot Vector Machine,简称SVM)在拟合复杂的非线性方程的时候拥有更出色的能力,该算法也是十分经典的算法之一。接下来我们需要学习这种算法首先我们回顾逻辑回归中的经典假设函数,如下图:对于任意一个实例xy,当y=1的时候,我们希望hθx≈1,也就是θTx>>0;当y=0的时候,我们希望hthetax≈0,也就是θTx
2023-07-23 16:09:18 477
原创 【机器学习】正则化对过拟合和欠拟合的影响
接下来我们总结若干应对各种问题的方法:修正过拟合(高方差):增加训练及数量、使用更少的特征、增加正则化参数的值修正欠拟合(高偏差):增加额外的特征、增加假设函数的复杂度和次方数、减小正则化参数的值。
2023-06-26 09:11:54 616
原创 【机器学习】如何选择合适的假设函数
但是这仍不能证明模型的泛化能力,因为上述过程类似于新增了一个参数d之后,再使用测试集进行模型训练选出最优d值,也就是说,这是使用测试集来选择模型,又使用相同的测试集来计算误差,对于模型多项式次数d的选择会存在过拟合的情况。想要了解自己训练出的模型对训练集外的实例的泛化能力,则我们可以将初试的数据集分为两部分:70%为我们的训练集,剩下30%为我们的测试集(当然比例我们可以灵活调整)。值最小的对应的d的取值,假设d=4的时候最佳,那么我们就选择这个多项式次数作为最优假设函数模型。的取值,而不是像之前的求。
2023-06-26 09:08:33 398
原创 神经网络小结:训练的全过程
这一节我们主要是将之前的知识穿起来,形成一个整体。如果之前的没看过可以回翻一下专栏。但是在整体回归之前,我们还需要学习一个小知识点——随机初始化。
2023-06-20 16:29:21 839
原创 【神经网络】梯度检测
的取值是一个可行的方法,但是它很容易出错:因为在这个算法中含有海量的细节,容易产生微小而又难以察觉的bug。的方法赖解决这种问题,只要需要使用类似梯度下降或者反向传播的算法都可以使用这种方法,这种方法能够确保你的前向\反向传播完全正确。还是会照常迭代下降,但是得出来的结果的误差将会比正确的情况高出一个量级。,如果成立的话,则可以认为反向传播是正确的,把DVex用于梯度下降则可以得出较好的结果。是一个很小的数,类似于微积分中的微小增量,一般可以将。,那么我们可以使用相同的办法得出对应偏导数的大约值。
2023-06-16 15:22:05 1161
原创 【机器学习】神经网络代价函数和反向传播算法
表示的是神经网络经过拟合后的输出值,而y是样本实际的结果,因为多分类的神经网络中,式子中的y不只是只有一种输出结果,而是有k种输出结果,因此需要计算K个输出单元的和,这就是为什么需要。老实说,代价函数这方面我也不太整的明白,我跟的教程并没有给出足够严谨的说明,但是好在实际使用时是直接有函数接口调用的,另外我还会找额外的书籍去补一补这一方面,等着更新吧(挖坑。神经网络中使用的代价函数我们之前学过Logistics回归的代价函数的一般形式,其中Logistics回归的代价函数如下:(带有正则化项)
2023-06-15 17:47:22 1651
原创 【机器学习】一个简单的神经网络例子教你理解前向传播
在计算机中可以很容易地使用门电路实现异或,但是今天我们试着用神经网络去实现以下与运算。那么我们构建如下的神经网络。在开始这个实力前,希望你已经了解了神经网络的相关内容,可以参见如下文章。在计算机中,有一种很基础的运算称之为与运算,这是一个二元运算符,的值为1,可以知道与运算有四种情况。的取值只可以是0或者1,当。并且将权重矩阵初始化为。
2023-06-14 15:45:44 349
原创 【机器学习】神经网络入门及其运行过程
如果对于下图使用Logistics回归算法,如果只有x1和x2两个特征的时候,Logistics回归还是可以较好地处理的。它可以将x1和x2包含到多项式中但是有很多问题所具有的特征远不止两个,甚至是上万个,如果我们想要包含很多特征,那Logistics回归的假设函数将会相当复杂。这些多项式的项数是以n^2的速度增长的。一方面运算量十分大,而且想要进行正则化调整也很难。这么庞大的特征空间使得对特征的增删查改都十分困难,因此我们需要另寻出路。
2023-06-07 10:03:46 943 1
原创 【机器学习】正则化详解和过拟合的解决
上一篇文章的例子中,如果使用一个四次多项式去拟合房价函数,会导致过拟合问题而正则化是解决过拟合的一个方法。J2m1i1∑mhθxi−yi2J2m1i1∑mhθxi−yi21000θ321000θ42当我们要得出最小的代价函数的时候,θ3和θ4必须要尽可能接近于0,否则函数J会变得很大。对于假设函数θ0θ1xθ2x2θ3x3θ4。
2023-06-05 15:06:02 531 1
原创 【机器学习】浅析过拟合
我们来想象如下一个场景:我们准备了10000张西瓜的照片让算法训练识别西瓜图像,但是这 10000张西瓜的图片都是有瓜梗的,算法在拟合西瓜的特征的时候,将西瓜带瓜梗当作了一个一般性的特征。此时出现一张没有瓜梗的西瓜照片,算法就认为它不是西瓜了。这种情况被称为。上面从感性的方面感受了下过拟合的情况,接下来我们系统分析过拟合的情况。还是以我们经典的通过房屋大小预测房价走向的问题,假设有以下三个拟合好的图像。
2023-05-31 17:37:37 691
原创 【机器学习】分类问题和逻辑(Logistic)回归算法详解
在阅读本文前,请确保你已经掌握代价函数、假设函数等常用机器学习术语,最好已经学习线性回归算法,前情提要可参考https://blog.csdn.net/weixin_45434953/article/details/130593910我们通常用y来表示分类结果,其中最简单y值集合为01,比如对于一个邮件是否为垃圾邮件,有“是垃圾邮件(1)”和“不是垃圾邮件(0)”两种y的取值。
2023-05-31 11:35:36 671
原创 Bootstrap下div边框属性失效问题解决方法
猜想是bootstrap可能为了统一控件,将边框类型设置成了none。既然都没有边框了,那当然设置边框颜色也没有用,解决办法是在style中手动规定border-style:soild。如果将一个div指定为bootstrap中的column,并且再设定他的边框颜色,会发现不起作用。
2023-05-30 16:15:31 396
原创 Spring和SpringBoot常用注解(持续更新)
lombok注解,用于自动生成getter\setter\toString等方法,使用前需要在pom.xml中引入如下内容
2023-05-22 21:32:37 636
原创 【机器学习】多元线性回归详解和特征压缩
注意⚠️阅读本文前,你应该需要掌握:机器学习线性回归模型、高等数学微积分部分内容、线性代数矩阵部分内容前情提要:https://blog.csdn.net/weixin_45434953/article/details/130593910。
2023-05-15 10:32:07 595
原创 【机器学习】正规方程法求解线性回归问题
,因此梯度下降更适合应对n较大的情况,一般以n=10000为分界线。而且梯度下降在很多算法中都会广泛的应用,但是正规方程一般只用于线性回归。的解析方法,而不是梯度下降那样的迭代方法。也就是只需要一次运算就可以得出结果。梯度下降需要选择学习速率,并且需要迭代,而正规方程不需要。但是对于特征量n较大的情况,会消耗大量的时间,通常认为正规方程的时间复杂度为O(n。反过来,导数为0的位置不一定是最值。需要注意的是,正规方程不需要使用特征缩放。正规方程能以更好的方式求得假设函数中。根据微积分,我们知道函数。
2023-05-15 10:31:28 513
原创 【机器学习】线性回归模型详解
接下来我们将要学习我们的第一个模型——线性回归。比如说我需要根据数据预测某个面积的房子可以卖多少钱m:训练样本数量x:输入值,又称为属性值y:输出值,是我们需要的结果我们会用xy(x,y)xy表示一整个训练样本,使用xiyixiyi来表示第i个样例我们将上图用表格表示出来如下:那么线性回归的预测模型如下:训练集输入到学习算法中,然后学习算法会根据数据训练出函数h。作为一个线性回归模型,其输出的h应该是hxθ0θ1xhxθ0θ1。
2023-05-10 09:38:58 3766
原创 【Python爬虫】百度翻译爬虫实战
get和post传输:get是明文传输,其参数会直接写在url中post是密文传输,不是加密传输,而是将信息写在body中get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大),因为url不能太长post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。因此涉及到表单提交需求,一般都是用post另外,get请求页面后退时,不产生影响;post请求页面后退时,会重新提交请求。
2023-04-17 15:29:54 97
原创 SpringMVC入门以及工作流程详解
在以往,所有前端页面都需要配置在web.xml中,但是在SpringMVC中,web.xml只需要完成DispatchServlet的配置。SpringMVC的核心是DispatchServlet(调度Servlet),在一个web应用中,会有多个dao和多个数据库表进行映射,而一个dao又和一个service以及一个servlet联系在一起。用户不需要逐个管理servlet,而是通过dispatch统一管理,dispatch的职责包括:调度servlet,处理请求,适配URL和跳转页面。
2023-04-15 16:09:46 482
原创 【JVM】内存分配和回收的策略
Java的自动内存管理最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存。下面我们就来探讨常用的HotSpot虚拟机默认的内存分配和回收策略。
2023-04-10 18:13:40 192
原创 【MyBatis】ResultMap结果集映射
之前的例子中,pojo类的属性和数据库表的属性列的名字是一一对应的,这样MyBatis会自动将pojo类的属性和数据库表属性联系起来,但是实际生产环境中,pojo类的属性不一定和数据库表一一对应,这时候需要我们手动建立映射关系。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。我们可以看到,在数据库中密码字段称为pwd,在pojo类中称为password。ResultMap是一个结果集映射,可以将数据库的属性集和pojo类的属性集进行映射。
2023-04-10 17:56:23 152
原创 MyBatis的CRUD
虽然dao层中使用的insertUser的参数是一个User对象,但是mybatis在mapper.xml中完成自动匹配,将传入的user对象中的id,name,pws属性和#{id}, #{name}, #{pws}对应起来,从而完成对sql语句的填充。需要注意的是,使用insert、delete、update等语句时,需要使用sqlSession.commit()提交事务才能完成更改。在SQL语句中,可以使用#{parameter}的方式传入参数,参数名字应该和Dao层中的查询函数的参数保持一致。
2023-04-08 16:31:33 365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人