- 博客(203)
- 收藏
- 关注
原创 Simulink Ststeflow教程 — 1 Stateflow概述
其中,最高层级的对象是 Stateflow 状态机,它囊括了所有的 Stateflow 对象,进而涵盖了 Simulink 中所有的 Stateflow 状态图以及数据、事件、目标对象。同样,状态图包含状态、盒函数、函数、数据、事件、迁移、节点与注释事件,可利用这一系列对象构建 Stateflow 状态图。点击进入到Chart模型,左侧状态栏从上到下分别代表:状态、节点、转移、框、simulink状态、simulink函数、图形函数、matlab函数、真值表、历史、退出、进入、注释、图像。
2025-02-16 11:12:36
550
原创 BMS应用软件开发 — 12 菊花链通讯
目前BMS行业的菊花链技术是各AFE芯片厂家来推动的。CAN通信在汽车电子上的应用时间长且通信稳定性很好,所以早期主板与从板之间采用CAN通信方式,出于方面的考虑,业内逐渐发展了一种新的通信方式——菊花链通信,由于使用元器件更少更具成本优势,虽然稳定性没有CAN通信这么好,但是考虑到BMS多数场景下放置在一个相对封闭应用场景,并且主板与从板之间的线束较短,符合应用要求,所以目前市场上使用更多的是菊花链通信方式。可以设计成对特定频率的信号进行隔离,同时允许其他频率的信号通过,但设计复杂,需要精确的参数匹配。
2025-02-09 22:57:24
871
原创 BMS应用软件开发 — 11 CAN通讯
而表示逻辑 0 时 (显性电平), CAN_High 的电平为 3.5V, CAN_Low 线的电平为 1.5V,即它们的电压差为 VH-VL=2V。由于 CAN 通讯协议不对节点进行地址编码,而是对数据内容进行编码的,所以网络中的节点个数理论上不受限制,只要总线的负载足够即可,可以通过中继器增强负载。CAN总线采用差分信号方式传输数据,通过两根信号线CAN_H(CAN High)和CAN_L(CAN Low)的电压差值来表示数据的逻辑状态(逻辑0和逻辑1)。CAN总线的遥控帧,实际上是一种请求数据的帧。
2025-02-09 22:27:13
668
原创 BMS应用软件开发 — 10 高压互锁采集
也可以将高压器件进行分类,独立成2条回路,各自独立控制,如整车器件(VCU、IPU、DCDC、CCS、ACP、PTC等)一条回路,BMS回路作为一条回路,BMS单独检测内部的高压互锁回路。检测高压互锁回路完整性,可以通过在BMS一端输出直流电流,在另一端输入形成回路,检测输出和输入点的电压,判断是否在一个阈值内,从而判断高压互锁回路是否开路或松动。在维修整车高压电路时,可通过MSD(手动维修开关)手动断开高压,高压互锁先断开,然后再断开高压互锁回路,防止误操作导致高压上电,威胁维修人员安全。
2025-01-19 21:25:46
731
原创 BMS应用软件开发 — 9 继电器原理与应用
首先闭合主负接触器以确保电源负极与电路连接,接着闭合预充接触器,通过预充电阻对高压回路预先充电,此过程可避免瞬间大电流损坏电路,预充电时长由预充电阻阻值和回路电容大小决定,预充电完成后再次闭合主负接触器,然后闭合主正接触器完成电源正极连接,此时整个电路完全接通,设备正常工作。:当继电器未通电时,电磁铁没有磁场,衔铁在弹簧的拉力作用下,保持在一个位置,使得常开触点处于断开状态,常闭触点处于闭合状态。这个电压与继电器所控制的电路有关,它的大小和变化取决于继电器的通断状态以及负载电路的特性。
2025-01-19 20:10:24
539
原创 BMS应用软件开发 — 8 电池系统电流、电压、温度采集
当原边导体流过电流时,在导体周围产生磁场强度与电流大小成正比的磁场,磁芯将磁力线集聚至气隙处,霍尔元件输出与气隙处磁感应强度成正比的电压信号,放大电路将该信号放大输出,该类传感器通常输出±10V左右的电压信号,也有部分传感器为了增强电磁兼容性,变换为电流信号输出。分流器是一个低阻值的精密电阻,当电流通过时,根据欧姆定律U=IR(其中U为分流器两端的电压,I为通过的电流,R为分流器电阻),在分流器两端会产生与电流大小成正比的电压降。原则上,为真实反映电芯的温度变化,需把热敏电阻NTC布置在模组电芯的表面。
2025-01-19 17:34:10
1049
原创 Git代码管理工具 — 5 GitHub远程仓库
GitHub他就是一个远程仓库,远程仓库通俗的理解就是一个可以保存自己代码的地方,在实际开发当中一个项目往往是有多个人来共同协作开发完成的,那么就需要一个统一代码保存的地方,而GitHub就是起到一个共享和汇总代码的作用。包含了常见的功能选项,如“Code”(代码)、“Issues”(问题)、“Pullrequests”(拉取请求)、“Actions”(操作)、“Projects”(项目)、“Security”(安全)、“Insights”(洞察)、“Settings”(设置)。
2025-01-18 20:41:06
1587
原创 BMS应用软件开发 — 7 BMS硬件系统概述
继电器供电处增加PMOS开关控制是比较常见的,但是KL30线也增加PMOS开关控制而不是保持常电,这种不太常见,后面仔细看了下,这两个PMOS开关是由唤醒信号来控制,就是说控制板休眠时,SBC是断电的,可能是为了降低静态功耗。AFE选取的是TI的BQ79616,这个与之前看到的MODEL3采样板是不同的,之前分析的AFE是特斯拉定制的Robin与Batman,而这个版本选用的是现有的成熟型号,整个单板的通信拓扑架构如下(来自TI官网)。采样输入采用RC滤波,电容为差模形式,布置在相邻的电压采样引脚;
2025-01-18 12:32:04
1387
原创 BMS应用软件开发 — 6 BMS软件系统概述
BMS 系统通过控制继电器的通断,实现对电池电路的管理。与整车接口(Discrete I/O、CAN 等)进行交互,接收整车的相关信息(如车辆运行状态等),同时向整车提供电池系统的状态信息和控制指令,实现电池系统与整车其他系统的协同工作,例如根据车辆的动力需求和电池状态调整电池输出功率等。系统应该具备多种安全保护功能,如高压互锁 HVIL、过压保护、欠压保护、过温保护、过流保护、继电器故障保护、绝缘保护等,当电池出现异常情况时,能够及时采取措施,防止电池发生危险,保障电池系统及车辆的安全。
2025-01-16 21:35:28
1202
原创 BMS应用软件开发 — 5 电池关键参数及其含义
例如,在快速充电过程中,锂离子在电极材料中的嵌入速度过快,会导致电极材料的结构发生不可逆的变化,加速电池容量的衰减。锂离子电池的充放电倍率,决定了我们可以以多快的速度,将一定的能量存储到电池里面,或者以多快的速度,将电池里面的能量释放出来一般而言,过放电会使锂电池内压升高,正负极活性物质可逆性受到破坏,即使充电也只能部分恢复,容量也会有明显衰减。电池的一种状态,在该状态下,电池内部产生剧烈的物理、化学变化,导致电池自身释放大量的热,使得电池单体温度急剧上升,最终可引起电池起火甚至爆炸。
2025-01-12 16:45:01
701
原创 BMS应用软件开发 — 4 电池系统的开发
电极厚度会影响锂离子的扩散路径和电池的内阻,孔隙率则影响电解液的浸润和锂离子的传输,活性物质的负载量直接关系到电池的能量密度和容量。通过合理的设计,可以在电池性能、成本和生产工艺等方面达到较好的平衡。完成上面的电池包时候,电池包还需要与车辆的底盘系统、车身系统等进行匹配,考虑电池系统的重量、重心位置等因素对车辆操控性、稳定性等方面的影响。锂离子电池在车用领域的安全和使用寿命受到多种因素的影响,而电池管理系统通过对这些因素的监测、管理和控制,在保障电池安全、延长电池寿命方面发挥着至关重要的作用。
2025-01-11 19:56:23
845
原创 BMS应用软件开发 — 3 电池系统的组成
C”是英文“Cell”的缩写,也就是俗称的“电芯”;但可惜的是,迄今为止在电芯端依然没有太多质的飞跃,也就是在能量密度上没有太多突破,所以,如何优化电池整包内部空间,尽可能塞下更多的电芯以提高电量,进而增加续航里程,就成为了目前电动车提高续航的主要手段,于是,就有了我们今天要聊的话题。看到这里大家不难发现,为了提升电动车的电池容量和空间利用率,各家的工程师真的是绞尽了脑汁,从早期的CTM到如今最为普及的CTP,后来又诞生出了更高集成度的CTC和CTB,只有专心钻研技术的车企,才能真正引领行业的发展。
2025-01-09 00:09:04
1197
原创 BMS应用软件开发 — 2 单体电池的基本结构和工作原理
负极由锂插层石墨构成,此时,负极中的锂离子会从石墨中脱离出来,成为自由的锂离子。失去的锂离子通过电解液向负极移动,就像归家的游子,最终嵌入到负极的锂插层石墨中。随着充电的进行,越来越多的锂离子回到负极,直到电池充满电,为下一次的放电过程做好准备。:正极材料通常由锂的金属氧化物构成,如锂钴氧化物(LiCoO2)、锂锰氧化物(LiMn2O4)、锂铁磷酸盐(LiFePO4)或锂镍锰钴氧化物(NMC)。:一种多孔的绝缘材料,如聚乙烯(PE)或聚丙烯(PP),它允许锂离子通过,但阻止电子通过,从而防止电池内部短路。
2025-01-06 23:26:46
705
原创 C缺陷与陷阱 — 8 编译与链接
静态链接在生成可执行文件时,会把程序所用到的函数库(比如标准 C 库、数学库等)中相关目标文件的代码和数据全部复制到可执行文件里面,即便它可能只调用了库中的少数几个函数,而动态链接则不同,动态链接的可执行文件中只是包含了对相应动态库中函数和变量等的引用信息,真正的函数库代码并不嵌入到可执行文件里。在这个过程中,像 printf 这类库符号所在的动态库(例如 libc.so 等)会在运行时被加载到程序的虚拟地址空间,使得程序可以找到并执行相应的函数,并且多个链接在一起的文件都可以访问到这些动态库中的符号。
2024-12-15 21:31:04
1101
原创 代码整洁之道 — 6 注释规范
在编写代码时,注释的质量至关重要。:可警告其他程序员可能出现的后果,虽现在有其他替代做法(如 JUnit4 里的@Ignore属性),但以前常用注释方式,且在合适场景下注释还是有用的,能避免一些不当做法。TODO只是暂时性的提醒注释,因此,定期检查这些注释,并删除那些已经不再需要的,是一个很好的习惯。这种注释风格在没有源代码控制系统(如git)的年代可能有一定的价值,但在现代开发实践中,它被认为是不必要的,甚至有害的。带有少量注释的整洁而有表达力的代码,要比带有大量注释的零碎而复杂的代码像样得多。
2024-12-15 12:13:55
1251
原创 代码整洁之道 — 4 变量与常量规范
首先,定义指针常量时会有点不同。这里期望 DOUBLE(num) 能将 num 的值翻倍,但由于宏替换后变成了 (3 + 4 * 2),按照 C 语言运算优先级,先计算乘法再计算加法,得到的结果是 11,而不是预期的 14。说明:系统启动阶段,使用全局变量前,要考虑到该全局变量在什么时候初始化,使用全局变量和初 始化全局变量,两者之间的时序关系,谁先谁后,一定要分析清楚,不然后果往往是低级而又灾难性 的。例如,对于16位的整数0x1234,在大端序存储中,0x12存储在低地址处,0x34存储在高地址处。
2024-12-15 11:55:36
559
原创 代码整洁之道 — 3 头文件规范
就我们的产品来说,依赖的方向应该是:产品依赖于平台,平台依赖于标准库。头文件循环依赖,指a.h包含b.h,b.h包含c.h,c.h包含a.h之类导致任何一个头文件修改,都 导致所有包含了a.h/b.h/c.h的代码全部重新编译一遍。很多系统中头文件包含关系复杂,开发人员为了省事起见,可能不会去一一钻研,直接包含一切想到的头文件,甚至有些产品干脆发布了一个god.h,其中包含了所有头文件,然后发布给各个项目组使用,这种只图一时省事的做法,导致整个系统的编译时间进一步恶化,并对后来人的维护造成了巨大的麻烦。
2024-12-15 11:48:19
1305
原创 代码整洁之道 — 1 代码总体原则
例如,一个简单的学生信息管理系统,将学生结构体和相关操作函数分开,模块之间接口要清晰,比如上述inputStudentInfo函数明确接收一个Student结构体指针作为输入,用来填充学生信息,displayStudentInfo函数接收一个Student结构体来展示其信息。写的代码越 多,意味着出错的地方越多,也就意味着代码的可靠性越低。例如,在进行位操作时,要确保代码在不同的字节序(大端序和小端序)的机器上都能正确运行。并遵循统一的命名风格,常见的是驼峰命名法或者下划线命名法,整个项目保持一致。
2024-12-15 10:41:10
438
原创 C缺陷与陷阱 — 3 深入理解表达式
成员函数 task_start_fn 的地址和 p++ 的值都是在调用之前计算的,但是它们的计算顺序是不确定的。这意味着 p++ 可能会在 task_start_fn 的地址被计算之前或之后执行,导致 task_start_fn 可能被调用时使用的是 p 的原始值或增加后的值,这是不可预测的。因此,b[i] 的运算会使用 i 的当前值,然后 i 的值会增加 1。编译器可能先计算fun1(),也可能先计算fun2(),由于x的结果依赖于函数fun1()、fun2()的计算次序,则上面的代码存在问题。
2024-12-10 22:14:53
787
原创 C缺陷与陷阱 — 9 可移植性缺陷
这是会失败的,因为在将字符c转换为无符号整数时,c将首先被转换为int型整数,而此时可能得到非预期的结果。如果要满足第2条性质,答案应该是-1,但如果是这样,余数就必定是-1,这样第3条性质就无法满足。这样,性质1和性质2就可以得到满足。然而,C语言的定义只保证了性质1,以及当a>=0且b>0时,保证 |r|=0.后面部分的保证与性质2或者性质3比较起来,限制性要弱得多。例如,对于32位的整数,n
2024-11-17 12:05:03
1154
1
原创 C缺陷与陷阱 — 5 深入理解函数与库函数
遗憾的是,事实总难遂人所愿,为了保持与过去不能同时进行读写操作的程序的向下兼容性,一个输入操作不能随后直接紧跟一个输出操作,反之亦然。因为()结合优先级高于*,*pf()也就是*(pf()),pf是一个函数,该函数的返回值类型为指向浮点数的指针。signal 函数允许程序为特定的信号指定一个信号处理函数,当进程接收到该信号时,将调用指定的函数。出错原因在于,在库函数调用没有失败的情况下,并没有强制要求库函数一定要设置errno为0,这样ermo的值就可能是前一个执行失败的库函数设置的值。
2024-11-17 11:53:41
664
原创 C缺陷与陷阱 — 7 内存管理进阶
同时释放一块内存的一部分是不允许的,动态分配的内存必须整块一起释放。这些错误包括对NULL指针进行解引用操作、对分配的内存进行操作时越过边界、释放并非动态分配的内存、试图释放一块动态分配的内存的一部分以及一块动态内存被释放之后被继续使用。是指程序中已分配的内存空间,在不再使用之后没有被正确释放或无法被再次使用,导致随着程序的运行,可用内存空间逐渐减少,最终可能耗尽系统内存,造成程序崩溃或系统性能下降。用于在堆(heap)上动态分配指定数量的字节,malloc 分配的内存是未初始化的,其内容是不确定的。
2024-11-17 11:01:25
726
原创 C缺陷与陷阱 — 6 指针与数组进阶
在堆上malloc或者new出来的地址空间,如果已经free或delete,那么此时堆上的内存已经被释放,但是指向该内存的指针如果没有人为的修改过,那么指针还会继续指向这段堆上已经被释放的内存,这时还通过该指针去访问堆上的内存,就会造成不可预知的结果,给程序带来隐患。这段实现可能存在一些问题,首先我们并不知道为r所指向的位置,此外r并没有分配足够的内存,使用strcy和strcat将会导致缓冲区溢出,r应该指向一个足够大的内存区域,以存储s和t字符串的复制或连接结果。用数组形式的记法经常会起到误导作用。
2024-11-17 10:45:03
937
原创 C缺陷与陷阱 — 4 深入理解声明与定义
typedef用于为已存在的类型定义一个新的名字,它是一个编译时的指令,由编译器处理,typedef定义的类型别名在编译时会进行类型检查。描述对象的类型,用于指代其他地方定义的对象,由于并未在声明中为数组分配内存,所以并不需要提供关于数组长度的信息。在C语言中,声明的基本格式遵循一种相对固定的结构,尽管根据声明的具体内容(如变量、数组、函数、指针等),格式会有所变化。2)在连续几个变量的声明中,用typedef定义的类型能够保证声明中所有的变量为为同一种类型,而用#define定义的类型则无法保证。
2024-11-17 10:27:53
642
原创 C缺陷与陷阱 — 2 运算符进阶
和 ,)存在规定的求值顺序。:用于表示单个字符常量,例如 'A' 表示大写字母A,'0' 表示数字0,单引号内的字符可以是任何有效的字符,包括字母、数字、空格、标点符号等,如果单引号内包含多于一个字符,或者没有字符,编译器会报错。在C语言中,按位与运算符&和按位或运算符|是位操作符号,&&和 || 是逻辑运算符号,在实际编程中,位运算符通常用于底层硬件操作或位字段的设置和清除,而逻辑运算符则用于控制程序的流程。可能本意是用x除以z所指向的值,把所得的商再赋给y,将上面的语句重写如下才是所表示的原意。
2024-11-17 10:09:59
661
原创 C缺陷与陷阱 — 1 数据类型与关键字
类似地,当函数在另一个文件中定义时,可以使用extern在需要调用该函数的文件中声明它。不过,对于函数来说,extern是隐含的,即使不显式声明extern,编译器也会假定函数是在其他地方定义的,除非它同时被声明和定义在同一个文件中。:在多个文件中共享全局变量时,通常在一个文件中定义变量(不加extern),而在其他需要使用该变量的文件中声明它(使用extern)。:在文件作用域(即全局作用域)中使用static关键字声明变量,该变量只在定义它的文件内部可见,这有助于避免不同文件之间的命名冲突。
2024-11-17 09:54:52
646
原创 代码整洁之道 — 2 函数规范
因此,在保持函数简短的情况下,偶尔使用return、break或continue语句是可以接受的,它们可以提高代码的表达力。为了提高代码的清晰度,我们应该按照自顶向下的顺序组织函数,每个函数都应该调用下一个抽象层级的函数,形成清晰的阅读路径。函数名和参数应该形成清晰的动词/名词对,这有助于解释函数的意图和参数的顺序,关键字形式的函数名可以减少记忆参数顺序的负担。避免使用布尔值作为标识参数,因为这会增加函数的复杂性,如果必须使用,应该考虑将函数拆分为两个或更多函数。2 switch语句。
2024-10-01 17:32:50
533
原创 代码整洁之道 — 1 命名规范
1.1 不同数据类型命名规范编程中不同数据的命名规范提高了代码的可读性和一致性。例如,常量和宏定义使用全大写字母,变量和函数采用小驼峰式,而结构体和枚举类型名则使用大驼峰式,这样的区分有助于识别代码中的不同元素。类型规范示例常量名全大写,单词间用下划线分隔变量名小驼峰式(首单词小写,后续单词首字母大写)函数名小驼峰式(同变量名)结构体名大驼峰式(所有单词首字母大写)联合体名大驼峰式(同结构体名)枚举类型名大驼峰式(同结构体名)Weekday宏定义。
2024-10-01 12:30:13
998
原创 FreeRTOS实战指南 — 3.2 FreeRTOS中链表的实现
TickType_t类型的变量,通常用于存储与节点相关的值,比如任务的优先级或者任务的等待时间等,可以帮助在排序链表时确定节点的顺序。xLIST_ITEM结构体定义了一个双向链表节点,它包含一个用于排序的辅助值、指向链表中前一个和后一个节点的指针、一个指向拥有该节点的内核对象的指针(通常是任务控制块TCB),以及一个指向该节点所属链表的指针。在初始化时,由于链表为空,索引指针指向最后一个节点,这样在添加第一个节点时,可以很容易地将其插入到链表的末尾。如果移除的节点是链表的索引节点,还会更新链表的索引。
2024-09-16 19:10:22
1091
原创 FreeRTOS实战指南 — 3.1 C语言链表
如果不是,遍历链表找到要删除的节点,然后根据节点的位置更新前驱和后继节点的指针,并释放要删除节点的内存。是链表的第一个节点,头节点的指针域指向第一个实际的数据节点,或者在空链表中为NULL。在没有头结点的链表中,如果要删除首元结点,需要更新头指针指向下一个节点,增加头结点后,对首元结点的插入和删除操作可以和其他节点的操作一样处理,无需特殊逻辑。头指针是一个特殊的指针,它指向链表的第一个结点的指针,若链表没有投结点,则头指针所指结点为链表的首元结点,如果链表为空,头指针通常被设置为null。
2024-09-16 11:28:41
1010
原创 FreeRTOS实战指南 — 2 移植 FreeRTOS 到 STM32F429
打开FreeRTOS源码,在“.\FreeRTOS\Demo”文件夹下面找到“CORTEX_M4F_STM32F407ZG-SK”这个文件夹(这里我们使用的是STM32F429,可以根据硬件平台选取相应的文件),双击打开,在其根目录下找到这个“FreeRTOSConfig.h”文件,然后拷贝到我们工程的user文件夹下即可。这里的值设置为1,空闲任务在执行完其必要的操作后,会调用taskYIELD()或taskYIELD_FROM_ISR()函数,从而让出CPU的控制权。(5) 重复定义中断服务函数错误。
2024-09-16 00:27:31
1418
原创 FreeRTOS实战指南 — 1 FreeRTOS简介
FreeRTOS源码中包含3个主要的文件夹,FreeRTOS文件夹包含了FreeRTOS内核的源代码和相关的头文件,这是FreeRTOS实时操作系统的核心部分,包括任务管理、时间管理、同步机制等功能的实现。FreeRTOS提供了丰富的任务管理、时间管理、同步和通信机制,同时保持了代码的简洁性和可维护性。FreeRTOS 包含 Demo 例程和内核源码,FreeRTOS 文件夹下的 Source 文件夹里面包含的是 FreeRTOS 内核的源代码,我们移植 FreeRTOS 的时候就需要这部分源代码;
2024-09-08 19:51:12
1381
原创 硬件电路入门 — 1 电阻
对于R1,一般芯片的SPEC会给出,最常见的是10K和100K,那你说47K行不行,当然也行,要看LDO CE管脚的灌电流能力,也就是5V加在R1上的电流需要小于CE管脚最大灌电流,如果太大,CE脚可能会烧毁。贴片电阻是一种设计用于贴装在印刷电路板(PCB)上的电阻器,贴片电阻相对于传统的色环电阻,色环电阻在使用时需要打通孔,贴片电阻不需要,占用更小的PCB面积。:前两个色环代表阻值的前两位数字,第三个色环表示乘数,即10的幂次,第四个色环表示公差(精度),通常金色表示±5%,银色表示±10%。
2024-08-24 15:44:48
1061
原创 LwIP入门实战 — 1 计算机网络简述
通信线路相连(速率通常在10Mbits以上),但地理上则局限在较小的范围(如1km 左右)在局域网发展的初期,一个学校或工厂往往只拥有一个局域网,但现在局域网己非常广泛地使用,学校或企业大都拥有许多个互连的局域网(这样的网络常称为校园网或企业网)。,规定了数据帧能被网卡接收的条件,最常见的方式是利用网卡的MAC地址,发送方会在欲发送的数据帧的首部加上接收方网卡的MAC地址信息,接收方只有监听到属于自己的MAC地址信息后,才会去接收并处理该数据。这些协议按照功能,可以划分为几个不同的层次,如图3所示。
2024-07-26 21:27:53
914
原创 IAR使用调试详解
1.1 File文件菜单文件菜单是比较常见的菜单,主要包含对文件的新建、打开、关闭、打印等一些常见的操作,在编辑和调试模式下完全一样。New:新建文件/工作空间 Ctrl + NOpen:打开文件/工作空间 Ctrl + OClose:关闭文件:保存工作空间:另存工作空间:关闭工作空间Save:保存文件 Ctrl + SSave As:另存文件Save All:保存所有文件/工作空间Page Setup:打印页面设置Print:打印 Ctrl + P:最近打开文件:最近打开工作空间。
2024-07-26 20:47:03
4745
1
原创 什么是CAN总线?
1.1 CAN是什么?CAN总线,全称为Controller Area Network,即控制器局域网,CAN 总线最初是由德国电气商博世公司开发,其最初动机就是为了解决现代汽车中庞大的电子控制系统之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。1.2 CAN总线特点可以多主方式工作,网络上任意一个节点均可以在任意时刻主动地向网络上的其他节点发送信息,而不分主从,通信方式灵活。系统柔软性。
2024-07-15 20:48:59
8025
1
原创 Git代码管理工具 — 4 Git分支详解
打开存在冲突的文件,Git会在冲突区域插入特殊的标记,需要手动编辑文件,决定保留哪个版本的文本,或者可能需要结合两个版本的内容。Git 分支允许你从当前开发线上分离出来,进行独立的开发工作,而不会影响主分支的稳定性,意味着多人协同开发而互不影响。: 当你尝试合并两个分支,如果存在冲突,Git会停止合并过程并告诉你哪些文件存在冲突。命令用于将两个分支的更改合并在一起,通常会将其他分支的更改合并回主分支(通常是。是Git命令的一个选项,用于删除已经完全合并的本地分支,这里的。
2024-07-14 18:24:05
1867
原创 Git代码管理工具 — 3 Git基本操作指令详解
目录1 获取本地仓库2 基础操作指令2.1 基础操作指令框架2.2 git status查看修改的状态2.3 git add添加工作区到暂存区2.4 提交暂存区到本地仓库2.5 git log查看提交日志2.6 git reflog查看已经删除的记录2.7 git reset版本回退2.8 添加文件至忽略列表要使用Git进行代码的版本控制,确实需要首先获取或创建一个本地仓库,步骤如下:1)创建本地仓库目录:在电脑创建一个新的文件夹,例如命名为这个文件夹将作为你的本地Git仓库。2)打开Git Bash:进入
2024-07-14 16:31:44
1298
原创 Git代码管理工具 — 1 什么是Git?
分布式版本控制系统没有“中央服务器”,每个开发者都有一个完整的本地仓库副本,工作时开发者可以在没有网络连接的情况下进行大部分版本控制操作,因为版本库就在你自己的电脑上,多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。Subversion(SVN)是一个开源的集中式版本控制系统,以其原子性提交、细粒度的权限控制和网络依赖性为特点,适用于需要集中管理代码和严格权限控制的项目环境,在处理大规模并行开发和频繁分支操作方面不如分布式版本控制系统灵活,目前使用较少。开发而开发的一个开放源码的。
2024-07-13 00:08:04
752
论文复现-计及碳捕集电厂低碳特性的含风电电力系统源-荷多时间尺度调度方法
2024-03-05
论文复现-碳交易机制下考虑需求响应的综合能源系统优化运行
2024-03-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人