首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CAN协议栈(二) 之对ISO11898-1的理解

在详细讲ISO11898-1之前先来了解一下汽车CAN通信网络中常用的几个协议都处于OSI模型的什么位置。 图1 OSI模型 物理层定义了比特流的一些性质及电气特性,不在本文讨论范围内故跳过。...媒体访问控制(Medium Access Control,MAC):定义了数据帧如何在介质上进行传输,我们知道CAN属于广播式的总线,MAC就分配了帧在信道上的使用权。...图3 层级间交互示意图 >>>> CAN的特点 1.基于多主优先级的总线访问 总线空闲时,任何节点都可以发送数据。...帧间隔 >>>> LLC子层 本地过滤 过载通知 错误恢复管理 LLC层有2种服务: 数据帧传输 远程帧传输 LLC层帧结构: 1.数据帧 图8 数据帧结构 2.远程帧 图9 远程帧结构 MAC层对帧优先级进行了仲裁发送给...以上均是笔者自己的理解,如有错误欢迎指正。

2.1K21

浅谈我对DDD领域驱动设计的理解

DDD切入点1 - 理解概念 DDD的全称为Domain-driven Design,即领域驱动设计。...要理解什么是领域驱动设计,首先要理解什么是领域,什么是设计,还有驱动是什么意思,什么驱动什么。 什么是领域(Domain)?...从领域和代码实现的角度来理解,领域模型绑定了领域和代码实现,确保了最终的代码实现就一定是解决了领域中的核心问题的。因为:1)领域驱动领域模型设计;2)领域模型驱动代码实现。...之所以我们觉得子域划分很简单,是因为我们对整个大领域非常了解了。如果我们遇到一个冷门的领域,就没办法这么容易的去划分子域了。这就需要我们先去努力理解领域内的知识。...所以,千万不要以为会DDD了就以为自己很牛逼,实际上你会的只是软件设计中的冰山一角而已。 总结 本文的重点是基于我个人对DDD的一些理解,希望能整理出一些自己总结出来的一些感悟和经验,并分享给大家。

