- 博客(28)
- 收藏
- 关注
原创 如何写出让 CPU 跑得更快的代码
面试官:如何写出让 CPU 跑得更快的代码?转载自:小林coding作者:小林coding前言代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能。CPU 内部嵌入了 CPU Cache(高速缓存),它的存储容量很小,但是离 CPU 核心很近,所以缓存的读写速度是极快的,那么如果 CPU 运算时,直接从 CPU Cache 读取数据,而不是从内存的话,运算速度就会很快。但是,
2020-10-23 10:01:40 416
原创 CAN总线终端电阻的作用?为什么是120Ω?为什么是0.25W?
CAN总线终端电阻,一般来说都是120欧姆,实际上在设计的时候,也是两个60欧姆的电阻串起来,而总线上一般有两个120Ω的节点,基本上稍微知道点CAN总线的人都知道这个道理。但是作为学渣的我,知道这个是在各种标准以及各种数据手册和应用笔记里面常用的电阻值,但是这两个终端电阻的具体作用是什么呢?之前就知道阻抗匹配,但是究竟匹配的是什么呢?然后我就上知乎遨游了一下,半抄半写的总结了下面的这些知识点。知道终端电阻的作用,对于日常工作中波形不稳定等问题,也能更快的找到问题的原因。终端电阻的作用C
2020-09-29 17:48:55 41935 4
原创 C++重载函数是什么意思?和运算符重载有区别吗?
很多疑问都是想不通那东西具体用于什么地方。比如我初学 C++ 时,早就知道指针实际就是某个变量的地址,就是不知道具体怎么用。这感觉就仿佛学数学,我知道某定理,也知道某定理的证明是对的,但我就是不知道这东西有什么用。直到学数据结构,接触到链表,才突然明白指针。所以语法只是初步,更重要的是要想明白遇到什么问题了,才需要有那个语法。之后再进一步,去探究具体实现。去想想...
2020-03-13 20:27:13 2178
原创 关于嵌入式 Qt 最全最棒的教程(万字干货)
重要:本文摘自致远电子出品书籍《嵌入式Linux开发教程》,本教程凝聚了ZLG致远电子嵌入式工程师的心血,任何形式的转载请务必标注此段文字!!!整理排版:付斌,来源:ZLG致远电子,作者:致远电子常见的嵌入式Linux图形界面有Qt/Embedded、DirectFB、MicroWindows/NanoX、MiniGUI和OpenGUI等,每个GUI都有各自不同特点和应用场...
2020-03-02 20:43:24 21364
原创 AUTOSAR网络管理
1 网络管理组成部分网络管理部分由通信管理器(简称ComM),通用网络管理器接口(简称NmIf),总线相关的网络管理器(简称NM,包括CanNM,LinNM,FrNM),总线相关的状态管理器(简称SM,包括CanSM,LinSM,FrSM)四个模块构成。1.1ComM 模块ComM模块简化用户对通信栈的使用,包括对网络管理使用的简化,同时协调一个ECU上多个独立的软件对总线通信模型的分...
2020-02-23 14:45:35 1964
原创 复位流程
复位流程在离开复位状态后,Cortex-M 做的第一件事就是读取下列两个 32 位整数的值:1、从地址 0x0000,0000 处取出 MSP 的初始值。</li>2、从地址 0x0000,0004 处取出 PC 的初始值——这个值是复位向量,LSB 必须是1,然后从这个值所对应的地址处取指。图 1.1 复位序列.jpg在 0 地址处提供 MSP 的初始值,然后紧跟...
2020-02-22 20:49:42 1628
原创 何时使用嵌入式OS及任务划分
什么时候该使用OS?前面我们介绍了嵌入式基于OS的软件设计和基于前后台系统的软件设计,那麽在什么情况下需要使用OS呢?我发现有好多开发人员把OS用于项目的开发,都有一种心态,似乎他们的系统只有使用过OS才是高明的系统,才是有技术含量的系统,完全没有考虑过应用实际。我要说的是一个系统的设计的高明与否,不是看你有没有使用OS,而是你的设计是否简单,简单能让你开发时间更短,简单能让你的系统更好维护。...
2020-02-22 17:55:44 469
原创 资深码农谈:嵌入式C语言可靠性设计之我见
前言设备的可靠性涉及多个方面:稳定的硬件、优秀的软件架构、严格的测试以及市场和时间的检验等等。这里着重谈一下对嵌入式软件可靠性设计的一些理解,通过一定的技巧和方法提高软件可靠性。这里所说的嵌入式设备,是指使用单片机、ARM7、Cortex-M0,M3之类为核心的测控或工控系统。嵌入式软件可靠性设计应该从防错、判错和容错三方面进行考虑. 此外,还需理解自己所使用的编译器特性。...
2020-02-22 16:44:27 726
原创 Security Onboard Communication-SecOC
一、通讯加密的必要性随着汽车电子的发展及整车功能复杂性的提高,车载控制器数量从之前的寥寥几个增加至规模复杂的上百个。基于功能的需求,各个控制器每时每刻需要进行大量数据的交互,数据交互的方式也多种多样,比如Lin、CAN、CANFD、FlexRay 、车载Ethernet等。其中成本低、可靠性高、应用普遍的有Lin、CAN通讯,而FlexRay、车载Ethernet等基于成本因素,目前主...
2020-02-16 21:03:50 3912
原创 GPIO输入与输出设置
GPIO(也称为通用输入/输出)是控制器中最简单也是最重要的配置。但即便如此,IO也有各种各样的类型和配置选项,有输入,输出,上拉,下拉,推挽等。虽然我们天天都和它打交道,但是你真的了解其中的配置吗?输入模式通常,GPIO输入主要通过以下三种方式之一进行配置:● 高阻抗(Hi-Z,也称为浮动floating)● 上拉(Pull-up,内部电阻连接到VCC)● 下拉(Pull...
2020-02-16 20:50:32 5434
原创 汽车控制器(ECU)中DTC的状态位
从汽车ECU中读取储存的DTC(故障码)时,除了故障码本身,还可以读出很多其他的信息,包括优先级、发生次数计数器、发生时的里程和时间,以及本文中所讲的状态位(DTC status )。这个状态位包含1个byte,这里面的8个bit都有各自的含义,但是这8个 bit不一定都要使用,各个主机厂可以根据自己的需求使用其中的几个,当然也可以全部使用。下图是UDS对DTC status这8个bit的定...
2020-02-10 10:29:19 1241
原创 AUTOSAR故障Debounce策略
—— 摘要 ——本文针对Dem模块的故障debounce【1】策略进行讲解。故障诊断是由Dem模块和SWC共同完成的,如下图1所示,SWC中的Monitor Function对故障条件进行实时监控,并实时将故障条件的判定结果反馈至Dem模块判断是否发生故障,如图2所示。图1 SWC与Dem模块图2 Dem_SetEventStatus调用示意图故障诊...
2020-02-10 10:27:09 3671 1
原创 AUTOSAR的故障存储策略
在AUTOSAR的Dem模块中提供了DemEventDisplacementStrategy配置选项用于选择不同故障数据存储策略,分别为DEM_DISPLACEMENT_NONE,DEM_DISPLACEMENT_PRIO_OCC,DEM_DISPLACEMENT_FULL。当故障存储策略选择为DEM_DISPLACEMENT_NONE,如果故障数据存储区存满时,新发生故障的数据不会被存储;当...
2020-02-10 10:25:57 1869
原创 AUTOSAR DCM
AUTOSAR诊断协议栈包含DCM和DEM两个模块,其中DEM负责DTC相关的参数实现(诊断Dem模块介绍),而DCM模模块主要实现UDS和OBD的诊断服务,就是实现之前UDS文章提到的服务和OBD相关的服务。DCM模块主要负责处理诊断数据流和管理诊断状态,包括诊断会话和安全状态,DCM模块能检查诊断服务的请求是否满足条件。DCM在AUTOSAR架构中的概略图如图1所示。图1D...
2020-02-10 10:24:08 4956
原创 AUTOSAR DEM
——摘要——本文主要介绍Dem模块,针部分配置选项进行介绍。Dem全称为Diagnostic Event Manager,负责故障事件的处理、故障数据的存储和管理。简单说其功能是故障事件确认前的故障debounce,故障事件确认时的故障数据存储,故障发生后的故障老化、故障替代(AUTOSAR的故障存储策略)。AUTOSAR标准中对Dem模块最上层分了两菜单栏(参见图1),分别是DemC...
2020-02-10 10:22:06 7893
原创 浅析Cortex-M系统堆栈机制
今天给大家分享的这篇依旧是2016年之前痞子衡写的技术文档,花了点时间重新编排了一下格式。前面痞子衡讲过《嵌入式里的堆栈原理》,本篇算是堆栈原理的工程实践,更具体点说是在ARM Cortex-M上的应用。ARM Cortex-M家族发展至今已经很多代,我们且以最简单的Cortex-M0为例来讲述堆栈机制:1.基本规则1.1 R13 / sp寄存器 R0-R12为通用寄存器,...
2020-02-07 12:08:37 3422
转载 三极管使用详解
PNP型的三极管使用方法常见的三极管为9012、s8550、9013、s8050.单片机应用电路中三极管主要的作用就是开关作用。其中9012与8550为pnp型三极管,可以通用。其中9013与8050为npn型三极管,可以通用。PNP与NPN两种三极管各引脚的表示:三极管在我们数字电路和模拟电路中都有大量的应用,在我们开发板上也用了多个三极管。在我们板子上的 LED 小灯部分,就有这个三...
2019-07-11 10:25:35 5471
转载 CAN通信的位定时与同步
1 位定时1.1 比特率和波特率1) . 位速率:又叫做比特率(bit rata)、信息传输率,表示的是单位时间内,总线上传输的信息量,即每秒能够传输的二进制位的数量,单位是bit per second。2)波特率:又叫做传码率、信号传输率,表示的是单位时间内传输的码元的数量,当两相调制时,一个码元用一个二进制位表示,此时波特率在数值上和比特率是一样的,CAN总线正是两项调制这种情况。...
2019-05-21 19:02:37 5233
转载 S32K144之FlexMem,FlexNVM,FlexRAM,System RAM, SRAM 区别与联系
参考手册中常常见到有关memory的关键字,如FlexMem,FlexNVM,FlexRAM,System RAM, SRAM,那么它们到底是什么意思呢?有什么区别和联系?参考资料[1]S32K144参考手册[2]FlexNVM Memory应用笔记:AN12003[3]EEPROM Functionality应用笔记:AN119831.汇总2.简...
2019-04-02 14:21:31 2969
转载 (*(void(*)())0) ()讲解
(*(void(*)())0) () 等同((void(*)())0) () ----原因函数是一种function-to-pointer的方式,&fun, fun, *fun ,**fun都是一样硬件地址跳到0处(*(void(*)())0)();预备知识float (*h)();表示h是一个指向返回值float类型的函数的指针(float...
2019-03-22 13:50:22 1380
转载 浅谈嵌入式MCU软件开发之startup过程详解(从复位向量到main函数之前的准备工作)
引言 一般工程师都怕研究MCU的startup过程,其原因可能有:1.觉得没有必要,startup的过程和启动代码在新建工程时,并且已经默认加入并配置好,能够保证MCU正常工作,只要关系main()函数开始的用户程序就好(这其实对于大部分工程师来说确实如此);2. Startup过程往往需要一定的MCU内核CPU汇编指令知识,很多对内核寄存器/堆栈指针的初始化、I/D-ca...
2019-01-17 16:53:48 3245
转载 怎样写Makefile文件(C语言部分)
本文摘抄自“跟我一起写Makefile ”,只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器。 原文请看这里:http://wiki.ubuntu.org.cn/%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile 写完之后才发现基本上都是一些比较枯燥的规则,看看一、二、八三个部分就可以了。当作参考工具...
2018-10-16 16:27:32 819
转载 区块链概述---如何简单的理解区块链技术
区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。 如果说蒸汽机释放了人们的生产力,电力解决了人们基本的生活需求,互联网彻底改变了信息传递的方式,那么区块链作为构造信任的机器,将可能彻底改变整个人类社会价值传递的方式。以前是靠信誉、靠百年老店、权威机构等,区块链利用技术建立了新的信任方式,这是可以被量化的,从技术的角度实现的,所以说区块链成为了下一个信任的基石。区块链最核...
2018-10-11 10:34:11 238
转载 C语言中.h和.c文件解析
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件) 4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然...
2018-10-11 10:16:57 531
转载 extern使用方法总结!
Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记:声明可以多次,定义只能一次。 函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的。但是引用的时候一样是需要声明的。 而全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译...
2018-10-08 16:30:44 1056
转载 C/C++程序的内存分配
一、内存分配方式:静态分配方式:是指在程序编译和链接的时候分配固定的存储空间的方式。动态分配方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。 静态内存分配是在程序执行之前进行的因而效率比较高,而动态内存分配则可以灵活的处理未知数目的。静态与动态内存分配的主要区别如下:静态对象是有名字的变量,可以直接对其进行操作;动态对象是没有名字的变量,需要通过指针间接地对它进...
2018-09-19 17:36:57 450
转载 main.c如何转为可执行文件
1、main.o不能直接运行的原因: 源代码文件(.c)—> 预编译(.i)—>编译(.s)—>汇编(.o), 经过这个过程生成.obj(.o)目标文件,即文件通过预处理后进行一系列的词法分析、语义分析、语法分析及优化后生成相应的汇编代码文件,继而由汇编器将汇编代码转变成机器可以执行的指令得到目标文件。一个源文件生成一个目标代码,因此目标文件也可视为模块。 虽然这个目标文件...
2018-09-12 14:29:50 1740
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人