- 博客(33)
- 资源 (7)
- 收藏
- 关注
转载 漫谈C变量——对齐
谈起变量的访问(Access)就不得不谈到对齐(Alignment)的概念;谈论对齐,离开具体的计算机架构又会显得缺乏支撑,如同谈论空中楼阁一般。今天我们就以笔者熟悉的Cortex-M架构为蓝本,聊一聊变量访问的对齐问题。1. What ? 在展开后续讨论之前,我们先来记住一个重要的结论,它是后续所有内容的立论之本:编译器倾向于根据变量的大小(size)将其放置在与其大...
2020-01-01 16:41:51
2069
转载 什么是Data Consistency?
什么是Data Consistency?吃完饭后不刷牙Vehicle攻城狮3月25日导文熟悉“吃完饭后不刷牙”的小伙伴,我这里应该不需要做过多介绍了,还不熟悉的速速将“汽车ECU设计”的公众号和“汽车控制器”的知乎专栏关注起来。什么是Data Consistency?要说明这个Data Consistency(数据一致性),我们首先举一个例子。如图有两个T...
2019-05-17 13:29:33
1253
转载 面向初学者的XCP——XCP协议的通信的构造和功能
原文链接:はじめてのXCP 面向初学者的XCP测量/校准协议XCP入门 第二章、XCP协议的通信的构造和功能接下来,将会说明“通用校准协议(XCP:Universal Calibration Protocol)”协议具体是如何通信的,以及XCP的功能和协议内容。 主从方式在XCP中,测量/校准的工具侧是“XCP主结点”,被测量的ECU侧是“XCP从结点”,采用所...
2018-07-23 21:27:53
1601
转载 基于XCP协议分析和理解
本篇文章主要从以下几个方面进行对XCP模块的讲解1.XCP用来做什么;2.XCP的工具简介;3.XCP的工作流程;4.XCP地址映射分析(软件与硬件方式);5.XCP的命令简介;6.XCP中的A2L文件简介;1.XCP用来做什么?在汽车电子软件开发中,经常会遇到需要在整车调试或者台架调试时才能确定的一些变量,这个时候就会用到XCP,例如电机控制器的PID参数,可能根据汽车的负...
2018-07-23 21:19:34
4091
转载 利用反电动势的过零点来测转子位置在讨论无转子位置
传感器的无刷直流永磁电动机的关键问题之前,我们先把无刷直流永磁电动机定义为:功率逆变器采用120°导通型半桥逆变电路;电动机运行时,永磁转子磁极在定子每相电枢绕组内感生呈梯形波的反电动势;驱动电压是准矩形波,电枢电流是梯形波;在360°电角度范围内电枢绕组换相(向)6次,每个导通状态持续60°电角度,从而在360°电角度的气隙范围内形成六步跳跃式旋转磁场;对于星形连接的三相电枢绕组而言,在运行过程...
2018-03-12 15:05:04
14797
2
转载 SVPWM算法原理及详解
1.概述 SVPWM是近年发展的一种比较新颖的控制方法,是由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波,能够使输出电流波形尽可能接近于理想的正弦波形。空间电压矢量PWM与传统的正弦PWM不同,它是从三相输出电压的整体效果出发,着眼于如何使电机获得理想圆形磁链轨迹。SVPWM技术与SPWM相比较,绕组电流波形的谐波成分小,使得电机转矩脉动降低,旋转磁场更逼近圆形...
2018-03-07 23:48:50
69484
11
转载 矢量控制(从源头上说得很透)
1、引言 你希望在你的新产品中使用无刷伺服电机吗?平时,我们可能也常碰到一些关键词,例如“梯形波式”,“正弦波式”和“矢量控制”。只有当你了解了他们的真正含义,才能在你的新设计中选择正确的产品。 在过去的十年甚至二十年中,伺服电机市场已经从有刷伺服转变成无刷伺服的市场,这主要是由无刷伺服的低维修率和高稳定性所决定的。在这十几年中,驱动部分在电路和系统方面的技术已发展的非常完善。控制方式...
2018-03-07 23:37:22
5619
转载 基于UDS的汽车通信故障诊断机制与处理策略
基于UDS的汽车通信故障诊断机制与处理策略 2015-06-10 22:12:34| 分类: AUTOSAR_|举报|字号 订阅 下载LOFTER我的照片书 |摘要:阐述一种诊断控制单元之间通信丢失故障的机制,通过基于UDS的诊断协议进
2018-01-20 23:12:31
17725
4
转载 Keil MDK下如何设置非零初始化变量
一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备。而keil mdk在默认情况下,任何形式的复位都会将RAM区的非初始化变量数据清零。如何设置非初始化数据变量不被零初始化,这是本篇文章所要探讨的。 在给出方法之前,先来了解一下代码和数据的存放规则、属性,以及复位后为何默认非初始化变量所在RAM都被
2017-12-16 16:52:46
730
转载 STM32启动过程解读与跟踪验证
近段时间由于在做ucos-iii的移植,所以就顺便了解下STM32的启动过程。经过查阅各种官方文献和对代码进行单步跟踪,详细地叙述了STM32加电启动的具体过程。对于关键性的语句都指明了出处。下面将学习成果分享给大家,由于笔者知识有限,不当之处敬请指出。 为了更好的说明问题,先来看STM32的内存映射(以STM32L1xx为例) 由于固
2017-12-16 16:29:21
531
转载 编写优质嵌入式C程序
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。转载请注明出处:http://blog.youkuaiyun.com/zhzht19861011/article/details/45508029摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析
2017-09-20 21:57:45
1959
转载 带有const修饰的指针解读
通过实例来看看const所修饰的指针使用方法: 1、 先看一个普通的指针使用。 形式:int *pTmp 含义:一个普通的指向int类型的指针[cpp] view plaincopyprint?int main(int argc, char *argv[]) { int i = 1;
2017-09-20 14:03:52
260
转载 编写优质嵌入式C程序
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。转载请注明出处:http://blog.youkuaiyun.com/zhzht19861011/article/details/45508029摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析
2017-08-13 13:24:21
2460
转载 MDK软件不能模拟仿真STM32的问题解决方法
MDK软件不能模拟仿真STM32的问题解决方法刘勇军,杨选成中山市中等专业学校,中山 528458摘要: 学习和使用RealView MDK开发工具及STM32等芯片时,如果每个系列芯片都要购买、制作评估板或开发板的话,经济条件不允许,也不现实。当然也可以在没有硬件的条件下,通过MDK软件的模拟仿真来学习STM32系列芯片的编程,但MDK软件对模拟仿真的支持不是很全面,大部
2017-05-06 22:25:48
4896
转载 单片机中的ROM,RAM和FLASH的作用
单片机中的ROM,RAM和FLASH的作用标签: ROMRAMFlash单片机运作原理2016-03-01 13:21 910人阅读 评论(0) 收藏 举报本文章已收录于: 嵌入式开发知识库 分类:微机原理(3) 版权声明:本文为博主原创文章,未经博主允许不得转载。本文部分参考自:http://blog.
2017-03-04 22:08:39
918
转载 STM32F0非对齐访问引起的硬件错误及其排除
前段时间在用STM32L0芯片时遇到一个硬件错误,主要是内存的非对齐访问导致的。注:CM3内核支持非对齐访问,而CM0不支持非对齐访问。先科普一下,什么是非对齐访问如上图所示,若要访问的变量是int、float、u32类型的(占4字节),则这些变量在内存中,只能以图中0、4、8为起始地址;若要访问的变量是u16类型的(占2字节),则这些变量在内存中,
2017-01-12 22:38:31
2005
转载 单片机程序是如何执行的_单片机达人解密:指令数据写哪了?
单片机的运行需要执行程序,同时硬件也是必不可少的,二者缺一不可。大家都知道单片机的运行需要执行写好的程序,但是单片机的指令数据都被写在了哪里?在哪读取指令?单片机达人给你解答技术难题。 让我们从最开始的环节讲起。在单片机上电的瞬间,MCU的程序指针PC会被初始化为上电复位时的地址,从哪个地址处读取将要执行的指令,由此程序在MCU上开始执行(当然在调用程序的main之前,还有一系列其他的的初始化
2016-12-26 22:03:39
4251
2
转载 设备地址与IO内存映射
在嵌入式编程中,绝大部分功能都是通过驱动外设实现的,这些外设不仅可以是CPU外部的某种功能模块,也可以是CPU芯片内部集成的某些器件。这些芯片内部的外设基本都是通过总线的方式与CPU核心相连,而对它们的控制也通过对这些总线上的外设寄存器的配置来实现。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。但是外设寄存
2016-12-20 17:01:19
559
转载 LMA(装载内存地址)与VMA(虚拟内存地址)
关于LMA和VMA,这个问题,有点点小复杂,不过,此处,我会把我的理解,尽量通过通俗的方式解释出来,以方便理解。当然,鄙人水平有限,难免有错,希望各位批评指正。 一般提及LMA和VMA,多数情况都是和ld,链接器相关的。在了解这两个名词的详细含义之前,有些基本知识和前提要说一下:[基础知识]1。从你写的源代码到执行你的程序,一般经历了这几个过程:源代码编辑 ->
2016-12-20 16:09:08
974
转载 代码覆盖率浅谈
在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。首先,让我们先来了解一下所谓的“代码覆盖率”。我找来了所谓的定义:代码覆盖率 = 代码的覆盖程度,一种度量方
2016-10-11 09:14:25
405
转载 stm32 设置systick中断抢先式优先级
最近使用STM32时希望将systick的中断优先级降低,但是CMSIS里给出的例子都是类似[plain] view plain copy NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreempt
2016-10-05 14:45:43
1050
转载 stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】
关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。 那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘: 刚接手STM32时,你只编写一个int main(){while(1);}BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-
2016-10-02 16:48:04
3495
转载 程序是如何执行的(三)函数调用
一、局部变量与全局变量 函数中出现的变量可以分为局部变量和全局变量,在函数内部定义的变量(没有global语句)就是局部变量,只有在函数内部才能够使用它们。在函数外定义的变量就是全局变量全局变量的作用是增加了函数间数据联系的渠道,全局变量在全部执行过程中都占用存储单元,如果在同一个源文件中,局部变量和全局变量同名,则在局部变量的作用范围内全局变量被屏蔽即它不起作用。 静
2016-10-02 15:08:39
714
转载 更改函数的返回地址
这是网络安全老师布置的实验,觉得是大学以来做过的最有意思的一个实验。Task Description:C语言编写程序,包含一个函数,改变函数的返回地址,使函数返回后跳转到某个指定的指令位置,而不是函数调用后紧跟的位置。先上代码:#include void foo(){ int a, *p; p = (int*)((int)&a + 8);
2016-10-02 15:05:32
804
1
转载 进入OS前的两步之PendSV(任务切换)
先了解下如何使用PendSV异常。(为何要使用PendSV而不是其他的异常,请参考《cortex-M3权威指南》)1,如何设定PendSV优先级?NVIC_SYSPRI14 EQU 0xE000ED22NVIC_PENDSV_PRI EQU 0xFF LDR R0, =NVIC_SYSPRI14 LDR R1, =NVIC_PENDSV_PRI
2016-10-01 22:39:48
2863
转载 Violate的应用和作用
以前也是知道violate 的作用,是可变的意思,因为变量可能发生意想不到的变化,用到的时候一定要用最新的数据, 因为很多编译器在编译程序的过程是对程序进行优化,以提高运行效率,这就可能出现这样的情况,用的到变量值不是最新的,而是已经存在在缓存中的值,这样就可能出现莫名其妙的错误,所以对一些易变的变量,加上violate 修饰,编译器在编译过程中就不会对读写这个变量就不会进行优化,
2016-09-07 11:19:21
1104
转载 C/C++不同文件夹下包含头文件的方法及#include的使用
本文主要介绍了如何不同文件夹下使用预处理器指示符#include。假设我们有如下一个工程,其中包含了几个源代码文件和头文件。其中main.c是主源代码文件,里面包含main函数。在base中包含:func3.h,func3.c,文件夹main和文件夹func4在main中包含:main.c,func1.h,func1.c和文件夹func2。在func2中包含:func2.h
2016-09-04 22:04:10
3234
转载 SST25VF080B SPI接口FLASH STM32驱动
所有的FLASHA 都一样只能从1变0,要想从0变1 只有擦除一个页扇, SST25VF080B 最小可以擦除4KB的页 速度也不错 50MHz 容量1MB 挺够用的 10万次的擦写寿命。最低2.7V 就可正常工作。Flexible Erase Capability– Uniform 4 KByte sectors– Uniform 32 KByte overlay b
2016-09-04 17:46:00
2268
转载 STM32从Flash地址0x08000000的启动重映射
在初写STM32程序时,遇到一个困惑,STM32的Flash在MDK里被设置为起始地址0x0800 0000,而CM3手册规定芯片复位时要从0x0000 0000地址开始取出中断向量 ,那STM32怎么样执行代码呢?地址重映射?或者在0x0000 0000里有对应有实际存储器?仔细阅读手册,发现这件事是因为STM32设计的Flash起始地址是在0x0800 0000位置开始的。全部代码都只
2016-09-03 15:00:21
2795
1
转载 关于ISP、IAP、DFU和bootloader
这是嵌入式开发中常用的几个专业术语,其诞生的背景和其具体作用大概如下在很久很久以前,那是8051单片机流行的时代,做单片机开发都需要一个专用工具,就是单片机的编程器,或者叫烧写器。说“烧”写一点不为过,当年的经典芯片AT89C51在编程时需要十几伏的高电压,加在一个特定的引脚上,才能进入编程。对于某款芯片的编程,都有一个特定的时序,这个时序通常在芯片的datasheet里进行描
2016-09-03 14:44:01
4119
转载 浅谈上、下拉电阻的作用
浅谈上、下拉电阻的作用上下拉电阻:1、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于CMOS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。2、OC门电路必须加上拉电阻,以提高输出的高电平值。3、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。4、在CMOS芯片上,为了防止静电造成损
2016-08-17 22:04:02
13997
转载 sizeof使用
1. 定义:sizeof是何方神圣sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with avariable or a type (includin
2016-07-31 11:11:44
283
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人