精华内容
下载资源
问答
  • UDS诊断入门

    2020-12-21 20:51:01
    在肯定回复是,59 - 02(子功能)- 09(本ECU所支持的掩码条件) - XX XX XX ( DTC,车厂定义 ) - 01 (这个故障码怎么了,01表示当前故障) 04(读取快照信息),也叫冻结帧。 0A(读取ECU支持的所有DTC列表及其状态...

    汽车(乘用车)的UDS服务遵守ISO 15765-2。

    UDS的服务包含6大类,共26种。每种服务都有自己独立的ID,即SID。

    SID

    SID:Service Identifier,诊断服务ID。UDS本质上是一种定向的通信,是一种交互协议(Request/Response),即诊断方(Tester)给ECU发送指定的请求数据(Request),这条数据中需要包含SID,且SID处于该应用层数据的第一个字节。

    如果是肯定的响应(Positive Response),首字节回复[SID+0x40]

    如果是否定的响应(Negative Response),首字节回复0x7F,第二字节回复刚才询问的SID。

    UDS地址

    UDS的寻址模式分两种,一种是物理寻址(点对点、一对一),根据物理地址的不同进行访问,但只能访问单个ECU节点,Tester为SA源地址,ECU作为TA目标地址;对应的,另一种是功能寻址(广播、一对多),根据功能的不同进行访问,它能访问多个ECU节点,对于标准帧来说,通常是0x7DF。

    每一个ECU都有2个CAN的诊断帧ID,分别对应物理寻址的收与发。通常由主机厂来确定不同ECU的这两个特定的诊断ID。比如0x701对应接收Tester的消息,0x709对应发给Tester的消息

    UDS的请求命令有4种构成方式,即

    SID

    SID+SF(Sub-function)

    SID+DID(Data Identifier)(读写22,2E用)`

    SID+SF+DID

    DTC

    如果系统检测到了一个错误,它将存储为DTC。DTC可表现为:一个显而易见的故障;通讯信号的丢失(不会使故障灯亮起);排放相关的故障;安全相关的错误等。DTC可以揭示错误的位置和错误类型。通常DTC占用3个字节,OBD II占用两个字节。图中FTB为Fault Type Byte。

    故障码包括四个大类,分别是PCBU,P是powertrain动力系统,C是Chassis底盘,B是Body车身,U是network通信系统。一个DTC信息占用4个字节。最后一个字节是DTC的状态。前两个字节是我们熟知的类似P0047的故障码。LowByte暂不清楚。

    $19拥有28个子服务(Sub-Function)。常用的子服务有:

    01 (读取符合掩码条件的DTC数量)(必须支持),后面的参数是DTC状态掩码,若为01表示我想读当前故障,若为08表示我想读历史故障,若为09表示当前故障和历史故障都想读。在肯定回复时,组合应该是59(19+40) - 01 (子功能) - 09 (本ECU所支持的掩码条件)-01 DTC的格式(ISO14229-1为01) - 00 01 (目前满足条件的DTC有一个)

    02(读取符合掩码条件的DTC列表及其状态)(必须支持),后面的参数是DTC状态掩码,解读同上。在肯定回复是,59 - 02(子功能)- 09(本ECU所支持的掩码条件) - XX XX XX ( DTC,车厂定义 ) - 01 (这个故障码怎么了,01表示当前故障)

    04(读取快照信息),也叫冻结帧。

    0A(读取ECU支持的所有DTC列表及其状态)(必须支持)。这个就不必发DTC状态掩码了。所有支持的DTC列表及其状态都会打印出来。

    $14 清除DTC; $14+FF+FF+FF;标识清除所有DTC

    展开全文
  • UDS诊断

    2020-12-21 20:50:45
    对于CAN诊断有两种不同的分类方式,按照寻址方式可以分为物理寻址、功能寻址,按照类别可以分为单、首、流控、连续。寻址方式在总线上往往连着众多ECU设备(如图1所示),作为诊断设备既可以单独与某一ECU...

    UDS诊断服务通常是通过CAN总线实现。对于CAN诊断帧有两种不同的分类方式,按照寻址方式可以分为物理寻址、功能寻址,按照帧类别可以分为单帧、首帧、流控帧、连续帧。

    寻址方式

    在总线上往往连着众多ECU设备(如图1所示),作为诊断设备既可以单独与某一ECU进行通信,也可以同时与所有总线上的ECU设备通信。图1 总线示意图

    1. 物理寻址

    物理寻址是指总线上始终只有一个ECU响应诊断设备发出的诊断命令,实现点对点通信,例如图1中总线上仅ECU A响应诊断设备的诊断命令。

    2. 功能寻址

    功能寻址是指总线上的所有ECU对可以同时响应诊断设备发出的诊断命令,实现一对多的通信方式,例如图1中ECU A、ECU B、ECU C 、ECU D可以同时响应诊断设备的诊断命令。

    帧类别

    对于帧的类型,通过需要发送的数据长度来确定。在正常寻址模式下,当数据长度小于等于7byte,则用单帧的形式发送,当数据长度大于7byte,数据需要分多帧才能发送完成,则需要使用到首帧、流控帧、连续帧,不同帧的机制如图2所示。图2 不同帧的机制

    首帧是指发送的第一帧,目的是把前7byte数据发送给接收方,并告知接收方数据没有发完,然后接收方会回一帧流控帧,告知发送方是否可以接着发送,并且告知接收方一次最多能接收的数据量,以及发送方接下来发送的数据帧(连续帧)之间的时间间隔要求。

    对于不同的帧,通过CAN消息的数据场中PCI(Protocol control information)来区分,图3、图4详细说明了不同帧的PCI的定义。图3 不同帧的数据场定义

    以下是对PCI段的详细解释。图4 PCI 定义

    其中:

    DL:有效数据的长度,不包括PCIbyte;

    FS:表示是发送方否可以继续传输消息,0表示可以继续发送,1表示等待发送,2表示数据溢出,一次发送的数据大于接收方所能接收的量;

    BS:接收方一次能接收的数据最大量;

    STmin:表示两个连续帧之间的最小时间间隔,参照图1中的定义;

    SN:连续帧的序列号;

    展开全文
  • 视频质量检测(2)--画面冻结检测

    千次阅读 2019-01-30 15:29:15
    一般采用区域直方图相似度对比或者像素差异对比,达到一定的阈值TH后认为该满足冻结判定,连续N后判定画面冻结。但直方图的方式,本人认为有较大误差,毕竟只考虑分布像素的的数量,忽略了位置,故误差较大,...

    本文主要介绍视频画面冻结的检测。
    1、视频画面冻结的定义
    关于冻结的认知有两种:(1)时间流和画面均定格不动;(2)时间流在走,画面定格不动。
    2、检测算法
    一般采用区域直方图相似度对比或者像素差异对比,达到一定的阈值TH后认为该帧满足冻结判定,连续N帧后判定画面冻结。但直方图的方式,本人认为有较大误差,毕竟只考虑分布像素的的数量,忽略了位置,故误差较大,容易误报。本文实现像素差异对比的算法。
    3、原理介绍
    通常摄像头采集的连续两帧画面,肉眼看起来一致,但受环境光、感光元器件、电信号转换等的影响,会有一定的差异,利用该差异可以判定该像素位置是否变化。该方法可以有效避免画面背景单一、目标长时间不动造成的误报。
    通过实验可以得到同一像素位置的差异值 T,对连续获得的视频帧做差分,统计变化的像素个数NUMBER,达到一定的比例后,认为当前帧画面变化,否则认为当前帧冻结,累计N帧后判定监控画面冻结。
    4、代码实现

    Mat baseimg;   //全局变量
    int T = 10;   //假设同一像素位置的变化范围为10
    void ViewFreeze2(Mat src, float &k)
    {
    	if (baseimg.empty())
    	{
    		baseimg = src.clone();
    		k = 0;
    		return;
    	}
    	Mat src_gray, base_gray;
    	cvtColor(src, src_gray, CV_BGR2GRAY);
    	cvtColor(baseimg, base_g
    展开全文
  • 本文详细介绍了视频的数据存储本质、moviepy的剪辑基类Clip的变换方法fl的原理,并通过实现视频播放从下往上滚动的案例详细介绍了内容变换处理的实现。文章内容深入浅出、条理清晰、案例详尽,适合所有对...
     
    

    一、引言

    在《moviepy音视频剪辑:moviepy中的剪辑基类Clip的属性和方法详解》介绍了fl方法是对剪辑进行变换处理返回一个新剪辑的方法,新剪辑是调用剪辑的一个浅拷贝,但新剪辑的内容是原剪辑内容的变换,具体变换由fl的参数指定的函数fun来实现。

    fl变换一般包括两种:

    本文介绍基于帧实现剪辑内容变换的原理和案例。

    二、fl变换的原理

    2.1、视频帧的本质

    在《音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概念介绍》介绍了数字视频的基础知识,我们知道视频流本质上是基于YUV表示的原始流或编码流,流的内容就是帧流,一个个连续的帧对应的静态图像连续播放构成的帧流就是播放的视频,内容的变换本质上就是对帧的处理。

    帧本身是YUV表示的图像,在程序处理中,这些帧对应的图像本质是什么呢?我们来看案例:

    >>> from  moviepy.editor import *
    >>> from  moviepy.Clip import *
    >>> clip = VideoFileClip(r"F:\video\WinBasedWorkHard.mp4")
    >>> clip.size  #看剪辑的大小(也即分辨率)
    [540, 960]
    >>> frame = clip.get_frame(1)  #取剪辑时间为1秒位置的帧
    >>> type(frame)
    <class 'numpy.ndarray'>
    >>> frame.ndim
    3
    >>> frame.shape
    (960, 540, 3)
    >>> 
    

    可以看到,上述脚本加载了一个视频,该视频的分辨率大小为540*960,从该剪辑取了一个帧,可以看到帧的类型为numpy数组,其维度为3即三维数组,通过这个数组的shape可以看到,这个数组是由960行(高)数据构成,每行数据包含540列数据,这就对应了分辨率大小,数组的每个基本元素是一个三元组,应该就对应一个像素点的YUV值。

    由以上案例可以看出来,视频帧在程序中被表示为与视频分辨率大小对应的一个矩阵,这个矩阵的行数是视频的高、列数是视频的宽,元素是YUV表示的像素点。

    2.2、fl内容变换的原理

    内容变换本质上就是对帧数据的处理,也就是对帧对应的三维数组数据的操作:

    • 调整行的位置就是在垂直方向上调整视频内容的位置
    • 调整列的位置就是在水平方向上调整视频内容的位置
    • 同时调整行和列的位置就是调整视频空间的内容位置
    • 调整三元组YUV就是对视频显示内容的变化
    • 调整行高或列宽就是对视频的内容进行裁剪或扩充并对分辨率进行调整

    2.3、进行变换处理需要注意的地方

    对视频进行变换处理时,实际上处理的是帧的内容,需要注意:

    1. 视频的大小(分辨率),处理视频时,要避免行和列超出分辨率限制的情况出现,代码要有对此的处理;
    2. 对内容进行变换不能只考虑一个帧自身的变换,一定要基于帧流来考虑,因为单独一个帧的呈现时间非常短,只有帧流都是连续变换的才能保证变换在播放时的可见。如果这种连续变换是针对位置的,一定要记住变换处理是针对每帧的,相关变换位置必须在上一帧变换位置之上再变换才有意义。关于这段话是老猿在进行变换处理的经验总结,单独理解有点困难,请结合下面的案例再理解这段话;
    3. 变换处理要平滑,否则视频播放会感知差。

    三、滚屏案例的实现波折

    2.1、案例说明

    在《moviepy音视频剪辑:moviepy中的剪辑基类Clip详解》介绍fl方法时介绍了一个案例这个案例其实是参考moviepy的样例实现,想要达到一种屏幕视频向上滚动的效果。
    下面是moviepy关于这个案例的有关介绍:

      In the following ``newclip`` a 100 pixels-high clip whose video
            content scrolls from the top to the bottom of the frames of
            ``clip``.
    
            >>> fl = lambda gf,t : gf(t)[int(t):int(t)+50, :]
            >>> newclip = clip.fl(fl, apply_to='mask')
    

    2.2、模拟案例的实现

    老猿模拟上述案例对滚屏实现进行了改动,改成了如下:

    src = VideoFileClip(r"F:\video\抖音-爱拼才会赢.mp4")	
    h = src.size[1] 
    fl = lambda gf,t : gf(t)[int(t):int(t)+h/2, :]
    newclip = src.fl(fl, apply_to='mask')
    newclip.write_videofile(r"F:\video\抖音-爱拼才会赢_re.mp4"
    

    上述案例在实现后,发现视频播放时并没有滚屏,而是将视频内容剪裁掉了一半,分辨率的高度变成了原视频的一半,百思不得其解,最后在moviepy网站上作为一个问题提出(详见https://github.com/Zulko/moviepy/issues/1213),人家次日就进行了答复,说是这个变化太小了,每秒才滚动了一个像素,肉眼是不可见的,建议改为如下:

    newclip = clipVideo.fl(lambda gf, t: gf(t)[int(50*t):int(50*t) + h, :], apply_to='mask').set_duration(clipVideo.duration)
    

    2.2、模拟案例的改良

    按照网站就问题的答复,将上述代码改成了如下:

    src = VideoFileClip(r"F:\video\抖音-爱拼才会赢.mp4")	
    h = src.size[1] 
    fl = lambda gf,t : gf(t)[int(t*50):int(t*50)+h/2, :]
    newclip = src.fl(fl, apply_to='mask')
    newclip.write_videofile(r"F:\video\抖音-爱拼才会赢_re.mp4")
    

    运行后播放输出文件,才开始播放时看到确实实现了滚屏效果,但随着播放时间的延长,滚屏越来越快,最后就卡在某个页面不变换了。仔细分析了一些,发现这个改良方法太粗暴,才开始时间线很小所以变化不大,而随着播放时间线越来越大,t*50的值会越来越大,到后来已经超出了视频分辨率的高,导致这个播放就卡主了。

    四、滚屏案例的最终实现

    4.1、实现思路

    4.1.1、滚屏的处理
    1. 相邻帧绝大多数情况下画面内容基本一致,只有少数内容发生变化,通过连续播放才能体现变化;
    2. 单帧是无法体现滚屏效果的,滚屏就是下一帧相对上一帧将下面的行往上面移动,如果将帧数据的数组首尾环接,相当于每个帧的所有行数据在这个环内滚动流动,但实际上数组没有环接,因此需要应用实现环接的处理;
    3. 假设在屏幕上每秒要滚动n个像素点,从第1帧来看是数据帧的行环绕前进n行,第2帧则需要环绕移动2n行(如果第二帧还是只移动n行,则第二帧的变化位置相对第一帧没有变化,这样连续播放时就无法体现滚动效果),…,第k行则要环绕移动kn行。如果记录了上个帧移动的行数(假设为m),则下个帧需要移动m+n行;
    4. 当一次移动的行数超出了帧高,则需要回到帧的头重新开始,形成环绕移动的效果;
    5. 帧的环绕移动通过数组的切片和数组的叠加进行处理,这样简洁高效。
    4.1.2、怎么在变换函数内获取帧高和fps

    moviepy提供的变换方法fl的参数fn只能带两个参数,一个是类似get_frame获取帧的方法名,一个是帧的时间位置变量t。但上面说到,要实现环绕移动,需要知道帧高,在这个变换函数内怎么获取呢?另外滚屏的速度与帧率fps相关,同样移动的行数fps越大感知到的移动就越快,可能需要参考帧的这些属性来进行变换处理。

    但fl对应的参数fun函数是无法通过自身的属性直接获取帧相关的数据的,同时上一帧移动位置到哪里里也不能通过函数变量进行传递。解决这个问题老猿想到两个办法:

    1. 通过全局变量进行变量传递(请参考《第5.4节 Python函数中的变量及作用域》),本文的样例就是这样来传递的;
    2. 帧数据通过fun函数的参数对应函数gf的返回值来获取,因为gf返回的是原剪辑参数t指定时刻的帧,通过这个可以获取到帧高、fps等数据,而滚动行数通过公式计算,假设每次滚动k行,具体公式为:rows = int(t*fps*k)%帧高

    4.2、代码实现

    4.2.1、主程序
    from  moviepy.editor import *
    import  numpy as np
    if __name__=='__main__':
        clipVideo = VideoFileClip(r"F:\video\WinBasedWorkHard_src.mp4")
    
        global framePos,clipHeight  #存储滚动位置和帧高的全局变量定义,下面两行为初始化值
        framePos = 0
        clipHeight = clipVideo.size[1]
    
        newclip = clipVideo.fl(flFunc , apply_to=['mask']).set_duration(clipVideo.duration) #使用fl进行变换处理,每个帧的变换调用flFunc函数进行
        newclip.write_videofile(r"F:\video\WinBasedWorkHard_new.mp4") 
        newclip.close()
        clipVideo.close()
    
    
    4.2.2、实现变换函数及其子函数
    def flFunc(gf,t):  #变换主函数
        return frameScroll(gf(t),2) #一帧往前滚动2行
        
    def frameScroll(frame,x): #实现帧数据环绕滚动x行
        global framePos,clipHeight
    
        moveCount = framePos+x #本次移动行数在前一次行数基础上加x行
        if moveCount>clipHeight:  #环绕判断处理,其实用moveCount %= clipHeight语句更简洁效果相同,但取余的运算效率低一些
            moveCount -= clipHeight
        framePos = moveCount  #记录本次移动的行数
        remainFrame = frame[:moveCount]  #取前moveCount-1行
        exceedFrame = frame[moveCount:] #取后面剩余行
    
        return np.vstack((exceedFrame,remainFrame))  #将两部分数据叠加实现环绕效果,返回作为变换后的帧
    

    五、滚屏效果

    通过以上代码就实现了滚屏效果,我们截取3张结果视频文件的播放图对比看一下。
    在这里插入图片描述
    可以看到视频确实在滚动。

    六、小结

    本文详细介绍了视频帧的数据存储本质、moviepy的剪辑基类Clip的帧变换方法fl的原理,并通过实现视频播放从下往上滚动的案例详细介绍了帧内容变换处理的实现。写作不易,如果觉得从这篇文章能有所收获,敬请点赞!谢谢!

    本文的滚屏案例其实还可以用vfx.scroll方法来实现,这个方法老猿还没使用,且和讲解fl方法关系不大,在此暂不进行介绍。

    更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。

    关于收费专栏

    老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

    如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

    跟老猿学Python、学5G!

    展开全文
  • INCA软件ProF脚本扩展应用

    千次阅读 2021-06-06 21:55:17
    INCA软件 INCA是车辆控制器标定的首选软件之一,主要包含功能模型标定、测量数据分析(MDA)、标定数据管理(CDM)、控制器刷新(ProF)功能等...例如通过ProF脚本读取/解析控制器的故障码及故障码冻结帧信息等。 ...
  • UDS报文解读

    2020-12-21 20:50:49
    UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它可在不同的汽车总线(例如CAN, LIN, Flexray, Ethernet 和 K-line)上实现...
  • AUTOSAR之DEM(四)——Event Memory

    千次阅读 多人点赞 2020-05-06 22:46:15
    event memory是用于存储故障的EventID、扩展数据、故障状态、冻结帧等故障相关的数据的存储块,这个存储块应当被写入非易失性存储空间。如果存在一个完整的上下电过程,可以在NvM_ReadAll的时候把数据读取到存储在...
  • 关于可变长度数据的解析

    千次阅读 2018-11-15 16:54:10
    关于可变长度数据的解析 在项目中需要解析另一主机的数据...首先是和另一主机定义好数据格式协议,定义格式如下表: 头 命令字 长度 参数 校验和 0x5A Instruction Length Parameter1, Parameter2,P...
  • 如何看懂UDS诊断报文

    千次阅读 2020-12-21 20:50:49
    UDS介绍UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它可在不同的汽车总线(例如CAN, LIN, Flexray, Ethernet 和 K-line...
  • 学习总结

    2019-12-09 09:04:55
    首先汽车里的每个ECU都按规则存储故障,例如BMS发生了欠压故障,那么这时候BMS就记录发生故障DTC,以及发生故障的快照信息或者冻结帧信息 便于查找故障 相关术语 DTC:故障码(一个码代表一个故障)   ...
  • 关于汽车诊断OBD的理解(ISO15031-5)

    万次阅读 多人点赞 2017-10-13 13:58:06
    首先解释一下冻结帧,所谓的冻结帧你可以理解为故障发生时刻的一些环境数据,冻结帧的存在就是为了尽可能了解故障发生时的一些参数,以此来方便分析故障。 因此我们可以这样说模式2的作用就是为了快速方便的了解...
  • 2)$02 02服务的功能是读取冻结帧,类似UDS的19 04读取快照。 3)$03 03服务功能是读取确认故障,类似于UDS读取confirmed DTC 4)$04 04服务用于清除排放相关的DTC,类似UDS 的14服务 5)$05 05服务用于请求氧...
  • 无线网络CSMA/CA原理分析以及相关技术的介绍和分析

    千次阅读 多人点赞 2020-06-20 12:01:04
    无线网络CSMA/CA原理分析、无线站点交换过程、二交换过程、四交换过程、退避算法原理以及过程
  • 在重新同步的时候,PBS1 和 PBS2 中增加或减少的这段时间长度被定义为“重新同步补偿宽度SJW* (reSynchronization Jump Width)”。一般来说 CAN 控制器会限定 SJW 的最大值,如限定了最大 SJW=3Tq 时,单次同步调整...
  • Autosar诊断基础——诊断事件管理(DEM)

    千次阅读 多人点赞 2020-08-02 14:39:05
    Autosar诊断基础——诊断事件管理 1 诊断事件管理(DEM)概念 2 DEM模块及关联模块关系 3 DEM模块介绍 3.1 诊断故障码(DTC)概念及确定方式 3.2 诊断故障码(DTC)的掩码及计数方式 3.4 扩展数据及冻结帧的含义 4 EB ...
  • 此时的OBD-II不只是自诊断软件功能的升级,可提供更多的数据(如故障码、信号、实时数据、冻结帧信息等)被外部设备读取。 硬件方面也进行了很大升级,增加了1.5万个新的标定常数、可实现软件的重新编程、增加并...
  • CAN笔记(14) STM32-M4 寄存器

    万次阅读 2019-09-05 16:22:49
    该字段定义数据或遥控请求中的数据字节数 一条消息可以包含 0 到 8 个数据字节,具体取决于 DLC 字段的值 位 7:4 保留 必须保持复位值 位 8 TGT : 发送全局时间 (Transmit global time) 只有...
  • 简述UDS、0x19服务 UDS可以简单理解为一套完整的通讯协议框架,其目的在于规范各种行车电脑和ECU之间的通讯。ISO 15762-2规定了UDS的网络层,ISO14229规定UDS...经典的CAN数据链路层最大能够支持单8个字节的数据传输
  • 6 动画与关键

    2020-03-18 15:43:47
    6 动画与关键 学习要点: · 了解关键动画的创建方法 · 理解并掌握空间插值与临时插值的设置方法 · 理解并掌握快速产生与修改动画的方法 · 了解预览动画的方法 6.1 创建基本的关键动画 After Effects 除了...
  • 差值(Frame differencing)算法是一种典型的时间压缩法,它通过比较本与相邻之间的差异,仅记录本与其相邻的差值,这样可以大大减少数据量。 对称编码和不对称编码  对称性(symmetric)是压缩...
  • Vegas Pro 15中文版

    2019-09-29 11:12:07
    12.一个简单的“单击”选项会为时间线光标所触及的所有选定事件创建一个冻结帧 13.用户可以为VEGAS Pro界面的阴影指定四个选项之一,从非常明亮到黑暗的界面 14.用户可以定义他们想要在按钮中显示的颜色数量(强度...
  • 参考链接:...redirectedfrom=MSDN 十进制 十六进制 宏定义 中文解释 1 0x1 ERROR_INVALID_FUNCTION 功能不正确 2 0x2 ERROR_FILE_NOT_FOUND 系统找不到指定的文件 3...
  • LTE基本时间单位概要

    2021-07-29 07:20:04
     3、协议中一个子包含14个symbol(NCP)的原因: 协议中规定LTE一个(10ms)包含10个子,每个子1ms。实际中使用的并非是标准的symbol,而是加了循环前缀CP的symbol,即从一个子中取出一个symbol(长度等于...
  • Android性能优化-Android vitals

    千次阅读 2019-04-20 17:45:33
    如果您想收集可帮助您检查原生系统进程的详细系统级数据,并解决掉引起的界面卡顿,您应使用 systrace;或者,如果您想导出您使用 Debug 类捕获的 .trace 文件,您应使用 Traceview。 具体的Api使用请 点击查看 ,...
  • 对于以太网PDU会话,SMF可以指示UPF根据VLAN标签对进行分类,并在N6上接收和发送的上添加和删除VLAN标签。 当期望基于N6的流量转发时,在创建5G VN组之后,AF可以通过提供识别流量的信息,适合选择的DNAI和可选...
  • 手把手写Demo系列之车道线检测

    千次阅读 2021-03-27 00:27:04
    点击上方“3D视觉工坊”,选择“星标”干货第一时间送达文章导读本文是一篇从零开始做车道线检测Demo的教学式文章,从场景的定义到模型微调的输出,描述车道线Demo式例程中在每个环节需要做的...
  • 28、定时器的输出比较模式:Timing(冻结,什么都不做,普通定时),Active(OCxREF输出高电平有效),Inactive(OCxREF输出低电平),Toggle(比较成功后翻转电平)。 29、STM32的定时器从0开始计数,满足一些条件,...
  • 如果开启了这个特性,那么当你在断点处停止、逐步执行代码、在之间导航或使用“prev/next frame”动作时,IDE会在一个选项卡中依次打开文件。 框架和技术(仅限IntelliJ IDEA Ultimate版) 在端点工具窗口中,你可以...
  • 工业协议:DNP协议

    千次阅读 2020-11-06 21:55:20
    一个FT3定义为一个固定长度的报头,随后是可以选用的数据块,每个数据块附有一个 l6 位的 CRC 校验码。固定的报头含有2个字节的起始字,一个字节的长度(LENGH),一个字节的链路层控制字 (CONTROL),一个l6位的...
  • 假设对于在t从(x,y)移动到t +Δt处的(x +Δx,y +Δy)的任何点,其 亮度随时间保持不变 。 当我们在特征级别应用此约束时,我们有   f(I; w)(x, y, t) = f(I; w)(x + ∆x, y + ∆y, t + ∆t) 其中f是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,968
精华内容 1,187
热门标签
关键字:

冻结帧定义