STM32 CAN 过滤器、滤波屏蔽器配置总结

2023-05-16


http://blog.csdn.net/jixiangrurui/article/details/39370027


一、过滤组、过滤器编号介绍

    在STM32互联型产品中,CAN1CAN2分享28个过滤器组,其它STM32F103xx系列产品中有14个过滤器组,用以对接收到的帧进行过滤。

1、过滤器组

    每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0CAN_FxR1。这些过滤器相当于关卡,每当收到一条报文时,CAN要先将收到的报文从这些过滤器上""一下,能通过的报文是有效报文,收进相关联FIFOFIFO1FIFO2),不能通过的是无效报文(不是发给""的报文),直接丢弃。 

   (标准CAN的标志位长度是11位。扩展格式CAN的标志位长度是29CAN2.0A协议规定CAN控制器必须有一个11位的标识符。CAN2.0B协议中规定CAN控制器的标示符长度可以是11位或29位。STM32同时支持CAN2.0A/CAN2.0B协议。)    

每组过滤器组有两种工作模式:标识符列表模式标识符屏蔽位模式

标识符屏蔽位模式:

    可过滤出一组标识符。此时,这样CAN_FxR0中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码,即CAN_FxR1中如果某一位为1,则CAN_FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN_FxR1中为0的位表示CAN_FxR0中的相应位可不必与收到的帧进行匹配。

标识符列表模式:

    可过滤出一个标识。此时CAN_FxR0CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。注意:CAN_FilterIdHigh是指高16位CAN_FilterIdLow是低16位应该将需要得到的帧的和过滤器的设置值左对齐起。

    所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。 

    按工作模式和宽度,一个过滤器组可以变成以下几中形式之一:

        (1) 132位的屏蔽位模式的过滤器。

        (2) 232位的列表模式的过滤器。

        (3) 216位的屏蔽位模式的过滤器。

        (4) 416位的列表模式的过滤器。

    每组过滤器组有两个32位的寄存器用于存储过滤用的"标准值",分别是FxR1FxR2

32位的屏蔽位模式下:    1个过滤器。

    FxR1用于指定这些位的标准值,FxR2用于指定需要关心哪些位。

32位的列表模式下:     2个过滤器。

    FxR1指定过滤器0的标准值,FxR2指定过滤器1的标准值。

16位的屏蔽位模式下:    2个过滤器。

    FxR1配置过滤器0,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。

    FxR2配置过滤器1,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。

16位的列表模式下:     4个过滤器。

    FxR1[15-0]位配置过滤器0FxR1[31-16]位配置过滤器1

    FxR2[15-0]位配置过滤器2FxR2[31-16]位配置过滤器3

STM32CAN有两个FIFO,分别是FIFO0FIFO1。为了便于区分,下面FIFO0写作FIFO_0FIFO1写作FIFO_1

每组过滤器组必须关联且只能关联一个FIFO。复位默认都关联到FIFO_0

    所谓关联是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连的FIFO

从另一方面来说,每个FIFO都关联了一串的过滤器组,两个FIFO刚好瓜分了所有的过滤器组。

    每当收到一个报文,CAN就将这个报文先与FIFO_0关联的过滤器比较,如果被匹配,就将此报文放入FIFO_0中。如果不匹配,再将报文与FIFO_1关联的过滤器比较,如果被匹配,该报文就放入FIFO_1中。如果还是不匹配,此报文就被丢弃。

    每个FIFO的所有过滤器都是并联的,只要通过了其中任何一个过滤器,该报文就有效。

如果一个报文既符合FIFO_0的规定,又符合FIFO_1的规定,显然,根据操作顺序,它只会放到FIFO_0中。

每个FIFO中只有激活了的过滤器才起作用,换句话说,如果一个FIFO20个过滤器,但是只激话了5个,那么比较报文时,只拿这5个过滤器作比较。

    一般要用到某个过滤器时,在初始化阶段就直接将它激活。

    需要注意的是,每个FIFO必须至少激活一个过滤器,它才有可能收到报文。如果一个过滤器都没有激活,那么是所有报文都报废的。

