[AutoSar]BSW_Com010 CAN IF 模块介绍

目录

  • 关键词
  • 平台说明
  • 一、CAN IF 所在架构位置
  • 二、CAN interface 简介
  • 三、CAN interface 主要功能描述
    • 3.1 CANIF 被调用方式
      • 3.1.1 中断模式
      • 3.1.2 轮询模式
      • 3.1.3 混合模式
    • 3.2 Hardware object handles(HO)
    • 3.4 Dynamic L-PDUs
      • 3.4.1 Dynamic Transmit L-PDUs
      • 3.4.2 Dynamic receive L-PDUs
    • 3.5 Physical channel view
    • 3.6 CAN Hardware Unit
    • 3.7 BasicCAN and FullCAN reception
    • 3.8 Initialization
    • 3.9 Transmit request
    • 3.10 Transmit data flow
    • 3.11 Transmit buffering
      • 3.11.1 General behavior
      • 3.11.2 Storage of L-PDUs in the transmit L-PDU buffer
      • 3.11.3 Initialization of transmit L-PDU buffers
    • 3.12 Transmit confirmation
    • 3.13 Receive data flow
    • 3.14 Receive indication
    • 3.15 Read received data
    • 3.16 Read Tx/Rx notification status
    • 3.17 Data integrity
    • 3.18 CAN Controller Mode
      • 3.18.1 CAN Controller Operation Modes
      • 3.18.2 Controller Mode Transitions
      • 3.18.4 Wake-up
        • 3.18.4.1 Wake-up detection
        • 3.18.4.2 Wake-up Validation
    • 3.19 PDU channel mode control
      • 3.19.1 PDU channel modes
    • 3.20 Software receive filter
      • 3.20.1 Software filtering concept
    • 3.21 Data Length Check

  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1

在这里插入图片描述
>>>>>回到总目录<<<<<<

一、CAN IF 所在架构位置

在这里插入图片描述
在这里插入图片描述

二、CAN interface 简介

  如上图所示,CAN interface 简称canif,位于下层的 CAN 物理层(CAN Driver + CAN transceiver) 与上层的 CAN 服务层 (CAN sm +CAN NM)CAN 协议层(CAN TP + PDUR)之间。
CANif 独立于硬件,提供了统一的接口来管理CAN 物理层的设备,同时可以结合CAN SM 模块来管理所有的内外部CAN driver 和CAN transceiver,实现对他们的状态改变。
  在PDU 的接收和传输中,向上层可以通知发送确认(transmit confirm),接收指示(Rxindication())将下层的PCI 和SDU打包传递给上层。向下可以将SUD 分发给驱动。

支持功能:
1.CAN Interface 初始化
2.Transmit confirmation
3.Transmit buffer
4.Receive indication
5.DLC check
6.CAN FD support
7.Communication Modes
8.BusOff detection
9.External wakeup
10.Wakeup validation
11.Multiple CAN Driver support

三、CAN interface 主要功能描述

3.1 CANIF 被调用方式

3.1.1 中断模式

  CanIf services 在CAN driver 产生的中断中被调用。

3.1.2 轮询模式

  CanIf services 在Can_MainFunction_XX (XX = Write/read/busoff/wakeup/transceiver)中被调用。

3.1.3 混合模式

  例如:full can 用 中断,basic can 用轮询。

3.2 Hardware object handles(HO)

  用于发送(HTH)和接收(HRH)的硬件对象句柄(HOH)表示对CAN邮箱结构的抽象引用,该结构包含CAN相关参数,如CanId, DLC和数据。基于CAN硬件缓冲区抽象,每个硬件对象在CAN if中被引用,而不依赖于CAN硬件缓冲区的布局。HOH在CanDrv的接口服务调用中用作参数,由CanDrv的配置提供,并由CanDrv用作CAN邮箱通信缓冲区的标识符。
  CanIf仅作为硬件对象句柄的用户,但不根据硬件特定信息对其进行解释。因此CanIf仍然独立于硬件。
在这里插入图片描述
3.3 Static L-PDUs
  CanIf为上层提供了对CAN L-SDU相关数据的通用访问.
  CanIf应将每个L-PDU只分配给一个CAN控制器。因此,禁止将单个l - pdu分配给多个CAN控制器。
  CanIf支持激活和反激活属于一个CAN Controller 所有的 l - pdu CAN控制器用于发送和接收。

