自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(188)
  • 收藏
  • 关注

原创 【嵌入式Linux】U-Boot源码分析

编译出来之后的U-Boot的文件结构及其作用如下:主要存放架构相关文件,存储着包括不同架构下不同CPU的内容,包括arm\x86等等。在存放着arm架构相关设置的文件夹arm下,(),包含着各个arm版本的设置文件夹,以及根本的ARM 芯片所使用的 u-boot 链接脚本文件u-boot.ldsboard 文件夹就是和具体的板子有关的,打开此文件夹,里面全是不同的板子,这是对开发板做的适配文件,本文使用的是mx6ullevk这个开发板。

2025-04-02 22:49:19 780

原创 【Linux内核】Linux内核的同步管理

原子操作是保证指令以原子的方式执行,在执行原子指令的时候不会被打断。比如经典例子,A线程和B线程都尝试对i=1的变量进行+1操作,A进程获取到i=1变量后,被B中断,B获取到i=1后进行+1操作得到i=2然后进行写回,接着A线程从睡眠中恢复,又对i=1进行+1操作,最终得到i=2写回。这很明显和想要的结果不一致针对上述例子,可以使用加锁的方式,例如使用自旋锁来保证i++操作的原子性,但是加锁操作会导致比较大的开销,用在这里有些浪费。Linux内核提供了atomic_t。

2025-03-16 02:12:47 576

原创 【Linux内核】万字解析Linux内核内存管理机制

ARM64架构处理器采用48位物理寻址机制,最多可以寻找256TB的物理地址空间。对于目前的应用来说已经足够了,不需要扩展到64位的物理寻址。虚拟地址同样最多支持48位寻址,所以在处理器架构的设计上,把虚拟地址空间划分为两个空间,每个空间最多支持256TB。Linux内核在大多数架构中把虚拟地址空间划分为用户空间和内核空间。

2025-03-08 15:20:18 665

原创 【Linux内核】进程管理(下)

站在处理器的角度看进程的行为,你会发现有的进程一直占用处理器,有的进程只需要处理器的一部分计算资源即可。所以进程按照这个标准可以分成两类:一类是CPU消耗型(CPU-Bound),另外一类是IO消耗型(I/O-Bound)CPU消耗型的进程会把大部分时间用在执行代码上,也就是一直占用CPU。一个常见的例子就是执行while循环。实际上,常用的例子就是执行大量数学计算的程序,比如MATLAB等。

2025-02-22 22:50:05 776

原创 【Linux内核】进程管理(上)

关于进程相关内容直接看我的操作系统专栏,在这里不再赘述。我们直接快进到Linux中的进程管理部分。

2025-02-16 23:35:11 771

原创 【Linux内核】系统调用详解

实际上新增系统调用十分容易,但是并不提倡这样子做,这会影响应用程序的可移植性:毕竟在其他的Linux上不存在自定义的系统调用关于Unix的接口设计有一句格言**“提供机制而非策略”**,换句话说,设计系统调用应该是为了完成某种确定目的,而这些系统调用会怎么样去使用则完全不需要内核去关心。此外,系统调用应该被设计得尽可能简单高效。

2025-02-09 02:32:19 808

原创 【AutoSar】DoIP协议详解

UDS诊断作为汽车ECU里的一个服务功能,位于应用层,它的实现需要有网络的支撑,我们把基于CAN总线实现的UDS诊断称为DoCAN,基于Ethernet实现的UDS诊断称为DoIP。相比DoCAN中CAN网络的封闭性,DoIP由于Ethernet的互联互通,可以实现车与车、车与人的远距离诊断通信,DoIP在传输层以下的规范遵循ISO 13400,而应用层还是遵循ISO 14229不变,这样可以保证UDS诊断在不同车载网络上的可移植性。

2025-02-05 21:04:17 1001

原创 【AutoSar】汽车诊断标准协议UDS详解

Tester端收到这个种子数,根据自己安全算法算出来一个K1发送给ECU,ECU也有自己对应的安全算法,他由这个Seed算出来一个密钥K2,当ECU收到这个K1后和自身计算的K2进行比较,如果两者是一致的,那么ECU发送肯定响应给Tester端,告诉Tester端ECU已经解锁。还有NRC 31,NRC 31常用的用法是请求超出范围,比如说22服务,发送的DID,是ECU不支持的,比如说发送的请求22 01 01 ,因为ECU不支持01 01这个DID,会发送NRC 31的否定响应。

2025-01-29 17:12:39 1427

原创 【嵌入式】STM32中的SPI通信