一般的,如果不想用复杂的过滤功能,FIFO可以只激活一组过滤器组,且将它设置成32位的屏蔽位模式,两个标准值寄存器(FxR1FxR2)都设置成0。这样所有报文均能通过。

2、过滤器编号

过滤器编号用于加速CPU对收到报文的处理。

收到一个有效报文时, CAN会将收到的报文 以及它所通过的过滤器编号, 一起存入接收邮箱中。CPU在处理时,可以根据过滤器编号,快速的知道该报文的用途,从而作出相应处理。

不用过滤器编号其实也是可以的, 这时候CPU就要分析所收报文的标识符, 从而知道报文的用途。由于标识符所含的信息较多,处理起来就慢一点了。会消耗CPU资源。

STM32使用以下规则对过滤器编号:

(1) FIFO_0FIFO_1的过滤器分别独立编号,均从0开始按顺序编号。

(2) 所有关联同一个FIFO的过滤器,不管有没有被激活,均统一进行编号。

(3) 编号从0开始,按过滤器组的编号从小到大,按顺序排列。

(4) 在同一过滤器组内,按寄存器从小到大编号。FxR1配置的过滤器编号小,FxR2配置的过滤器编号大。

(5) 同一个寄存器内,按位序从小到大编号。[15-0]位配置的过滤器编号小,[31-16]位配置的过滤器编号大。

(6) 过滤器编号是弹性的。 当更改了设置时,每个过滤器的编号都会改变。

 但是在设置不变的情况下,各个过滤器的编号是相对稳定的。

这样,每个过滤器在自己在FIFO中都有编号。

FIFO_0中,编号从0 -- (M-1) 其中M为它的过滤器总数。

FIFO_1中,编号从0 -- (N-1),,其中N为它的过滤器总数。


一个FIFO如果有很多的过滤器,,可能会有一条报文, 在几个过滤器上均能通过,这时候,,这条报文算是从哪儿过来的呢?STM32在使用过滤器时,按以下顺序进行过滤:

(1) 位宽为32位的过滤器,优先级高于位宽为16位的过滤器。

(2) 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式。

(3) 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高。