3.4 Dynamic L-PDUs

  CANIF 支持 通过CanIfRxPduCanIdMask 来过滤ID。

3.4.1 Dynamic Transmit L-PDUs

  Dynamic Transmit L-PDUs的定义:允许在运行时重新配置CanId (CanIfTxPduType)或将ID或其部分作为L-SDU的元数据。

3.4.2 Dynamic receive L-PDUs

Dynamic receive L-PDUs的定义:与一组Can Id对应的l -PDU,其中实际接收到的Can Id作为PDU数据的一部分提供给上层。

3.5 Physical channel view

  一个Physical channel 是由一个 CAN Controller 和一个 CAN Transceiver连接组成的。一个或多个Physical channel 连接到一个网络。
  CanIf提供服务来控制所有CAN设备,例如CAN Controllers and CAN和Transceivers。CanSm使用这些api 服务向ComM提供网络观察结果,用于执行连接到单个网络的所有物理通道的唤醒和睡眠请求。
canIf传递由CanDrv和CanTrcv分别为每个物理通道提供的状态信息作为向上传递到CanSm的状态信息。
  CanIf模块提供的Controller_Id,ID是对CanDrv instances的抽象,ID从0开始。
在这里插入图片描述

  CanIf模块提供的Transceiver_Id,ID是对CanTrcv instances的抽象,ID从0开始。
在这里插入图片描述
  CanSm 通过上述抽象出来的ID 来讲通知与下面的 CanDrv CanTrcv 关联。
在这里插入图片描述
  由于CANIF 独立于硬件层,所以canif 不会关心 下面连接的是哪类硬件(高速can或者低速CAN ),有几个硬件。
在这里插入图片描述

3.6 CAN Hardware Unit

  CAN Hardware Unit 由一个或多个相同类型的CAN控制器模块组成,这些模块可以位于芯片上,也可以作为外部独立设备。每一个 CAN Hardware Unit 由相应的CanDrv提供服务.
  如果不同的CAN Controllers被使用,那么不同类型的CanDrvs就会被使用,但是CanIf模块提供了统一的API。CanIf模块在配置中收集了CAN Controller以及Hardware Objects的抽象信息(object ID,类型等)
在这里插入图片描述

3.7 BasicCAN and FullCAN reception

[AutoSar]BSW_Com09 CAN driver 模块FULL(BASIC)CAN、FIFO选择

3.8 Initialization

通过CanIf_Init() 初始化。

3.9 Transmit request

CanIf模块提供CanIf_Transmit()公共接口给上层模块(CAN TP 、PDUR 等),用来传递L-PDU。上层模块只能通过CanIf_Transmit()接口来启动数据传输服务,而不能直接访问CAN driver。

调用CanIf_Transmit()接口的时候,CanIf模块执行下述的Action:
  检查,初始化CanIf模块状态
  识别CanDrv(有多个CanDrvs被使用)
  确定访问CAN硬件传输对象的HTH
  调用CanDrv的Can_Write()函数
  传输成功返回E_OK

3.10 Transmit data flow

[AutoSar]BSW_Com06 CAN报文应用层到Can总线的函数调用
传输服务CanIf_Transmit()是基于L-PDUs的。通过L-PDU数据结构中L-SDU ID和指向L-SDU数据的指针可以访问/获取L-SDU数据。
CanIf存储关于为发送任务配置的可用硬件对象的信息。函数CanIf_Transmit()将CanTxPduId映射到相应的HTH并调用函数Can_Write()。
在这里插入图片描述

3.11 Transmit buffering

3.11.1 General behavior

  在CanIf的作用域中,传输进程以调用CanIf_Transmit()开始,并以调用上层模块的回调服务结束 < User_TxConfirmation >()。在发送过程中,CanIf、CanDrv和CAN Mailbox应将只发送一次的L-PDU存储在一个位置。根据传输方法的不同,它们是: Can硬件发送邮箱或者是CanIf模块中L-PDU发送buffer(如果发送缓存使能了)。
  对于触发传输,CanIf只需要存储给定L-PDU的传输请求,而不需要存储其数据。当HTH空闲(再次空闲)时,通过触发传输函数及时获取数据。传输的单个Tx L-PDU的请求不应存储两次。这种行为与CAN网络上通常的周期性通信方式相对应。
  如果发送缓冲被启用,CanIf将在CanIf发送L-PDU缓冲区(CanIfBufferCfg)中存储一个Tx L-PDU,如果它在发送请求时被canrv拒绝。