SPI是由摩托罗拉公司开发的一种通用数据总线,其中由四根通信线,支持总线挂载多设备(一主多从),是一种的协议。主要是实现主控芯片和外挂芯片之间的交流。这样可以使得STM32可以访问并控制各种外部芯片。本文主要是实现STM32连接W25Q64外挂Flash芯片。I2C的优点是,无论外挂多少设备,只需要两根通信线就可以实现连接,但是由于其默认弱上拉的设计,其由低电平变换到高电平的时候会比较慢,这会使得其通讯频率较低,最高位400kHz。SPI传输更快,其通讯频率更高,最高可达80MHz。

2024-11-04 17:01:42 551

原创 【嵌入式】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 1364

原创 【嵌入式Linux】Linux设备树详解

设备树是是Linux中一种用于描述硬件配置的数据结构,它在系统启动时提供给内核,以便内核能够识别和配置硬件资源。设备树在嵌入式Linux系统中尤其重要,因为这些系统通常不具备标准的硬件配置,需要根据实际的硬件配置来动态配置内核。在Linux中,设备树源文件的扩展名为.dts,其二进制编码文件为.dtb,将.dts编译成.dtb需要使用DTC工具,位于Linux内核的文件夹下。

2024-10-23 15:57:23 1284

原创 【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 1470

原创 C++新特性汇总

这样做的好处是,如果使用int a=3.5f进行变量赋值,那么会对变量进行截断,a的值为3;而使用则会直接编译不通过, 直接语法报错,这样做的好处是不会使得数据被误截断,进一步提高代码的健壮性。

2024-10-06 18:37:02 531

原创 【开发杂谈】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 611

原创 【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 867

原创 【嵌入式软件开发】ARM64架构基础知识

ARMv8-A是ARM公司发布的第一代支持64位处理器的指令集架构,他在扩充64位寄存器的同时提供对上一代架构指令集的兼容,因而可以同时运行32位和64位应用程序的执行环境。

2024-08-14 15:48:51 2837

原创 【嵌入式】CAN总线详解

CAN总线是一种控制器局域网总线,每一个挂载在CAN局域网的设备,都可以利用CAN去发送信息,也可以接收局域网的各种信息,每个设备都是平等的,共享CAN的资源。广泛应用于汽车、嵌入式和工业控制等领域。CAN总线一共有五种帧。

2024-06-16 19:58:53 2751

原创 【Spring源码】1.1 BeanFactory和ApplicationContext

阅读前须知:需要有一定Spring基础和Spring实践经验。

2024-05-05 20:35:37 941

原创 【嵌入式】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 1089

原创 【编译原理】第一章 概述

写在开头:本文以及本博客大多数文章都是作者学习之后的笔记,知识点经过提炼,因此缺少生动详细的解释和样例,不适合初学入门者观看,正确使用方法是学习完该门课程后,可以用本博客温故而知新,快速回忆起遗忘的内容,希望可以帮到各位!编译器的核心功能是将翻译为其基本的要求是生成的目标代码的语义要和源代码一致,因此编译器需要进行大量静态计算(也就是在编译过程中不会进行运算)编译器和解释器的区别:编译器输入需要编译的源程序,输出编译完成后的目标程序;

2024-03-18 10:38:33 416

原创 【电路分析】第一章 初识电路分析

电路三要素:电源、负载、导线。

2024-01-07 16:09:59 1699

原创 【神经网络】GAN:生成对抗网络

和传统的神经网络不同,Generator除了接受x的输入之外,还会接受一个简单的分布作为z进行输入,从而使得网络的输出也是一个复杂的分布为什么输出需要时一个分布呢?以视频预测为例,比如说在糖豆人游戏中,我们需要预测视频的接下来的10帧是怎么样的问题是传统的神经网络(NN)训练出来的结果,在拐角处,一个糖豆人会分裂为两个糖豆人,一个向左一个向右,这是因为在普通NN中,糖豆人向左和向右都有可能,是概率不同,因此他将这两个结果都显示了出来。

2023-11-11 19:13:01 2044 2

原创 【Spring】Spring技术栈需掌握技术点

本文旨在总结Spring技术栈需要掌握的一些技术点,面试不一定问,因此本文并非是面试导向,而是实战导向。笔者曾经学习过Spring相关内容,但是由于读研做了一些其他工作,一些关键内容发现已经模糊不清,为了加强记忆,于是决定将相关知识点记录下来。

2023-11-09 18:08:20 110

原创 【算法笔记】LCR 086. 分割回文串