按这样的顺序,报文能通过的第一个过滤器,就是该报文的过滤器编号,被存入接收邮箱中。
二、初始化配置代码
[cpp]  view plain  copy
  1. u32  slave_id = 0x11 ;  
  2. /*CAN1配置函数*/   
  3. void CAN_Configuration(void)  
  4. {  
  5.  CAN_InitTypeDef        CAN_InitStructure;  
  6.     CAN_FilterInitTypeDef  CAN_FilterInitStructure;  
  7.     // CAN register init   
  8.     CAN_DeInit(CAN1);  
  9.     CAN_StructInit(&CAN_InitStructure);  
  10.     // CAN cell init   
  11.     CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式  
  12.     CAN_InitStructure.CAN_ABOM=DISABLE;  
  13.     CAN_InitStructure.CAN_AWUM=DISABLE;//睡眠模式通过清除sleep位来唤醒  
  14.     CAN_InitStructure.CAN_NART=ENABLE;//ENABLE;报文自动重传  
  15.     CAN_InitStructure.CAN_RFLM=DISABLE;//接收溢出时,FIFO未锁定  
  16.     CAN_InitStructure.CAN_TXFP=DISABLE;//发送的优先级由标示符的大小决定  
  17.     CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;//正常模式下  
  18.     //设置can通讯波特率为50Kbps  
  19.     CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;  
  20.     CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;  
  21.     CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;  
  22.     CAN_InitStructure.CAN_Prescaler=45;  
  23.     CAN_Init(CAN1,&CAN_InitStructure);  
  24.     // CAN filter init   
  25.     CAN_FilterInitStructure.CAN_FilterNumber=0;     //使用0号过滤器组  
  26.     CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;   //屏蔽位标识符模式  
  27.     CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;  // 1个32bit的过滤器:即过滤器编号为0-->RxMessage.FMI = 0  
  28.     CAN_FilterInitStructure.CAN_FilterIdHigh   = (((u32)slave_id<<21)&0xffff0000)>>16;  
  29.     CAN_FilterInitStructure.CAN_FilterIdLow   = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;  
  30.     CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;   //完全匹配  
  31.     CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;   //完全匹配  
  32.     CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;   //使用FIFO0  
  33.     CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;   //使能过滤器  
  34.     CAN_FilterInit(&CAN_FilterInitStructure);  
  35.     CAN_ITConfig(CAN1,CAN_IT_FMP0|CAN_IT_EPV, ENABLE);  
  36. }   
  37. /*CAN 发送函数*/  
  38. unsigned char CAN1_SendData(void)  
  39. {  
  40.  CanTxMsg TxMessage;  
  41.  TxMessage.StdId=0x11;      //标准标识符   
  42.  TxMessage.RTR=CAN_RTR_DATA; //数据帧  
  43.  TxMessage.IDE=CAN_ID_STD; //标准帧  
  44.  TxMessage.DLC=2;          //数据长度 2  
  45.  TxMessage.Data[0]=0xCA;     //发送的数据  
  46.  TxMessage.Data[1]=0xFE;  
  47.  CAN_Transmit(CAN1,&TxMessage); //发送数据  
  48. }  
  49. /*中断服务函数*/  
  50. void USB_LP_CAN1_RX0_IRQHandler(void)  
  51. {  
  52.  CanRxMsg RxMessage;  
  53.  CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);      
  54.  If(RxMessage.FMI == 0){   //过滤器编号为0  
  55.        /*接收数据处理*/  
  56.  }  
  57. }  


三、滤波器的详细设置

1、对扩展数据帧进行过滤:(只接收扩展数据帧)

     CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<3)&0xFFFF0000)>>16;

     CAN_FilterInitStructure.CAN_FilterIdLo=(((u32)slave_id<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;

     CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

     CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

(注:标准帧数据帧、标准远程帧和扩展远程帧均被过滤)

2、对扩展远程帧过滤:(只接收扩展远程帧)

     CAN_FilterInitStructure.CAN_FilterIdHigh   = (((u32)slave_id<<3)&0xFFFF0000)>>16;

     CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<3)|CAN_ID_EXT|CAN_RTR_REMOTE)&0xFFFF;

     CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

     CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

3、对标准远程帧过滤:(只接收标准远程帧)

     CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<21)&0xffff0000)>>16;

     CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_REMOTE)&0xffff;

      CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

     CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

4、对标准数据帧过滤:(只接收标准数据帧)

     CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<21)&0xffff0000)>>16;

     CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;

     CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

     CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

5、对扩展帧进行过滤:(扩展帧不会被过滤掉)

     CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<3)&0xFFFF0000)>>16;

     CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<3)|CAN_ID_EXT)&0xFFFF;

     CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC;

6、对标准帧进行过滤:(标准帧不会被过滤掉)

     CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<21)&0xffff0000)>>16;

     CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<21)|CAN_ID_STD)&0xffff;

      CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

     CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC;