1.3K101
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CAN通信协议栈(四) 之对ISO14229的理解

    ISO14229是UDS诊断应用层的协议,定义了诊断服务的实现步骤及具体的诊断服务定义。...):每个回复信息中都必须包含的 可选择的(Optional):回复类型可选 供应商自行定义的(Manufacturer/Supplier Specific):根据OEM或者供应商需求自行定义的回复类型...图5 服务响应规则示意 (2)子服务请求及响应规则 如下图所示: 图6 子服务请求及响应规则示意 (3)物理寻址方式请求服务及响应 物理寻址在之前介绍过,是一对一的通信。...图7 物理寻址方式请求子服务及响应规则示意 图8 物理寻址方式请求(无子服务)及响应规则示意 (4)功能寻址方式请求服务及响应 功能寻址是一对多的通信。...图9 功能寻址方式请求子服务及响应规则示意 图10 功能寻址方式请求(无子服务)及响应规则示意 物理寻址和功能寻址方式的ID主机厂会在CAN matrix定义好,这里不需要我们自己去区别,只需知道哪些是物理寻址方式的

    2.2K40

    Linux 对函数库的理解

    一、前言 我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?...会的。 库如果被取缔了,我们会受到影响吗?会的。 在实现库函数跳转的时候我们要耗费时间吗?要的。 动态链接的优点: 形成的可执行程序小!这样可以节省资源 -- 内存,磁盘,网络。...三、在Linux下库的命名 1.动态库 我们直接编译一个文件,之后用file指令查看编出的 test 可执行文件,这里可以看到 dynamically linked ,翻译成中文就是动态链接的意思。...其中XXX就是库的名字,我们可以看到上面的库的名字是c,所以链接的是c标准库。 用这个库的程序非常多,但是库只有一份,所有有C语言写的程序,不会出现重复的代码! 因为,动态库是一个共享库。...系统给我们提供 标准库的 .h(告诉我们怎么用),动静态库 .so/.a 我们的代码 + 库的代码 = 可执行程序! 这一套只在Linux下有效吗?在windows下原理也是一样的!

    89630

    【Linux】对进程地址空间的理解

    一、关于进程地址空间的简单理解 进程地址空间其实是分了很多个区域的,区域划分的本质就是区域内的各个地址都是可以使用的。...如同下面这个图所示: 无论是环境变量的地址还是环境变量表的地址,所存放的地址都在栈的上部。这里的已初始化数据和未初始化数据是指的全局变量,包括静态变量(静态变量默认被初始化为0)。...进程地址空间不是真实的物理内存,叫做虚拟内存。每一个进程都有自己独立的PCB,也有自己独立的地址空间。在32位机器下,进程地址空间的大小为[0,4GB]。...进程地址空间和真实的物理内存之间有一个叫做页表的结构,页表存放的就是虚拟内存到物理内存之间的映射关系,所以通过虚拟内存经过一定步骤就可以访问到真实物理内存中的内容。...物理内存可以在任意一个空闲的合法的位置进行申请,一个进程申请的物理内存可以是无序的,但一旦映射到页表中就跟有序的虚拟地址产生了一一对应的关系,将物理内存从无序变成有序。

    17610

    【Linux】对信号产生的内核级理解

    一、键盘产生信号  键盘产生信号这里就要涉及一个重要的概念了,叫硬件中断。我这里会粗粒度地说一下键盘产生信号,以及信号被上层软件读到的过程,只是说一下我自己的理解。...1.2、键盘产生信号并被读取的过程 在CPU上是有各个针脚的,每个针脚有对应的编号。针脚在主板上是可以和键盘进行连接的。...CPU有寄存器能记录是几号(我觉得可以理解成数组下标)针脚触发了高电平。然后CPU就可以根据寄存器中的数字在中断向量表中找到对应数组下标中的读取键盘数据的方法。操作系统就去读取键盘上输入的数据。...信号发送给进程后进程PCB中其实是用一个32位的整数来保存收到的信号的,也就是说,信号是以位图的形式被保存起来的。...假设我们要修改空指针里的内容,将保存在eax寄存器中的空指针的地址(虚拟地址)和CR3寄存器中的基地址到MMU中进行映射,发现页表中根本就没有空指针的虚拟地址到物理地址之间的转换关系(或者是其它情况,有转换关系但是页表项的权限为只读权限但你却要做修改

    12410

    对 Node.js 事件驱动模型的深入理解

    本文主要讨论以下问题:1.Node.js 的事件驱动模型分析2.Node.js 如何处理高并发请求?...3.Node.js 的缺点介绍先简单介绍一下 Node.js,Node.js 是基于事件驱动、非阻塞 I/O 模型的服务器端 JavaScript 运行环境,是基于 Google 的 V8 引擎在服务器端运行的单线程...一、Node.js 事件驱动模型分析看懂上图之后,你就明白 Node.js 的事件驱动模型了,从上图中我们可以看到以下几个部分:Application 应用层,也就是 JavaScript 交互层,是...如果你理解了最后一个问题,就好理解了。如果要总结的话,就是异步无阻塞编程的思想。当遇到耗时的操作时,会以异步非阻塞的方式进入事件队列,不会影响后续请求的执行。...以上方式减少了高并发的等待时间,让高并发可以从容应对。三、Node.js 的缺点介绍通过上面的介绍,我们知道了 Node.js 的事件驱动模型,下面我们将介绍 Node.js 的不足之处。

    74450

    对DDD(领域驱动设计)分层架构的理解(适合新人)

    这种DDD项目结构和之前的有哪些不同,我该如何开发我的代码,开发不同职责的代码该放在哪里?下面就我的理解,说一说DDD的分层架构。...传统开发分层 传统的数据驱动开发模式,View、Service、dao这种三层分层模式,我们会很自然的写出过程式代码,这种开发方式中的对象只是数据载体,而没有行为,是一种贫血对象模型。...以数据为中心,以数据库ER图为设计驱动,分层架构在这种开发模式下可以认为是数据处理和实现的过程。 image.png 什么是DDD?...DDD 全称是 Domain-Driven Design,中文叫领域驱动设计,是一套应对复杂软件系统分析和设计的面向对象建模方法论。...对于同一个概念 8.聚合: 聚合概念类似于包的概念,每个包里包含一类实体或者行为,它有助于分散系统复杂性,也是一种高层次的抽象,可以简化对领域模型的理解。

    2K10

    对linux系统中“平均负载”的理解

    最近在极客时间学习了倪朋飞老师的《Linux性能优化实战》专题,里面讲到了linux的平均负载这个概念。也就是load average。现在谈谈对平均负载的理解,并整理为笔记。...对,没有看错,这里说的是平均的进程数量,与CPU本身的使用率没有直接关系。这个load averages实际上表示的是系统中的平均活跃进程数。...因此,我们可以讲系统的平均负载理解为单位时间内的平均的活跃进程数。 那么我们如果需要知道一个服务器上负载究竟是多少合适呢?...从这个趋势来看,系统的整体负载在降低。 按照课程的经验值,通常情况下,当平均负载高于CPU数量70%的时候,就应该对负载进行排查了,一旦系统负载过高,可能对整体服务的性能造成影响。...sysstat包含了常用的linux性能工具。用于监控和分析系统性能。

    1K20

    CAN底层驱动数据的传输注意事项

    现在CAN通讯可以说是得到了越来越多的应用,从汽车到工业,到农业等等行业和产品都在使用,而CAN通信也从经典CAN-CANFD-CANXL,一路在发展和更新,因为使用的比较多所以经常关注CAN的发展,但经典...CAN还是使用最多和最频繁的,在底层驱动中,我们要注意数据的传输。...如我们在读取CAN数据帧的时候需要做调整,我们以NXP的 Kinetis系列为例子, ? 同样在发送传输的时候,也要做调整。 ?...关于完整的CAN底层驱动可以在公众号搜索,多次有介绍,包括高层协议栈的开发和应用。...现在的充电桩,工业控制,机器人等农机等产品大量使用CAN通信,所以 CAN通信对于底层嵌入式工程师来说是必须掌握的一种通信 为了更好的服务大家,特做个小调查,望大家踊跃参加

    61620

    linux | 对静态路由理解与测试

    静态路由 静态路由使用的原因多种多样,当没有到目的IP地址的动态路由时经常使用静态路由,或者用于覆盖动态获知的路由。 默认情况下,静态路由的管理距离为 1,因此优先于来自任何动态路由协议的路由。...RELATED— 请求新连接但属于现有连接一部分的数据包,例如连接端口为 20 的被动 FTP 连接,但传输端口可以是任何未使用的端口 1024 或更高。...INVALID— 不属于连接跟踪表中任何连接的数据包。 您可以对任何网络协议使用连接跟踪的有状态功能iptables,即使该协议本身是无状态的(例如 UDP)。...: -A 在规则链的末尾加入新规则 -i 网卡名称 匹配从这块网卡流入的数据 -o 网卡名称 匹配从这块网卡流出的数据 -m state 匹配状态 -j 跳转到指定的目标。...valid_lft forever preferred_lft forever https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux

    1.7K30

    【Linux】对进程PCB的理解&&查看进程信息的方法

    一、学习准备:对操作系统工作模式的理解 首先我们要清楚的是,操作系统是一个进行软硬件资源管理的软件。操作系统对下要管理好底层硬件。...每一个硬件的生产产商都会给他们的产品提供对应的驱动程序,驱动程序是特定于某一硬件或系统设备的软件组件,它为系统提供管理硬件的各种功能。...当软件需要实现某些功能,而这些功能无法通过应用程序单独实现或难以实现时,驱动程序就能派上用场。操作系统通过驱动程序对底层的硬件进行管理。         ...进一步的说,正是对系统调用函数进行了封装,才使诸如C语言,C++等各种编程语言具有了跨平台性,我上层同样都是调用printf函数,在linux操作系统下我就去调用linux下的系统调用函数(封装在C标准库...下面是计算机的层状结构图: 二、进程的理解 可执行程序被加载到内存,加载的是程序的代码和数据,可是操作系统并不认识哪些代码和数据对应哪些进程。

    23510

    对GC的理解

    而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来。...因为年轻代中的对象基本都是朝生夕死的(80%以上),所以在年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面...这个时候,“From”和“To”会交换他们的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。不管怎样,都会保证名为To的Survivor区域是空的。...频发的Full GC消耗的时间是非常可观的,这一点会影响大型程序的执行和响应速度,更不要说某些连接会因为超时发生连接错误了。...碎片化带来的风险是极大的,严重影响Java程序的性能。堆空间被散布的对象占据不连续的内存,最直接的结果就是,堆中没有足够大的连续内存空间,接下去如果程序需要给一个内存需求很大的对象分配内存。。。

    1.1K40

    对vite的理解

    对vite的理解快速的冷启动"快速的冷启动"指的是在开发过程中,当你启动应用程序或重新启动开发服务器时,Vite 能够迅速加载应用程序。...即时的热模块替换(HMR)即时的热模块替换(HMR)是指在开发过程中,当你对代码进行修改后,Vite 能够实时更新修改的模块,而无需完全刷新整个页面或重新加载整个应用程序。...Vite 的预解析(Pre-Bundling)"Vite 的预解析"是指在构建阶段对项目的源码进行静态分析和预处理,以提前解析模块的依赖关系和生成优化的代码块,从而提高构建性能和减少启动延迟。...Vite 利用了现代浏览器对 ES 模块的原生支持,可以通过静态分析和预处理源码,提前解析模块的依赖关系,从而减少构建时的工作量和时间。...3、优化的代码块生成:根据模块的依赖关系,Vite 会生成优化的代码块(Code Splitting),将相关的模块打包到同一个代码块中。这样可以提高代码的加载效率,减少不必要的网络请求。

    28670

    对less的理解

    我对less的理解: less是写css时可以采用的另一种写法,用less的格式写出来的东西,可以通过编译器编译成css。也就是可以使用某种方法,把less文件变成css文件。...编译成的css文件和平时自己写的css没什么区别,浏览器自动可读 好处 使用less而不是直接写css有几个好处: less使用常量的形式保存一个值,哪里用到这个常量都行,这个常量的作用域应该是这个less...(这里的常量类似于js的变量,只是常量定义了之后不能动态修改值)。 编译后可以是压缩后的css,这样就不用自己压缩啦。 选择器嵌套写法。...据说这种方法是官方推荐的,就是你的less和你的html、js是没有关联的,html中直接引用编译好的css就行。...这种方法据说官方最不推荐, 在编译完成之前,body的宽度会被设为0,我也不知道为什么,但实际就是这样。 可以使用外部设置的变量。

    1K20

    对Activit的理解

    对Activit和工作流的理解 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。...工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。...就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。...而手工处理工作流程,一方面无法对整个流程状况进行有效跟踪、了解,另一方面难免会出现人为的失误和时间上的延时导致效率低下,特别是无法进行量化统计,不利于查询、报表及绩效评估。...Activit如何使用 部署activiti Activiti是一个工作流引擎(其实就是一堆jar包API),业务系统使用activiti来对系统的业务流程进行自动化管理,为了方便业务系统访问(操作)activiti

    1K30

    对PBC的理解

    最近有几次关于PBC的培训,部门内也在搞一些实践,PBC的全称是Packaged Business Capabilities,感觉每个人对PBC的理解都有差别,我也在思考PBC是什么?...我对PBC有什么深入的思考,以及如果让我去构建BPC的时候,我会怎么做。整理一下自己对PBC的理解,希望可以抛砖引玉。 PBC是什么?...咨询公司gartner对PBC定义为:Packaged business capabilities (PBCs) are software components representing a well-defined...需要被业务人员理解和识别,可被组装,复用的能力模块。 PBC也是一种能力,但什么是能力呢?能力是能够顺利完成某些活动所必须具备的一组功能。...可能会有的想法是低代码解决不了复杂的业务问题,但是业务流程处理,大的业务流程包含小的业务流程,低代码能不能解决业务问题,在于流程梳理的够不够清楚。

    1.1K11
    领券