3.11.2 Storage of L-PDUs in the transmit L-PDU buffer

如果CanDrv在调用Can_Write()时返回CAN_BUSY, CanIf尝试只在发送L-PDU缓冲区中存储一个新的发送L-PDU或它的发送请求。

3.11.3 Initialization of transmit L-PDU buffers

  CanIf_Init()函数被调用后,CanIf完成发送L-PDU Buffer的初始化。

3.12 Transmit confirmation

  如果之前的传输请求成功完成,CanDrv通过调用CanIf_TxConfirmation()将其通知给CanIf。

3.13 Receive data flow

  根据AUTOSAR基本软件架构,接收到的数据将在上层通信栈(即AUTOSAR COM、CanNm、CanTp、DCM)中进行评估和处理。这意味着,上层模块既不能与CanDrv (Rx)的缓冲区一起工作(即改变),也不能访问CanIf (Tx)的缓冲区.
  只有当CanIf_PUBLIC_READRXPDU_DATA_API设置为TRUE时,CanIf才能在接收路径中提供内部缓冲。
  如果新接收到一个L-PDU, CanDrv调用CanIf的CanIf_RxIndication()。L-PDU特定数据的访问由以下参数实现: 硬件接收句柄(HRH),接收CAN ID,接收CAN数据长度,接收到的L-PDU数据的引用(指针)。
  CAN硬件接收对象被锁定,直到数据复制到临时或上层模块缓冲区的过程结束。在CanIf的CanIf_RxIndication()返回后,硬件对象将立即被释放,以避免数据丢失。

[AutoSar]BSW_Com07 CAN报文接收流程的函数调用

3.14 Receive indication

  对CanIf_RxIndication()的调用在其参数中引用了一个新接收到的CAN L-PDU。如果调用了CanIf_RxIndication()函数,CanIf将评估CAN L-PDU是否接受,并为上层通信层随后的访问准备L-SDU。如果配置了该CAN L-PDU,并且该CAN L-PDU被成功检测并接受进行进一步处理,则CanIf使用<User_RxIndication>()通知上层模块关于此异步事件。
  如果CanTrv中调用CanIf_RxIndication函数,CanIf执行一下操作:
  软件过滤(可配置)
  DLC检查(可配置)
  缓冲区接收L-SDU(可配置)
  调用上层提供的接收通知回调函数(可配置)

3.15 Read received data

  读接收数据接口CanIf_ReadRxPduData()是上层模块读取最近从CAN网络接收到的CAN l - sdu的通用接口。上层模块仅通过CanIf服务发起接收请求,而不直接访问CanDrv。如果CanIf将收到的L-SDU写入上层模块I-PDU缓冲区,则表示接收请求成功完成。

3.16 Read Tx/Rx notification status

  除了通知回调函数,CanIf提供API服务CanIf_ReadTxNotifStatus()来读取任何发送L-SDU的发送确认状态,并提供API服务CanIf_ReadRxNotifStatus()来读取任何接收L-SDU的接收指示状态。

3.17 Data integrity

  基本原理:尝试更新上层模块缓冲区以及CanIf内部缓冲区中的数据,必须考虑到在中断服务程序或其他抢占事件的上下文中可能发生的更改。抢占事件可能发生在抢占任务,多个CAN中断,如果使用多个物理通道,例如网关,或者在其他外设或网络系统中断的情况下,需要在网络上发送和接收l - pdu。
  如果在CanIf模块中调用CanIf_Transmit()、CanIf_TxConfirmation()和CanIf_ReadRxPduData()函数从CanIf controlled内存区域读取数据,CanIf应保证提供的值是最近获得的值。
  如果CanIf被配置为使用传输缓冲区或接收缓冲区,CanIf_Transmit()、CanIf_TxConfirmation()和CanIf_ReadRxPduData()函数只访问CanIf控制的内存区域的数据。

3.18 CAN Controller Mode

  CanIf模块提供服务控制CAN Controllers的模式。提供CanIf_GetControllerMode()获取  CAN Controllers的模式,提供CanIf_SetControllerMode()设置CAN Controller模式。
  CanSM模块负责一个CAN网络上所有CAN Controllers一致性管理。CanSM负责设置一个网络上的所有CAN Controllers按顺序的进入休眠或者唤醒