Java中的List变量存储的是List的地址,而非List本身,因此可以构建一个path列表,用于存储当前已经遍历的序列,当dfs向下遍历的时候则将新遍历的字符串加入path中;当向上回溯的时候,可以将path中的最后一个元素remove掉,从而恢复到上一个遍历状态。dfs遍历出来的第一个序列是[a, a, b],显然该序列都是回文子串,接着回溯,遍历下一个序列,为[a, ab],不是回文子串,去除…如此往下遍历,将符合要求的序列加入到结果集res中,直到遍历整个解空间树。

2023-10-11 12:14:28 334

原创 【深度学习】Mini-Batch梯度下降法

反之,较小的子集会导致噪声较大,下降的精度不高,但是单次训练速度快,而且较小的子集也无法充分来自于向量化的训练加速,总训练时间反而不是最快的。在实际中,选择适中的子集大小能够保证一定的精度,也能提高速度,并且利用好向量化带来的加速,在此基础之上,根据自己的目标选择合适的子集大小,平衡好训练速度和精度问题。而在情况2中,因为每个样本都是单独的Mini-Batch,大多数时候会朝着最小值前进,但是有一些样本是噪声样本,因此偶尔会指向错误的方向,因此这会使得其路线十分的九转十八弯(紫线)。原数据集的特征部分为。

2023-09-09 16:59:23 1119

原创 【机器学习】异常检测

假设你是一名飞机涡扇引擎工程师,你在每个引擎出厂之前都需要检测两个指标——启动震动幅度和温度,查看其是否正常。在此之前你已经积累了相当多合格的发动机的出厂检测数据,如下图所示我们把上述的正常启动的数据集总结为DataSetx1x2...xm如果一个新的例子xtest​离点集很远,那可能这个样例是异常的那么如何衡量“很远”呢?一般我们会有一个函数p(x)负责计算,并且有一个阈值ϵ,当pxtest​ϵ的时候,我们认为该样例异常;而当pxtes。

2023-07-24 19:49:55 515

原创 【机器学习】支持向量机SVM入门

相较于之前学习的线性回归和神经网络,支持向量机(Supprot Vector Machine,简称SVM)在拟合复杂的非线性方程的时候拥有更出色的能力,该算法也是十分经典的算法之一。接下来我们需要学习这种算法首先我们回顾逻辑回归中的经典假设函数,如下图:对于任意一个实例xy,当y=1的时候,我们希望hθ​x≈1,也就是θTx>>0;当y=0的时候,我们希望ht​hetax≈0,也就是θTx

2023-07-23 16:09:18 490

原创 【机器学习】正则化对过拟合和欠拟合的影响

接下来我们总结若干应对各种问题的方法:修正过拟合(高方差):增加训练及数量、使用更少的特征、增加正则化参数的值修正欠拟合(高偏差):增加额外的特征、增加假设函数的复杂度和次方数、减小正则化参数的值。

2023-06-26 09:11:54 643

原创 【机器学习】如何选择合适的假设函数

但是这仍不能证明模型的泛化能力,因为上述过程类似于新增了一个参数d之后,再使用测试集进行模型训练选出最优d值,也就是说,这是使用测试集来选择模型,又使用相同的测试集来计算误差,对于模型多项式次数d的选择会存在过拟合的情况。想要了解自己训练出的模型对训练集外的实例的泛化能力,则我们可以将初试的数据集分为两部分:70%为我们的训练集,剩下30%为我们的测试集(当然比例我们可以灵活调整)。值最小的对应的d的取值,假设d=4的时候最佳,那么我们就选择这个多项式次数作为最优假设函数模型。的取值,而不是像之前的求。

2023-06-26 09:08:33 419

原创 神经网络小结:训练的全过程

这一节我们主要是将之前的知识穿起来,形成一个整体。如果之前的没看过可以回翻一下专栏。但是在整体回归之前,我们还需要学习一个小知识点——随机初始化。

2023-06-20 16:29:21 872

原创 【神经网络】梯度检测

的取值是一个可行的方法,但是它很容易出错:因为在这个算法中含有海量的细节,容易产生微小而又难以察觉的bug。的方法赖解决这种问题,只要需要使用类似梯度下降或者反向传播的算法都可以使用这种方法,这种方法能够确保你的前向\反向传播完全正确。还是会照常迭代下降,但是得出来的结果的误差将会比正确的情况高出一个量级。,如果成立的话,则可以认为反向传播是正确的,把DVex用于梯度下降则可以得出较好的结果。是一个很小的数,类似于微积分中的微小增量,一般可以将。,那么我们可以使用相同的办法得出对应偏导数的大约值。

2023-06-16 15:22:05 1178