注:slave_id为要过滤的id号。
其中我们可以开启can错误中断,设置响应的标志位,在大循环里面不断的检测是否错误,一旦错误就重新配置can,这样有效地保证了CAN的正常通信。具体操作代码如下:
[cpp]  view plain  copy
  1.  /*CAN错误中断服务函数*/、  
  2. void CAN1_SCE_IRQHandler(void)  
  3. {  
  4.  CANWorkFlag &= ~CAN_RESET_COMPLETE;  
  5. }  
  6. /*CAN错误处理函数*/  
  7. /************************************************************************ 
  8.  *函数名称:  CanErrorProcess 
  9.  *功能:      CAN故障,错误处理 
  10.  *参数说明:  无 
  11.  ************************************************************************/  
  12. void CanErrorProcess(void)  
  13. {  
  14.  if ((CANWorkFlag & CAN_RESET_COMPLETE) == 0)  
  15.  {  
  16.   CAN1_Configuration();  
  17.   CANWorkFlag |= CAN_RESET_COMPLETE;  
  18.  }  
  19. }  
  20. /*错误标志的定义*/  
  21. extern uint8 CANWorkFlag;  
  22. /************************************************************************ 
  23.  *  CANWorkFlag 标志位掩码定义 
  24.  ************************************************************************/  
  25. #define       CAN_INIT_COMPLETE            0x80   //CAN初始化完成标志  
  26. //#define       CAN_BUS_ERROR                0x40   //CAN总线错误标志  
  27. #define       CAN_RESET_COMPLETE           0x40   //CAN控制器复位完成标志  
  28. #define       CAN2_INIT_COMPLETE            0x20   //CAN2初始化完成标志  
  29. //#define       CAN_BUS_ERROR                0x40   //CAN总线错误标志  
  30. #define       CAN2_RESET_COMPLETE           0x10   //CAN2控制器复位完成标志  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 CAN 过滤器、滤波屏蔽器配置总结 的相关文章

  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • GCC - 如何停止链接 malloc?

    我正在努力将我的代码缩减到最小的骨架大小 我使用的是只有 32k 闪存的 STM32F0 需要很大一部分闪存用于数据存储 我的代码已经有大约 20k 闪存大小 其中一些是由于使用了 STM32 HAL 函数 我可以在以后需要时对其进行解释和
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公

