- 博客(42)
- 收藏
- 关注
原创 UDS-10 (DiagnosticSessionControl)
1.若服务器处于默认会话(default Session)时,若客户端要求启动默认会话,则。服务器要能够在正常运行的状况下(例如跛行状态)提供诊断功能。例如:发送 10 01 代表启用默认会话。服务器始终只能同时运行一种诊断会话。服务器上电始终启动默认诊断会话。肯定响应: 50 01。
2024-12-04 21:13:24
349
原创 AUTOSAR-Application
1)应用数据类型(Application Date Type,ADT):是指在SWC设计阶段被抽象提出来的数据类型,是供给给底层使用的,仅为一种功能定义,并不能生成实际的代码。可创建 bool 数值 字符 数据 结构体 字符串等类型2)现实数据类型(Implementation Data Type,IDT)是代码级别的数据类型,是ADT的具体实现,他需要引用基础数据类型(Base Type)与ADT一样,可以创建非常灵活的多维数组和结构体等。最后会在代码中生成。
2024-12-04 00:45:28
1104
原创 Simulink-StateFlow手把手教学(五)-事件的三种用法
我们建立另外一个chart,让前一个的function call 作为下一个chart的输入。此时,我们希望通过A,B状态并行,让内部的A1\A2,同时转移到B1\B2去。那么就需要发送这个事件,发送到B去,也就是上面的send函数。建立一个输出事件,这里我们选择functioncall,函数调用触发形式。进入chart1,建立两个互斥的状态,同时建立两个并行的状态。建立一个事件,作为function call的输入。双击进入状态机,建立一个节点和默认转移。双击进入,创建一个输入事件。
2024-11-29 20:43:46
1795
5
原创 Simulink-StateFlow手把手教学(四)-创建图形函数
将我们画的流程图选中,剪切,点击这个流程函数,粘贴到里面(提前把流程函数里面的连接点和默认转移删掉)其实还有更加快速的方法,stateflow配备了一些常用函数的流程图供我们使用。在状态机里面创建两个状态,让其能使用这个流程图函数,首先点击图标拖动两个状态。先对两个状态进行动作编写,里面调用我们写的图形函数,并设置转移条件。点击问号的地方,输出返回值、函数名、参数,然后就会自动生成模块。我们选择(随便选一个),随便填函数信息。点击确定,就自动创建好了,替换一下就行。创建一个图形函数,点这个图标,拖过来。
2024-11-29 19:40:11
681
原创 Simulink-StateFlow手把手教学(三)-迁移与父子状态扭转
连接点起到类似于分岔路的作用,使的某一条件可以有多种状态转移的选择,我们将event取消连接,然后把连接点放入event的箭头上,然后将一段接入StateB,一段接入自身。为这两条线写入转移条件,这就类似于C语言中的。
2024-11-29 16:26:47
972
原创 Simulink-StateFlow手把手教学(二)-状态层级与分解
Stateflow的状态层级结构是用于管理和表示复杂系统中不同层级的子组件的一种方式。它允许在一个状态(称为超状态或父状态)内部包含其他状态(称为子状态或子级)。:子状态是只有在其父状态(超状态)激活时才能激活的状态。要创建子状态,可以使用State工具在想要成为超状态的状态内部拖动一个新状态。Stateflow图表会在指定的父状态中创建子状态,并且可以无限嵌套状态。状态层级有助于减少转换的数量,产生整洁、可管理的图表,并使得复杂的逻辑更加清晰和易于管理。
2024-11-28 22:51:57
770
原创 链表的基本操作
链表,由若干个结点组成,每个结点包含数据域和指针域。结点结构如下图所示:一般来讲,链表中只会有一个结点的指针域为空,该结点为尾结点,其他结点的指针域都会存储一个结点的内存地址。链表中也只会有一个结点的内存地址没有存储在其他结点的指针域,该结点称为头结点。
2024-11-17 22:45:17
308
原创 栈与队列(Stack&Queue)
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。队头(Front):允许删除的一端,又称队首。队尾(Rear):允许插入的一端。空队列:不包含任何元素的空表。
2024-11-17 00:42:41
875
原创 灰狼优化算法
1.1 灰狼优化算法-Grey Wolf Optimizer通过模拟灰狼群体捕食行为,基于狼群群体协 作的机制来达到优化的目的。GWO算法具有结构简单、需 要调节的参数少、容易实现等特点,其中存在能够自适应调整 的收敛因子以及信息反馈机制,能够在局部寻优与全局搜索 之间实现平衡,因此在对问题的求解精度和收敛速度方面都 有良好的性能。
2024-11-09 21:08:31
1552
2
原创 DMA传输原理详解
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传 输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自 于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。
2024-09-28 18:56:49
388
原创 leecode100题-双指针-三数之和
固定i,即可转换为寻找满足 nums[l]+nums[r]=−nums[i] 的三元组,因为不能包含重复的三元组,以下两个三元组只能取一个,而后我们再考虑其是否满足 nums[l]+nums[r]=−nums[i]。先对数组排序,设一非递减的数组示例和初始三指针位置及名字如下所示。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。移动指针的时候,需要规避连续的重复元素。答案中不可以包含重复的三元组。,判断是否存在三元组。
2024-09-10 21:32:25
536
1
原创 leecod100题-双指针-盛水最多的容器
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。在初始时,左右指针分别指向数组的左右两端,它们可以容纳的水量为 min(1,7)∗8=8。应该移动对应数字较小的那个指针(即此时的左指针)。这是因为,由于容纳的水量是由。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。
2024-09-10 20:21:25
241
原创 C++ 多态
多态(Polymorphism)是一种允许不同类的对象对同一消息做出响应的能力,这个响应的确切行为取决于对象的实际类型。多态是面向对象编程的核心概念之一,它使得代码更加灵活和可扩展。C++中的多态主要有两种形式:编译时多态(也称为静态多态),编译阶段确定函数的地址;运行时多态(也称为动态多态),在运行阶段确定函数的地址。
2024-09-02 18:21:42
812
原创 C++ map容器
在 C++ 中,std::map是标准模板库(STL)中的一种关联容器,它存储了键值对(key-value pairs)。std::mapkey值起索引作用,value为实值可以根据key快速的找到value;map中不允许存在相同的key。
2024-08-29 21:17:11
652
原创 C++ string容器
在 C++ 中,是一个非常强大的容器,用于存储和管理字符串数据。它提供了一系列的成员函数和操作符,使得字符串的创建、操作和处理变得非常方便和高效。string本质上是一个类!string 与char*的区别string是一个类,内部封装了char*,管理这个字符串,是char*型容器char*是一个指针。
2024-08-29 19:59:16
325
1
原创 C++ Vector容器操作
提供三种方式进行赋值assign函数是STL中提供的一个成员函数,assign()函数可以重新定义向量的内容,可以用于设置特定数量的重复元素,或者直接用另一个容器的元素来替换当前向量的元素。
2024-08-29 15:10:41
1044
原创 c++ vector容器构造与数据存放
/创建vector容器 v 存放Person类型数据//尾插法向容器中添加数据//遍历容器中数据it!= v.end();it++)//it本质 是一个指针,取值需要解引用cout << "姓名: " << (*it).m_Name << "年龄: "<< (*it).m_Age << endl;存放地址数据!vector存放是的person* 是一个指针类型数据,容器中存放的是地址!
2024-08-28 22:37:28
565
原创 C++ STL
C++的STL(Standard Template Library,标准模板库)是一套由模板类和模板函数组成的库,它提供了通用的、可重用的算法和数据结构。STL 是 C++ 标准库的一部分,它在 C++ 程序设计中扮演着重要的角色,因为它提供了一种高效、一致且类型安全的方式来处理数据集合。在 C++ 的标准模板库(STL)中,通常提到以下六大组件,它们共同构成了 STL 的核心功能。
2024-08-28 21:19:31
218
原创 C++ 继承
公共继承 public私有继承:privaite保护继承 protected子类继承父类,会首先构造父类,然后再构造子类,析构时,先析构子类,然后再析构父类静态成员和非静态成员出现同名,处理方式一样子类同名成员直接访问,父类同名成员要加作用域!
2024-08-28 16:15:55
456
原创 C++ 文件操作
包含头文件--->创建流对象----->打开文件---->写入数据----->关闭文件。字符指针 buffer指向内存中的一段储存空间,len为读取的字节数。利用流对象调用成员函数write。包含头文件流<fstream>可读可写:fstream。写:ofstream。
2024-08-27 16:50:40
628
原创 C++ 函数重载
函数重载(Function Overloading)是编程中的一个概念,它允许在相同的范围内(如一个类或命名空间)有多个同名函数存在,只要它们的参数列表不同即可。
2024-08-26 21:38:33
375
原创 TCP协议
客户端收到确认后,检查 ack 是否为 J+1,ACK 是否为 1,如果正确则将标志位 ACK 置为 1,ack=K+1, 并将该数据包发送给服务器端,服务器端检查 ack 是否为 K+1,ACK 是否为 1,如果正确则连接建立成功, 客户端和服务器端进入 ESTABLISHED 状态,完成三次握手,随后客户端与服务器端之间可以开始传输数 据了。Server 端收到了 Client 端发送的 FIN 报文段,向 Client 端返回一个 ACK 报文段,此时报文段的 ACK 标志位被设置为 1。
2024-08-25 20:41:25
756
原创 Qt控件--按钮
(1) QPushButton:下压按钮。在 Qt 里,最常用使用的控件就是按钮了,有了按钮,我们就可以点击,从而响应事件,达 到人机交互的效果。(2) QToolButton:工具按钮,是一种用于命令或者选项的可以快速访问的按钮, 通常在 ToolBar 里面。(复选框)与 RadioButton 的区别是选择模式, 单选按钮提供多选一,复选按钮提供多选多。(3) QRadioButton:选择按钮,RadioButton。(单选框)通常成组出现, 用于提供两个或多个互斥选项。
2024-08-24 21:49:09
261
原创 Qt--信号signal与槽slot
槽就是一个函数,与一般的 C++函数是一样的,可以 定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数可以与一个信号关联,当信号被发射时,关联的槽函数 被自动执行。将 pushButton 按钮的 clicked() 信号与窗体(MainWindow)的槽函数 close() 相 关联,这样,当单击 pushButton 按钮(就是界面上的“X”按钮)时,就会执行 MainWindow 的 close() 槽函数,关闭该页面。
2024-08-24 20:26:26
325
原创 C++学习笔记---类和对象-封装
建立类之后,需要实例化,通过一个类创建一个具体的对象。人可以作为一个对象,身高体重作为人的属性,吃饭跑步作为人的行为。首先,求圆的周长,我们需要知道圆的周长公式, L=2*PI*R。保护权限,类外无法访问 (子类可以访问父类的保护内容)私有权限,类外无法访问(子类不可以访问父类的保护内容)C++认为 万事万物都是对象,对象具有属性和行为。三、class与struct关键字的区别。案例1:设计一个圆类,请求圆的周长?公共权限,类内,类外都可以访问。struct 默认是公共权限。class 默认是保护权限。
2024-07-13 19:09:42
386
原创 C++学习笔记---引用
作用:函数传递参数时,利用引用,让形参修饰实参,优点是可以简化指针修改实参。2.如果函数的返回值是一个引用,那么这个函数的调用可以进行赋值操作。1.不可返回局部变量的引用(因为局部变量在栈区,会被释放)起别名 语法: 数据类型 &别名 = 原名。指针常量(指针指向不可改,指针指向的值可以改)通过代码来实际操作,利用别名来修改数据。2.引用一旦初始化之后便不可以更改了。2.地址传递:形参可以修饰实参。对于值传递,形参不会修饰实参。下图可以很详细的说明。四、引用做函数返回值。
2024-07-12 19:44:39
296
原创 C++学习笔记---内存四区
从代码角度深层次分析各种类型的变量在内存中的地址分布,依次创建局部变量、全局变量、静态变量和常量。(举个例子,为了防止你背包里的S级装备被修改成了普通装备,造成损失,所以权限只能是只读)C++程序执行时,将内存大致分为四个区域,不同的区域存放不同类型的数据,赋予不同的生命周期,使编程的灵活性大大提高。堆区:由程序员进行分配和释放,若程序员不进行释放,程序结束时由操作系统进行回收。由编译器自动分配释放,存放函数的参数值(包括形参),局部变量等。代码区:存放函数体的二进制代码,由操作系统进行管理。
2024-07-11 21:58:13
668
原创 STM32-DAC
DAC作用与ADC相反,DAC将单片机经过处理的数字量转化为模拟量(电压值)给执行系统。12位模式下 :DAC输出电压 = (输入数字量/4096)*参考电压。8位模式下 :DAC输出电压 = (输入数字量/256)*参考电压。运算放大器零漂(工作温度引起)
2024-07-03 16:47:16
479
原创 STM32-ADC
1.1ADC 简介ADC (Analog to Digital Converter) 模拟/数字转换器1.2 ADC参数分辨率:表示ADC能辨别的最小模拟刻度,二进制位数表示。若传感器电压范围为0~3.3V,以12位分辨率为例,最小刻度为:3.3/2的12次方,即3.3/4096=0.000805V。1.3 ADC转换时间表示完成一次A/D转换所以的时间,转换时间越短,采样率越高1.4 精度最小刻度的基础上叠加各种误差的参数,受到ADC性能,温度,气压的影响。1.5 量化误差。
2024-07-02 17:30:58
622
2
原创 STM32-DMA详解
DMA(Direct Memory Access),直接寄存器访问。DMA 传输就是将数据从一个地址空间复制到另外一个地址空间,起到数据搬运工的作用。DMA的传输无需CPU直接控制,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使CPU的效率提高。
2024-07-02 14:54:46
448
原创 嵌入式基础---时钟树
依然更通俗的讲,类似于一整块手表的计时方式,秒针滴答60下,分针滴答一下,分针滴答60下,时针滴答一下。基于一个时钟源(秒针),分频60倍作为分针的时钟,然后再分频60倍,作为时针的频率。还是用手表指针为例,如果想达到秒针转半圈,分针转一格,那么就得把秒针的频率分频30倍然后输出给分针。通俗的讲,时钟就是一个周期性的脉冲信号,一般为50%占空比的方波。更通俗的讲,时钟就类似于手表的秒针,一秒滴答一下。输入信号先经过倍频得到一个高频信号,然后从输出的频率采集一部分反馈到输入,使其与输入的信号同步。
2024-06-25 15:35:10
448
转载 CAN总线基础(4)--节点错误状态
处于总线关闭状态的节点对总线没有任何影响,不允许发送任何帧,ACK,错误帧,过载帧。处于主动错误状态的节点能正常参与总线通信的收发,当检测到错误时将发送主动错误标志,错误标志由6个连续的显性位组成(这种连续的6个显性位与常规的填充位和其它帧固定格式不相同,正因为如此,硬件才容易区别)。当一个发送节点监控到总线上的位数值与发送的位数值不一致时,检测为位错误,并发送主动错误标志(6个连续的显性位);当发送节点监控到总线上的位数值与发送的位数值不一致时,检测为位错误,并发送被动错误标志(6个连续的隐性位);
2024-06-25 13:48:19
1647
原创 CAN总线基础(3)远程帧,错误帧,过载帧,帧间隔
(2)ACK错误:若某节点A向总线的节点B发送一帧报文,如果节点B收到了该报文,则节点B会在该帧报文的ACK槽的对应的时间段发送一个显性位回复节点A,当节点A 在总线上读到了这个显性位,代表已确认收到了。(4)CRC错误:发送节点A 在对节点B发送报文的时,会计算该帧报文的CRC值,节点B在接收报文后也会自己计算一个CRC值,若二者的CRC值不一致,则节点B会检测到一个CRC错误。(1)位错误:节点向总线发送电平信号时,会对发送的信号进行回读,若发送与回读的信号不一致,则会视为一个位错误。
2024-06-24 15:30:23
2120
原创 汽车电子ECU bootloader设计与实现(下位机代码篇)
flash编程函数较为简单,这里不做说明,flash擦除函数需要注意一下,由于flash擦除是需要时间的,但是程序运行的速度时非常快的,取决于单片机内部的晶振,如果再在执行擦除的操作时,由于擦除的操作还没有执行完毕,也就是出现,单片机擦除程序执行到下一条,上一个空间的擦除操作内部还没有完成,就会引起程序的崩溃。这里的通信协议是我自拟的,设计思路,上位机分析APP数据并拆包,告诉下位机,APP的起始地址和size,下位机收到后,根据该信息进行擦除flash,这样的操作可以延长falsh的寿命。
2024-06-22 16:20:21
1522
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人