原创 【机器学习】神经网络代价函数和反向传播算法

表示的是神经网络经过拟合后的输出值,而y是样本实际的结果,因为多分类的神经网络中,式子中的y不只是只有一种输出结果,而是有k种输出结果,因此需要计算K个输出单元的和,这就是为什么需要。老实说,代价函数这方面我也不太整的明白,我跟的教程并没有给出足够严谨的说明,但是好在实际使用时是直接有函数接口调用的,另外我还会找额外的书籍去补一补这一方面,等着更新吧(挖坑。神经网络中使用的代价函数我们之前学过Logistics回归的代价函数的一般形式,其中Logistics回归的代价函数如下:(带有正则化项)

2023-06-15 17:47:22 1690

原创 【机器学习】一个简单的神经网络例子教你理解前向传播

在计算机中可以很容易地使用门电路实现异或,但是今天我们试着用神经网络去实现以下与运算。那么我们构建如下的神经网络。在开始这个实力前,希望你已经了解了神经网络的相关内容,可以参见如下文章。在计算机中,有一种很基础的运算称之为与运算,这是一个二元运算符,的值为1,可以知道与运算有四种情况。的取值只可以是0或者1,当。并且将权重矩阵初始化为。

2023-06-14 15:45:44 359

原创 【机器学习】神经网络入门及其运行过程

如果对于下图使用Logistics回归算法,如果只有x1和x2两个特征的时候,Logistics回归还是可以较好地处理的。它可以将x1和x2包含到多项式中但是有很多问题所具有的特征远不止两个,甚至是上万个,如果我们想要包含很多特征,那Logistics回归的假设函数将会相当复杂。这些多项式的项数是以n^2的速度增长的。一方面运算量十分大,而且想要进行正则化调整也很难。这么庞大的特征空间使得对特征的增删查改都十分困难,因此我们需要另寻出路。

2023-06-07 10:03:46 976 1

原创 【机器学习】正则化详解和过拟合的解决

上一篇文章的例子中,如果使用一个四次多项式去拟合房价函数,会导致过拟合问题而正则化是解决过拟合的一个方法。J2m1​i1∑m​hθ​xi−yi2J2m1​i1∑m​hθ​xi−yi21000θ32​1000θ42​当我们要得出最小的代价函数的时候,θ3​和θ4​必须要尽可能接近于0,否则函数J会变得很大。对于假设函数θ0​θ1​xθ2​x2θ3​x3θ4​。

2023-06-05 15:06:02 539 1

原创 【机器学习】浅析过拟合

我们来想象如下一个场景:我们准备了10000张西瓜的照片让算法训练识别西瓜图像,但是这 10000张西瓜的图片都是有瓜梗的,算法在拟合西瓜的特征的时候,将西瓜带瓜梗当作了一个一般性的特征。此时出现一张没有瓜梗的西瓜照片,算法就认为它不是西瓜了。这种情况被称为。上面从感性的方面感受了下过拟合的情况,接下来我们系统分析过拟合的情况。还是以我们经典的通过房屋大小预测房价走向的问题,假设有以下三个拟合好的图像。

2023-05-31 17:37:37 718

原创 【机器学习】分类问题和逻辑(Logistic)回归算法详解

在阅读本文前,请确保你已经掌握代价函数、假设函数等常用机器学习术语,最好已经学习线性回归算法,前情提要可参考https://blog.youkuaiyun.com/weixin_45434953/article/details/130593910我们通常用y来表示分类结果,其中最简单y值集合为01,比如对于一个邮件是否为垃圾邮件,有“是垃圾邮件(1)”和“不是垃圾邮件(0)”两种y的取值。

2023-05-31 11:35:36 687

原创 Bootstrap下div边框属性失效问题解决方法

猜想是bootstrap可能为了统一控件,将边框类型设置成了none。既然都没有边框了,那当然设置边框颜色也没有用,解决办法是在style中手动规定border-style:soild。如果将一个div指定为bootstrap中的column,并且再设定他的边框颜色,会发现不起作用。

2023-05-30 16:15:31 415

原创 Spring和SpringBoot常用注解(持续更新)

lombok注解,用于自动生成getter\setter\toString等方法,使用前需要在pom.xml中引入如下内容

2023-05-22 21:32:37 677

原创 【机器学习】多元线性回归详解和特征压缩

注意⚠️阅读本文前,你应该需要掌握:机器学习线性回归模型、高等数学微积分部分内容、线性代数矩阵部分内容前情提要:https://blog.youkuaiyun.com/weixin_45434953/article/details/130593910。

2023-05-15 10:32:07 620

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除