随机推荐

  • com.jacob.com.ComFailException: VariantChangeType failed

    调用jacob组件出错 com jacob com ComFailException VariantChangeType failed 在C Windows System32 config systemprofile下创建文件夹Deskto
  • CRC8校验 java实现

    以下为CRC8的实现 span class hljs keyword package span server span class hljs javadoc CRC8相关计算 encode utf 8 span class hljs jav
  • Java list add方法和addAll方法效率

    结论是 在数据量较小时 add方法配合for循环遍历比addAll来得快 但是在大量数据时 addAll的方法的效率更高 list addAll 是浅拷贝 只是将内存中的地址进行了拷贝 指向了原先list的末尾做了拼接
  • STM32——USART1重映射

    前言 为了使不同器件封装的外设 IO 功能数量达到最优 xff0c 可以把一些复用功能重新映射到其他一些引脚上 STM32 中有很多内置外设的输入输出引脚都具有重映射 remap 的功能 我们知道每个内置外设都有若干个输入输出引脚 xff0
  • Pg数据库比较时间大小

    postgresql 比较两个时间差大于 N个小时 摘要 PG 中时间想减后为interval xff0c 比较两个时间大于某个小时或者分钟等可以直接通过interval来实现 example1 xff1a 判断两个时间差大于4个小时 se
  • import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stac

    span class hljs keyword import span java util LinkedList span class hljs keyword import span java util Queue span class
  • 21-《电子入门趣谈》第四章_自己制作电路板-4.2洞洞板的介绍和经典案例使用教程

    好消息 xff1a 请在手机淘宝或闲鱼上搜索 电子入门趣谈 xff0c 有惊喜哦 我把全本电子入门趣谈的电子版 xff08 包括科技提升和理论升华部分 xff0c 共计50余万字 xff09 放到上面开始兜售啦 xff0c 如果您真的喜欢这
  • vlc-添加自定义的demuxer解复用插件----播放h264裸文件

    使用vlc3 0 6 在ubuntu 64bit上编译 xff0c vlc使用插件的方式组织对多种视频源的支持 xff0c 比如 avi mp4 mkv 等等 xff0c 这里想添加一个自己的demuxer xff0c 从一个h 264文件
  • 进程管理(五)--linux进程内核栈

    在进程创建时 xff0c 内核会为进程创建一系列数据结构 xff0c 其中最重要的就是上章学习的task struct结构 xff0c 它就是进程描述符 xff0c 表明进程在生命周期内的所有特征 同时 xff0c 内核为进程创建两个栈 x
  • [802.11]IEEE 802.11认证方式介绍

    一 802 11认证方式 802 11有开放系统认证 xff08 open system authentication xff09 和共享密钥认证 xff08 shared keyauthentication xff09 两种方式 1 1
  • 对‘std::xxx’未定义的引用

    出现一大串 对 std xxx 未定义的引用 的原因 xff1a 对于gcc后缀文件 xff0c 编译的时候可以用gcc g 43 43 xff0c 但是链接的时候要用g 43 43 xff0c 因为gcc和g 43 43 在编译的时候是相
  • 快速傅里叶变换

    FFT xff0c 即为快速傅氏变换 xff0c 是离散傅氏变换的快速算法 xff0c 它是根据离散傅氏变换的奇 偶 虚 实等特性 xff0c 对离散傅立叶变换的算法进行改进获得的 它对傅氏变换的理论并没有新的发现 xff0c 但是对于在计
  • C++项目开发中的一些问题及解决记录

    1 std vector类使用 xff1a https blog csdn net weixin 41743247 article details 90635931 2 vector求和 xff1a include lt numeric g
  • win32和android 的cocos2dx环境搭建详细教程

    转载 请注明出处 xff1a http blog csdn net aa4790139 article details 8086635 详细搭建步骤如下 xff1a 1 Android 开发环境搭建 Android开发环境搭建不是重点 相信
  • 快速傅里叶变换在信号处理中的应用

    傅里叶变换FT xff08 Fourier Transform xff09 是一种将信号从时域变换到频域的变换形式 它在声学 信号处理等领域有广泛的应用 计算机处理信号的要求是 xff1a 在时域和频域都应该是离散的 xff0c 而且都应该
  • 卷积

    随着机器学习的逐渐升温 xff0c 卷积神经网络这个专业词汇也越来越多地出现在我们眼前 卷积神经网络是一种前馈神经网络 xff0c 包括一维 二维以及三维卷积神经网络 这篇文章我们先来学习了解一下卷积的概念 在泛函分析中 xff0c 卷积是
  • 二叉树基础知识总结

    现实生活当中 xff0c 我们每个家庭都会有一个家谱 xff0c 来罗列家庭成员的关系 例如父亲下面的分支里有儿子或者女儿 xff0c 而父亲又属于祖父祖母的下部分支 其实这个家谱在计算机科学中映射的就是树形的表示方法 可见在很久以前 xf
  • 物联网(Iot)台灯设计完整教程(长图文)

    现如今随着物联网的概念深入人心 xff0c 物联网的设备也越来越普及 xff0c 本篇文章介绍的就是一个物联网台灯的设计 该设计主要包含物联网芯片开发 微信客户端开发 后台服务器端开发以及三个组件之间互联等 xff0c 其总体设计逻辑框图如
  • SVN打标签方法及在此过程中的问题处理

    所谓的 打标签 xff0c 我个人的理解是 xff1a 项目取得了阶段性成果 xff0c 需要保存在标签 xff08 tags文件夹 xff09 中 xff0c 以备不时之需 我采用的打标签的方法是 xff1a 1 在SVN客户端打标签 前
  • STM32 CAN 过滤器、滤波屏蔽器配置总结

    http blog csdn net jixiangrurui article details 39370027 一 过滤组 过滤器编号介绍 在 STM32 互联型产品中 xff0c CAN1 和 CAN2 分享 28 个过滤器组 其它 S