3.18.1 CAN Controller Operation Modes

  ControllerID标识的当前CAN网络如果处于CAN_CS_STOPPED状态,那么通过该网路调用CanIf_Transmit()函数将返回E_NOT_OK,不会调用Can_Write()函数。同时还会清除掉CanIf中的发送缓存。同时还会调用<User_TxConfirmation>(id, E_NOT_OK)同时上层发送数据失败。

3.18.2 Controller Mode Transitions

  CAN控制器的状态更改请求API以异步的方式通过回调服务发出异步通知。

  根据CAN控制器硬件中转换请求的设置,真实的转换到请求模式是异步发生的,例如,请求睡眠转换CAN_CS_SLEEP。成功更改为例如CAN_CS_SLEEP模式后,CanDrv调用函数CanIf_ControllerModeIndication(), CanIf依次调用函数<User_ControllerModeIndication>()。如果CAN传输非常快,CanIf_ControllerModeIndication()可以CanIf_SetControllerMode()期间调用。
CanIf的上层模块可以通过CanIf_GetControllerMode()轮询当前的控制器模式.

3.18.4 Wake-up

  ECU支持通过CAN网络唤醒,无论使用哪种唤醒方法(直接关于CAN控制器或CAN收发器),只有当CAN控制器和CAN收发器设置为某种“侦听唤醒”模式时。这通常是一个睡眠模式,通常的通信被禁用。只有这种模式才能确保CAN控制器处于停止状态。因此,可以启用唤醒中断。

3.18.4.1 Wake-up detection

  如果启用了唤醒支持,CanIf通过集成代码检测到CanIf_CheckWakeup()服务的CAN唤醒。
  在CAN总线“wake-up”事件中,在执行EcuM_CheckWakeup(WakeupSource)时,可能会调用CanIf_CheckWakeup(WakeupSource)函数。CanIf反过来通过配置输入引用来检查CanDrvs中的EcuMWakeupSource,这是必须检查的CanDrvs。CanIf通过引用CanIfCtrlCanCtrlRef获取此信息。
被调用的通信服务属于配置期间定义的服务。通过这种方式,EcuM和CanSM能够改变CAN控制器状态,并控制与BusOff恢复或唤醒过程相关的系统行为。

3.18.4.2 Wake-up Validation

  当CAN控制器/ CAN收发器检测到总线唤醒事件时,将直接通知ECU状态管理器。如果需要验证这样的唤醒事件,EcuM(或CDD)打开对应的 CAN Controller (CanIf_SetControllerMode())和CAN Transceiver (CanIf_SetTrcvMode())。
  当“PDU Channel Mode”设置为“CanIf_ONLINE”或“CanIf_TX_OFFLINE”时,CanIf将接收到的消息通知上层模块。因此,如果需要唤醒验证,则不需要将PDU通道模式设置为CanIf_ONLINE或CanIf_TX_OFFLINE。

3.19 PDU channel mode control

   每个L-PDU被分配到一个专用的物理CAN通道,这个物理CAN通道连接到一个CAN Controller和一个CAN网络。通过这种方式,以处理单个逻辑L-PDU通道组的方式来控制一个组里面的所有L-PDU。这些逻辑组代表了连接到一个下层网络的所有的L-PDU。

3.19.1 PDU channel modes

  CanIf模块提供CanIf_SetPduMode()和CanIf_GetPduMode()服务来设置和获取CAN通道模式。
  只能在某个CAN通道处于CAN_CS_STARTED模式下才能改变通道模式。
  CanIf_ONLINE 和CanIf_OFFLINE会影响PDU通道的整个通信过程(收/发),CanIf_TX_OFFLINE 和 CanIf_TX_OFFLINE_ACTIVE模式分别关闭/打开PDU的发生。
  每路PDU通道可以在CAN_OFFLINE模式(没有通信),CanIf_TX_OFFLINE(passive mode 能收不能发)模式,CanIf_TX_OFFLINE_ACTIVE(模拟发送但不收),CanIf_ONLINE(完全通信模式)。
在这里插入图片描述

