怀孕25周怎样区分风热感冒风寒感冒转为风热感冒和病毒感冒

后使用快捷导航没有帐号?
中国汽车工程师之家--聚集了汽车行业80%专业人士&
论坛口号:知无不言,言无不尽!QQ:&
本站手机访问:直接在浏览器中输入本站域名即可&
本站广告咨询
微信:cartech8_cq
电话:023-
,CAN,MOST
谁能解释一下!
该用户从未签到
发表于 26-3-:18
& & & && &
& &&& & &&
& & && & & &
LIN& &,CAN,MOST&&对这几个新鲜的东西不是很了解,研究了半天弄的我直迷糊``&&有知道的吗?期待高手祥解!!!~
& & & & & & & & & &&
扫描订阅汽车工程师之家 & & & & & & & & & 汽车行业通信录-设计制造
& & & &微信公共账号 & & & & & & & & & & & & & & & & & & &零部件采购销售
上汽维修群
卡车维修群
该用户从未签到
发表于 27-3-:52
你说的是几种数据线&&LIN是比较早CAN是目前流行的一种MOST是未来的发展趋势。它们是汽车的网络线实现各个模块之间的通讯
该用户从未签到
发表于 27-3-:48
MOST,2楼给解释一下吧!脑袋跟不上了,我刚接触到CAN
该用户从未签到
发表于 28-3-:32
回复 2楼 jacsjl 的帖子
你好!&&谢谢你的回复,但是 我还不是很理解。能详细说说吗/。?&&LIN&&和CAN的结构和原理有什么不同?
该用户从未签到
发表于 3-4-:42
大家所说的就是汽车单片机的内容
还有就是车在网络,这些都是以后汽车发展的方向,CAN&&LIN只是里面的几个名词,
该用户从未签到
发表于 3-4-:24
大家可以学习下
LIN总线:一种用于车体控制应用的新兴标准
本地互连网络(LIN)是一种用于汽车中分布电子系统的新型低成本串行通讯系统,它是现有汽车多重传输网络的补充。LIN瞄准一些低端应用,在这些应用中每个节点的通讯成本都必须大大低于CAN而且不需要CAN的高性能、高带宽和多功能。LIN相对于CAN的成本节省主要是由于采用单线传输、硅片中硬件或软件的低实现成本和无需在从属节点中使用石英或陶瓷谐振器。
LIN是关于汽车本地互连网络的一个总体通讯概念。该规范包含协议的定义、物理层以及用于开发工具和应用软件的接口定义。对于不需要控制器局域网络(CAN)的高带宽和多种功能的应用,LIN实现了一种具有成本效益的智能传感器和执行器的通讯方式。这种通讯是基于串行通讯接口(SCI)、数据格式、单宿主/多从概念、单线12V总线和没有稳定时间基的节点的时钟同步。低端多路通讯的汽车标准不久前才出现。LIN协会开发了一个串行低成本通讯概念和开发环境的标准,采用这个标准,汽车制造商及其供应商能以非常经济的方式创建、实现和处理复杂的分层化多路复用系统。
LIN规范包含传输协议、传输介质以及用于开发工具和应用软件的接口。LIN在硬件和软件方面支持网络节点的互操作性并具有可预测的电磁兼容(EMC)行为。这个概念可以实现无缝的开发和设计工具链并提高了开发速度和网络的可靠性。
LIN瞄准一些低端应用,在这些应用中每个节点的通讯成本都必须大大低于CAN而且不需要CAN的高性能、高带宽和多功能。LIN相对于CAN的成本节省主要是由于采用单线传输、硅片中硬件或软件的低实现成本和无需在从属节点中使用石英或陶瓷谐振器。这些优点是以较低的带宽和受局限的单宿主总线访问方法为代价的。
在一个中央式车体控制系统中,执行机构和传感器依靠CAN的连接能力使用硬连线与一个电子控制单元(ECU)相连接。ECU通过CAN通讯线路同其它主要ECU交换信号。如果本地执行器和传感器要求高计算性能则应选择硬连线。在本地性能要求不高的系统中,可以用基于智能执行器和传感器的分布系统来代替。选择这种划分方式是为了采用通用元件来实现可伸缩的系统架构。
如果用于本地智能和联网的附加成本可以通过生产和开发的成本节省得到补偿,这个架构是经济实用的。这个架构得以实施的关键是子总线LIN标准、低成本的机电装配和半导体集成。
LIN总线典型的应用是诸如车门、导向轮、座位、马达、气候控制、照明、雨水传感器、智能擦抹器、智能发电机、开关板或RF接收器等构件。我们可以很容易地把这些构件连接到汽车网络并接入各种类型的诊断和服务。通常使用的信号模拟编码可以用数字信号替换从而使线束得以优化。
LIN是一种基于通用SCI(UART)字节字接口的单线串行通讯协议。目前几乎所有微控制器都配有低成本的UART接口模块。LIN也可以使用软件代码或纯状态机来实现。在LIN中,媒体访问由宿主节点控制而不需要从属节点的仲裁或冲突管理,因而可以使最坏情况下的信号传输延迟时间得到保证。
同步机制是LIN的一个特殊特性,它允许通过从属节点恢复时钟而不需要石英或陶瓷谐振器。线驱动器和接收器的规范遵循有所增强的ISO 9141单线标准。最大传输速度为20kbps,这是根据EMC和时钟同步要求而定。
除了宿主节点的命名之外,LIN网络中的节点不使用有关系统设置的任何信息。我们可以在不要求其它从属节点改变硬件和软件的情况下向LIN 中增加节点。由于识别码数量较少(64)和传输速度相对较低,LIN的规模通常在12个节点之下(尽管并不局限于此)。时钟同步、简单的UART通讯和单线介质是保证LIN经济性的主要因素。
LIN包含一个宿主节点和一个或多个从属节点。所有节点都包含一个被分解为发送和接收任务的从属通讯任务,而宿主节点还包含一个附加的宿主发送任务。在实时LIN中,通讯总是由宿主任务发起的。
宿主节点发送一个包含同步中断、同步字节和消息识别码的消息报头。从属任务在收到和过滤识别码后被激活并开始消息响应的传输。响应包含两个、四个或八个数据字节和一个检查和(checksum)字节。报头和响应部分组成一个消息帧。
消息的识别码指明了消息的内容而不是目的地。这个通讯概念使我们能以多种方式实现数据交换:从宿主节点(使用其从属任务)到一个或多个从属节点,从从属节点到宿主节点和/或其它从属节点。直接从从属节点到从属节点发送信号而无须通过宿主节点路由或从宿主节点向网络的所有节点广播消息也是可能的。消息帧的序列由宿主节点控制。在宿主节点调度帧中,消息的数目、序列和频率由波特率、系统响应时间和时间行为来决定。在系统设计过程中,必须周密考虑各种情况,因为如果宿主节点丢失了一个从属节点消息,由于主从概念,这个消息将只能最早在下一个调度序列到达宿主节点。
LIN协议在每一个消息帧启动时提供一个专用的同步模式,允许不带有石英或陶瓷谐振器的从属节点将其本地时间基与宿主节点的时间基同步。
LIN总线是单线,通过从电池正极Vbat的端接电阻向导线或总线供电。总线收发器是ISO 9141标准的一个增强实现。该总线可以采用两个互补的逻辑电平:接近于地的电压显性值(dominant value)表示逻辑“0”,电压接近于电池供电电压的隐性值(recessive value)表示逻辑“1”。
该总线的端接部分使用1k(在宿主节点)和30k(在从属节点)的上拉电阻。从属节点的端接电容通常为220pF。
LIN物理层规范对收发器提出了很高的要求。收发器的开关必须不干扰其它电子元件。要满足汽车制造商的EMC要求,必须采取一些特殊的措施,例如,可以使用波形整形或边缘修整技术来减少收发器的辐射。
LIN总线系统实例:车门和镜子
汽车车门电子功能的不断增加使之成为一个使用LIN总线的很好应用实例。在保持相同设计和对其余从属节点硬件和软件没有任何影响的情况下,功能可以随意增减。随着开发过程中和汽车LIN组装的最后阶段功能或选项的增长。它可实现
预组装和预测试模块的集成。车门LIN簇中的功能有:带/不带防夹的车窗升起;马达PWM控制;车窗位置监控;门锁执行器控制,包括马达控制(死锁)和门开接触控制;开关面板控制和开关照明。
镜子功能可被集成到一个或更多个LIN从属节点上。这些功能包括:镜子上下、进出马达控制;加热;水坑灯;转向灯;减少刺眼现象(电镀彩色镜,ECM)等。
带CAN接口和USART/增强USART的高性能8位控制器应能满足宿主节点的需求。存储器需求和封装尺寸要求取决于软件功能、CAN软件堆栈和硬件I/O需求。在这个例子中,从属节点功能可由低性能8位控制器实现。
从属节点的实现
根据LIN从属节点应用的复杂性和从微控制器的预算,LIN可用软件方式实现,也可以使用标准的USART、EUSART或专用的LIN硬件来实现。
用纯软件来实现开关板、温度传感器和LED显示器等低复杂性的系统。这种最低成本方案的实现是以相对较高的CPU负载为代价。包含一个片上RC振荡器和物理收发器接口的PIC16C433是微控制器方案的一个例子,它提供了一个高度集成的低成本LIN方案。
LIN协议的关键特性之一是使用低成本振荡器的从属节点的同步能力。LIN规范容许从属节点的不同步时钟偏差为15%。如果时钟偏差超过15%,宿主节点将发送一个数值为零的数据字节,这个字节将会被从属节点识别为同步中断(Sync Break)。为实现正确通讯,从属节点必须有能力重新同步并在LIN帧的时间内保持稳定(同步偏差低于2%)。
这个要求可以使用半导体制造商在微处理器上实现的可校准的内部RC振荡器来满足。内部振荡器依据温度和电压变化调整振荡频率。
LIN标准包含传输协议、传输介质、开发工具之间的接口和用于软件编程的接口。LIN在硬件和软件方面保证网络节点的互操作性和EMC行为的可预测性。
LIN总线以较低的成本满足了车体控制应用的要求并有助于执行器和传感器设计的标准化和复用性。使用LIN总线规范2.0,支持即插即用已成为可能。
LIN标准已经被许多汽车制造商采纳。目前,汽车制造商已经在使用LIN总线系统进行系列化生产。工具制造商、半导体供应商和第三方软件供应商已经提供了大量的工具、硬件和软件。通过定义良好的开发过程和元件一
热心人士【论坛口号→知无不言,言无不尽】
该用户从未签到
发表于 6-4-:44
这么好的东西竟然没人理睬
该用户从未签到
发表于 8-5-:47
总线技术很先进,被一些技术厂家和整车厂作为推销的噱头。
其实总线技术并不神秘,简单说总线技术就相当于我们生活中连接不同地点的道路。
我们设计道路的根据是:成本,交通量,行走的是人还是车还是混合的,连接地的距离,时间要求,安全要求等,所以:
对于普通的乡村,小马路够了,坑坑洼洼也没有关系,只要能走人;
而连接镇之间的,要柏油路了,道路要宽一点,供行人和车混用;
而连接城市之间用省级公路,甚至高速公路,可能是双向,四车道,六车道等;还有加装红绿灯和提示板,以及摄像头,还有有护栏;提高速度,确保安全;
连接省之间用铁路,航空,等等。运输量大,确保安全。
总线技术基本上可以类似这种思想,
如果是零件间连总线都省了,直接用硬线连接;
如果是零件和控制器之间,基本上用硬线连接;有时也会用总线;例如UART,RS232,K-LINE,LIN,ect
实时性要求不高,但有一定数据量,或有不少信号需要共享,则用低速的总线;例如LIN,低速CAN(LIN 和 CAN有多种不同的速率可供选择)
实时性要求高,而且涉及安全的,则用高速的总线;例如高速CAN;
要求再高,数据量更大的,则总线要求会更高。例如MOST;
分这么多,主要因为:技术发展的自然规律,成本,传输的速率,传输的距离,信号的量,防错,抗干扰等等。对于总线本身的技术,不是这个专业的,不必花时间全部了解,懂点基础知识足够。再花时间了解也没有什么用,因为绝大多数技术,全世界也就那么几家掌握。我们只要知道怎么用它们就足够了。
这个问题问的很好,有空我整理一下思路,写个专门的文章来讲述。
回帖有奖【论坛口号→知无不言,言无不尽】
发动机QQ群:
电动车QQ群:
底盘QQ群:
工作时间:9:30-17:00
客服热线:023-
官方微信扫一扫
站务中心QQ:
GMT+8, 21-6-
Powered by问个只要用Cortex-M单片机都会遇到的问题,关于堆栈的!!
我的图书馆
问个只要用Cortex-M单片机都会遇到的问题,关于堆栈的!!
下面一段话是看本论坛上的一位大侠说的:
MSP的位置 = 全局变量数+HEAP_SIZE+Stack_Size。
KEIL编译器对RAM的排列方式(地址由低到高):
& & 1、全局变量(包括已初始化的变量和没初始化的变量);
& & 2、Heap所占的空间;
& & 3、主Stack所占空间;
首先,我认为这段话肯定是对的,应该没有问题,,,
可是,我不明白的是:编译器根据下面两段代码,就能知道我定义的存储区是堆栈吗???
Stack_Size& && &EQU& &&&0x0200;
& && && && && & AREA& & STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem& && & SPACE& &Stack_Size
__initial_sp& &
Heap_Size& && & EQU& &&&0x000;
& && && && && & AREA& & HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem& && &&&SPACE& &Heap_Size
__heap_limit
SPACE伪指令是汇编语言中用于定义内存空间的,可是,编译器怎么知道我定义的Stack_Mem存储区是栈空间呢???难道是根据这个存储区的名字叫:Stack_Mem来判断的吗???发完帖子就发现,自己问了一个愚蠢的问题:
AREA& & STACK, NOINIT, READWRITE, ALIGN=3
AREA& & HEAP, NOINIT, READWRITE, ALIGN=3
这个问题一点也不愚蠢啊,反倒是红色的两个名字会愚弄人呢!是时候揭开它们的假面具了。
STACK, HEAP只是两个section的名字。程序就是由各种代码和数据section组成的,最后由链接器排开并生成一个映像文件。这两个名字没有特殊的法力,很有欺骗性啊。不信的话,你把它改成你和你女朋友的名字也可以的!
不是因为名字叫"STACK", "HEAP"就人如其名了。事实上,关键的一句是
__initial_sp (顶格写的,而且必须顶格写)
这个标号,它最终会被链接器解析成这个名为STACK的section结束后的地址。往下看向量表的定义,第一条就是
__Vectors& & & & & & & & DCD& & & & & & & & __initial_sp
这才是确定了MSP的初始值为__initial_sp
堆也是一样,"HEAP"这个名字并不能赋予这个区神奇的力量,而是看前呼后拥的"__heap_base"和"__heap_limit",它们这两个标号最后变成两个地址,可想而知,就是堆的起止范围!
在启动文件的最后有一个汇编例程,用于和C语言库对接,才初始化了HEAP。
说句题外话,在MDK中的确有些名字是可以有特殊功能的,比如
AREA& & |.ARM.__at_0x02FC|, CODE, READONLY
这里的"|.ARM.__at_0x02FC|"也是个名字,不过它指定了地址。这是MDK的特有功能。不过,往往成事不足败事有余,建议还是不要招惹它。
Defining __initial_sp, __heap_base and __heap_limit
One of several methods you can use to specify the initial stack pointer and heap bounds is to define the following symbols:
__initial_sp
__heap_base
__heap_limit.
You can define these symbols in an assembly language file, or by using the embedded assembler in C.
For example:
__asm void dummy_function(void)
& & EXPORT __initial_sp
& & EXPORT __heap_base
& & EXPORT __heap_limit
__initial_sp EQU STACK_BASE
__heap_base EQU HEAP_BASE
__heap_limit EQU (HEAP_BASE + HEAP_SIZE)
The constants STACK_BASE, HEAP_BASE and HEAP_SIZE can be defined in a header file, for example stack.h, as follows:
/* stack.h */
#define HEAP_BASE 0x&&/* Example memory addresses */
#define STACK_BASE 0x
#define HEAP_SIZE ((STACK_BASE-HEAP_BASE)/2)
#define STACK_SIZE ((STACK_BASE-HEAP_BASE)/2)
This method of specifying the initial stack pointer and heap bounds is supported by both the standard C library (standardlib) and the micro C library (microlib).
Stack pointer initialization and heap bounds
The C library requires you to specify where the stack pointer begins. If you intend to use ARM library functions that use the heap, for example, malloc(), calloc(), or if you define argc and argv command-line arguments for main(), the C library also requires you to specify which region of memory the heap is intially expected to use.
The region of memory used by the heap can be extended at a later stage of program execution, if required.
You can specify where the stack pointer begins, and which region of memory the heap is intially expected to use, with any of the following methods:
Define the symbol __intial_sp to point to the top of the stack. If using the heap, also define symbols __heap_base and __heap_limit.
首先,非常感想您的回复,您说的都是对的,我验证过,把section的名字从STACK改为其他的字符串,堆栈的分配照样进行,并且是正确的。。也就是,如您所说:STACK只是一个很简单的section name,没有什么特殊的含义或是神奇的力量,HEAP也一样。。。但是,我想说的是:您回答的问题,并不是我问的问题,,,我问的问题是,我在startup.s文件中写下了如下代码:Stack_Size& && &EQU& &&&0x0200;& && && && && & AREA& & STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem& && & SPACE& &Stack_Size__initial_sp很显然,编译器知道我要定义一个512字节的Section,此Section的名字叫STACK,并且应该把这个Section放到RAM里面去。。。可是,链接器并不知道我定义的这个Section是用来当堆栈用的啊,至少我没告诉连接器或是编译器,这个Section是用来当堆栈使用的;或者说:我不知道我是怎么告诉链接器的。。。既然连接器不知道这个Section是用来当堆栈使用的。。那么,连接器怎么知道一定要把这个Section放到所有全局变量的后面去呢???连接器完全可以把这个Section随便放一个地方啊,比如,从0x处分配一块512字节的RAM内存给名字叫做STACK的Section。。。可是,我们知道,连接器没有这么做,它总是把这个Section放到所有的全局变量后面去,显然,这是因为连接器知道上面的代码定义的那个Section是用来当栈使用的,,可是,我是怎么在代码里面告诉连接器,名字叫STACK的Section是要用来当堆栈的呢???仔细看看上面那一堆的代码,既然STACK只是一个名字,一个很普通的名字,那么好像有点特殊的就只剩下“__initial_sp”了,再看下面的一段代码:& && && && && & EXPORT&&__initial_sp& && && && && & EXPORT&&__heap_base& && && && && & EXPORT&&__heap_limit“__initial_sp”竟然需要EXPORT,也就是说:编译器或者库函数可以使用这个“字符串”,看来这个东西确实比较特殊。。。。我在Keil的Help里面查找了一下__initial_sp,果然查到了不少东西,可是我现在看不太懂帮助里面说的都是些什么,我还在努力的看,,,感觉应该就是__initial_sp 使得连接器知道,前面定义的那个RAM中的Section是用来当作堆栈用的,,,One of several methods you can use to specify the initial stack pointer and heap bounds is to define the following symbols:__initial_sp__heap_base__heap_limit.”“The C library requires you to specify where the stack pointer begins.”仔细研读这几句话,我认为,他们的意思是说:我们需要定义几个符号来把堆栈的地址和边界告诉库函数!!!所以,您这段话依然不是回答我问题的答案。。。我具体问的问题是什么,您可以看一下6楼的帖子。。。。简单来说:连接器是怎么知道要把名字叫做STACK的Section放到所有全局变量的后面去的,难道连接器知道这个Section是要当作栈存储区来使用的???那链接器又是怎么知道的呢???
TA的最新馆藏

我要回帖

更多关于 风寒感冒转成风热感冒 的文章

 

随机推荐