3.20 Software receive filter

  并不是所有的L-PDU都被定义为Receive L-PDU,Receive L-PDU需要从相应的ECU接收,这些L-PDU可以通过硬件接收滤波器,因此在BasicCAN硬件对象中被成功接收。CanIf可选地过滤掉这些L-PDU并禁止进一步的软件处理。
  软件过滤机制的方法是从正在处理的HRH和CanId中找出相应的L-PDU。找到L-PDU后,CanIf接受接收到的L-PDU,上层可以直接访问L-SDU信息。

3.20.1 Software filtering concept

  配置工具处理有关硬件接受过滤器设置的信息。最重要的设置是L-PDU硬件对象的数量和范围。输出范围定义了接收哪些l - pdu属于每个硬件接收对象。
在这里插入图片描述

3.21 Data Length Check

  将收到的数据长度值与配置的数据长度值进行比较。配置的Data Length值应从该L-PDU中使用的字节大小中得出。所配置的数据长度值不一定是CAN通信矩阵中定义并由该CAN L-PDU的发送方使用的数据长度值。

>>>>>回到总目录<<<<<<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HSCCTF 3th 2024 Web方向 题解wp

WEB-CHECKIN【*没出】 直接给了源码 <?php highlight_file(__FILE__); error_reporting(0); $a$_POST[1]; $b"php://filter/$a/resource/dev/null"; if(file_get_contents($b)"2024"){echo file_get_contents(/flag); }else{echo $b; }咋这么像 WEB…

人工智能迷惑行为大赏(AI智障)

目录 人工智能 人工智能的“幽默”瞬间 技术原理探究 社会影响分析 人工智能 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一个涵盖了多个学科的综合领域&#xff0c;主要研究如何应用计算机来模拟人类的某些思维过程和智能行为&#xff0c;如…

阿里云-零基础入门推荐系统 【Baseline】

文章目录 赛题介绍评价方式理解赛题理解代码实战导包df节省内存函数读取采样或全量数获取 用户 - 文章 - 点击时间字典获取点击最多的topk个文章itemcf的物品相似度计算itemcf 的文章推荐给每个用户根据物品的协同过滤推荐文章召回字典转换成df生成提交文件获取测试集从所有的召…

mysql如何开启手动提交事务

在mysql中&#xff0c;有一个变量autocommit&#xff0c;表示自动提交&#xff0c;默认为1&#xff0c;表示开启自动提交。通过以下命令查询 select autocommit;当autocommit为1时&#xff0c;任何一条sql语句都是一个事务&#xff0c;执行完由mysql自动提交。如果想自己决定什…

matlab 基操~

MATLAB基本操作 1. 对象定义 使用sym定义单个对象、使用syms定义多个对象 2. 使用limit求极限 $$ \lim_{v \rightarrow a} f(x) $$ limit(f,v,a) % 使用limit(f,v,a,left)可求左极限 3. 导数 使用diff(f,v,n)对$ f(v)v^{t-1} $求 $ n $ 阶导 $ \frac{d^nf}{d^nv} $&#xf…

智谱清华LongAlign发布:重塑NLP长文本处理

引言 随着大型语言模型&#xff08;LLMs&#xff09;的不断进化&#xff0c;我们现在能够处理的文本长度已经达到了前所未有的规模——从最初的几百个tokens到现在的128k tokens&#xff0c;相当于一本300页的书。这一进步为语义信息的提供、错误率的减少以及用户体验的提升打…

MySQL三种日志

一、undo log&#xff08;回滚日志&#xff09; 1.作用&#xff1a; &#xff08;1&#xff09;保证了事物的原子性 &#xff08;2&#xff09;通过read view和undo log实现mvcc多版本并发控制 2.在事务提交前&#xff0c;记录更新前的数据到undo log里&#xff0c;回滚的时候读…

java学习之路-数据类型与变量

目录 数据类型与变量 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 整型变量 3.2.1 整型变量 3.2.2 长整型变量 3.2.3 短整型变量 3.2.4 字节型变量 3.3 浮点型变量 3.3.1 双精度浮点型 3.3.2 单精度浮点型 3.4 字符型变量 3.5布尔型变量 3.6 类型转换 …

苍穹外卖学习-----2024/03/010---修改套餐,套餐状态修改开发

修改套餐 4.1 需求分析和设计 产品原型&#xff1a; 接口设计&#xff08;共涉及到5个接口&#xff09;&#xff1a; 根据id查询套餐根据类型查询分类&#xff08;已完成&#xff09;根据分类id查询菜品&#xff08;已完成&#xff09;图片上传&#xff08;已完成&#xf…

Linux 地址空间

目录 一、程序地址空间 1、虚拟地址 Makefile新写法 2、进程地址空间分布 3、栈&堆 4、static修饰局部变量 5、字符串常量不可修改 6、虚拟地址与物理地址的联系 二、CPU读取程序全过程 1、形成可执行程序 2、生成虚拟地址 3、程序的启动 4、创建进程 5、地…

【Redis】RedisTemplate序列化传输数据

使用自定义的序列化器 使用RedisTemplate默认的序列化器发送数据&#xff0c;会将key全都当成Object处理&#xff0c;从而按照对象的方式转成json格式发送到服务器&#xff0c;这样会导致两个问题。一是不方便阅读&#xff0c;二是会大大浪费内存。因此&#xff0c;建议自定义…

Linux之线程控制

目录 一、POSIX线程库 二、线程的创建 三、线程等待 四、线程终止 五、分离线程 六、线程ID&#xff1a;pthread_t 1、获取线程ID 2、pthread_t 七、线程局部存储&#xff1a;__thread 一、POSIX线程库 由于Linux下的线程并没有独立特有的结构&#xff0c;所以Linux并…

一篇搞定mysql数据库基础

目录 一、MySQL具体的特点 1.关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 2.MySQL是一个“客户端-服务器”结构的程序 Q1:服务器能不能知道客户端什么时候发请求&#xff1f;&#xff1f; Q2:服务器是只给一个客户端提供服务吗&#xff1f;&#xff1f; 二、M…

LeetCode 80.删除有序数组中的重复项 II

目录标题 删除有序数组中的重复项 II题目解题思路实现代码代码讲解总结删除有序数组中的重复项 II 题目 解题思路 慢指针指向满足条件的数字的末尾,快指针遍历原数组。 并且用一个变量记录当前末尾数字出现了几次,防止超过两次。最后返回维护慢指针的结果+1即可。 实现代…

ChatGPT用不了,发了没反应,终于解决了!

大概在几天前的早上&#xff0c;ChatGPT突然就用不了。 这完全打乱了我的工作节奏&#xff01;&#xff01;&#xff01;&#xff08;所以&#xff0c;我就去玩了&#xff09; 用不了的具体表现是&#xff0c;你输入内容之后&#xff0c;内容消失&#xff0c;按钮变灰&#xff…

上位机图像处理和嵌入式模块部署(qmacvisual条形码识别)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到过&#xff0c;qmacvisual提供功能的方式主要就是插件导入。目前&#xff0c;大家如果能正确地把qmacvisual编译出来的话&#xff0c;…

Constrained Iterative LQR 自动驾驶中使用的经典控制算法

Motion planning 运动规划在自动驾驶领域是一个比较有挑战的部分。它既要接受来自上层的行为理解和决策的输出,也要考虑一个包含道路结构和感知所检测到的所有障碍物状态的动态世界模型。最终生成一个满足安全性和可行性约束并且具有理想驾驶体验的轨迹。 通常,motion plann…

快速入门:JS对象/BOM/DOM/事件监听

本贴介绍JS相对进阶的知识&#xff0c;对于JavaScript的基础语法&#xff0c;本文不再赘述~ 一.JavaScript对象 1.Array数组对象 定义 var arr new Array(1,2,3); var arr[1,2,3]; 访问 arr[0]1; Js数组类似Java中的集合&#xff0c;长度&#xff0c;类型都可以改变。 如…

【Qt学习笔记】(二)--第一个程序“Hello World”(学习Qt中程序的运行、发布、编译过程)

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。    因为我个人对Qt也是有一些需求&#xff0c;所以开设本专栏进行学习&#xff0c;希望大家可以一起学习&#xff0c;共同进步。   这篇博客将从一个 He…

【数据库系统概论】第2章:关系数据库

文章目录 0. 前言2.1 关系数据结构及形式化定义2.1.1关系2.1.2 关系模式 2.2 关系操作2.3 关系的完整性2.4 关系代数 0. 前言 关系数据库系统是支持关系模型的数据库系统。第一章初步介绍了关系模型及其基本术语。本章将深入介绍关系模型。 按照数据模型的三个要素&#xff0c;…