目录

0 DBC文件中“符号字符串”命名要求

1 DBC文件的标头

2 Bit Timing波特率定义

3 Node节点定义

4 Value Table值表定义

5 Message消息定义

5.1 标准帧Message定义举例

5.2 扩展帧Message定义举例

6 Signal信号定义

7 Value Table指标的绑定Signal信号

8 Comment注释定义

8.1 Node节点的注释举例

8.2 Message消息的注释举例

8.3 Signal信号的注释举例

9 User Defined Attribute用户定义的属性定义

9.1 Attribute属性定义

9.2 Attribute属性值

10 本文使用的DBC文件内容附录

11 结尾


关键字:

DBC:CANdb network file (Data Base for CAN)

描述CAN网络所需的所有信息都存储在CANdb network file中。CANdb network file的文件扩展名为DBC,可以使用CANdb编辑器(CAN数据库编辑器)或CANdb ++编辑器创建。

推荐阅读(单击下方文字即可跳转至对应博文):

1、【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC

2、【DBC专题】-2-CAN Signal信号的Multiplexor多路复用在DBC中实现

3、【DBC专题】-3-利用CANdb++ Editor在DBC文件添加帧CAN_ID和信号CAN_Signal

4、【DBC专题】-4-DBC文件中的Signal信号字节顺序Motorola和Intel介绍

5、【DBC专题】-6-Signal信号字节顺序Motorola_LSB/MSB/Sequential/Backward,Intel_Standard/Sequential等6类格式详解

通过前两个【DBC专题】中,我们已经掌握了DBC的创建和制作。在一些高阶应用(如DBC转Excel,DBC转XML,DBC转ARXML等等)中,了解这些显然是不够的,需要熟知其文件格式,毕竟“CANdb++ Editor”是参照某个标准,生成DBC文件的一个工具而已。

DBC文件描述单个CAN网络的通信。完成“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文中的第2章节,我们会得到一个Classic CAN的数据库DBC文件空模板(见下图左侧);完成第9章节,我们会得到一个较为完成DBC文件(见下图右侧),二者的差异下图。

一眼看去感觉有点“蒙”,下面我们就逐一来介绍这些“关键字”。

0 DBC文件中“符号字符串”命名要求

DBC文件中除了固定格式的关键字外,还有一些用户自定义的“符号字符串”,像Node,Message,Signal…的命名,其要求为:

  • 以字母字符或下划线开头,并且可能进一步由字母数字字符和下划线组成。
  • 长度最多为128个字符。为了与较旧的工具兼容,长度不得超过32个字符。

1 DBC文件的标头

关键字:VERSION

关键字:NS_   ,全称:new symbols

描述:

DBC文件包含带有版本(关键字:VERSION)和新符号条目(关键字:NS_)的标头。关键字:VERSION后面的双引号中通常是空的,或者是CANdb++编辑器使用的字符串。

该部分基本是固定的。

2 Bit Timing波特率定义

关键字:BS_

Bit Timing定义了网络的波特率和BTR寄存器的设置。该部分已过时,不再使用。但是,关键字“BS_”必须出现在DBC文件中。

举例:

BS_:

3 Node节点定义

关键字:BU_

格式:

BU_: node_1_name node_2_name…

描述:

a)CAN网络汇中所有节点的名称在此处定义,且定义的名称必须唯一;

b)节点与节点之间以“空格”分隔;

c)节点的命名必须满足“符号字符串”要求。

举例:

在“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文的第3章节我们定义两个节点:VCU和OBD,其在DBC文件中的描述为:

BU_: VCU OBD

4 Value Table值表定义

关键字:VAL_TABLE_

格式:

VAL_TABLE_ value_table_name value_table_value “value_description” …0 “value_description”;

描述:

a)一个value table中以“空格”分隔;

b)value_table_name表示value table的名称, 命名必须满足“符号字符串”要求;

c) value_table_value表示value table的值,十进制表示;

d) value_description表示value table的值描述;

e)当一个value table存在多个值描述时,以(value_table_value “value_description”)的形式接着追加,value table内的两个值描述以“空格”分隔;

f)完成一个value table定义,需以“分号;”结尾;

g)多个value table需要换行。

举例:

在“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文的第7章节我们定义两个value table:Voltage_state和OBD_status_description,其在DBC文件中的描述为:

VAL_TABLE_ OBD_status_description 2 "Shutdown" 1 "Run" 0 "Initialization" ;

VAL_TABLE_ Voltage_state 65535 "Invalid voltage" ;

5 Message消息定义

关键字:BO_

格式

BO_ message_id message_name: message_size transmitter

描述:

a)message_id表示CAN_ID,以十进制表示。在DBC文件中,CAN-ID必须唯一。如果CAN_ID的类型是“CAN Extended”,则在DBC文件中表示是“0x8000 0000 + 十六进制CAN_ID”的十进制转换;

b)message_name表示CAN_ID的消息名称,在在Message中必须是唯一, 命名必须满足“符号字符串”要求;

c) “: ” 冒号不能少;

d)message_size表示Message消息的长度,以字节为单位,十进制表示;

e)transmitter表示该Message的发送节点, 如果Message没有定义发送节点,则必须在此处输入字符串“Vector__XXX”;

5.1 标准帧Message定义举例

在“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文的第4章节我们定义一个Message:Test_ID_211,其在DBC文件中的描述为:

BO_ 530 Test_ID_212: 8 OBD

5.2 扩展帧Message定义举例

与4.1章节的差异是Type中选择了CAN Extended,注意在DBC文件中CAN_ID描述:

BO_ 2147484177 Test_ID_211: 8 OBD

6 Signal信号定义

关键字:SG_

格式

SG_ signal_name multiplexer_indicator : start_bit|signal_size@byte_order+value_type (factor,offset) [minimum|maximum] “unit” receiver

描述:

a) signal_name表示信号的名称。一个Message消息中的信号名称必须唯一。多个Message消息之间可以存在相同名称信号。命名必须满足“符号字符串”要求;

b) multiplexer_indicator含义:

  1. “ M”(大写)将信号定义为Multiplexor Signal。一个消息中只有一个信号可以是Multiplexor Signal;
  2. “m”(小写)后跟无符号整数,将信号定义为Multiplexed Signal;
  3. “空格”将信号定义为普通的Signal,表示没有复用。

c)“:”冒号不能少;

d)start_bit值指定信号在帧的数据域内的位置:Intel(小端)模式这里表示信号的LSB;Motorola(大端)模式这里表示信号的MSB;

e)signal_size表示信号的长度,以位为单位,十进制表示;

f)“@”不能少;

g)byte_order表示字节顺序。如果信号的字节顺序为Intel(小端),则byte_order为1;如果字节顺序为Motorola(大端),则byte_order为0;

h)value_type表示值类型。“+”表示无符号;“-”表示有符号;

i)(factor,offset)表示分辨率(不能为0)和偏移量,这两个值于该信号的原始值与物理值之间的转换。转换如下:物理值=原始值* factor + offset;

j)[minimum|maximum]表示最小值和最大值,定义了信号的有效物理值的范围;

k) unit表示信号的单位,为字符串类型;

l) receiver表示信号的接收方,信号的接收方可以是多个节点,接收方节点名称必须在关键字BU_中定义。如果信号没有定义接收方,则必须在此处输入字符串“Vector__XXX”。

举例:

在“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文的第6章节我们定义三个信号:OBD_status、Current_value和Voltage_value,其在DBC文件中的描述为:

BO_ 529 Test_ID_211: 8 OBD

SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-"  VCU

SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A"  VCU

SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V"  VCU

其在第5章生成的DBC文件效果如下:

BO_ 529 Test_ID_211: 8 OBD

SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-" Vector__XXX

SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A" Vector__XXX

SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V" Vector__XXX

以第6章为基础,拓展一下,新定义一个DCDC节点,同时DCDC也接收者三个信号:OBD_status、Current_value和Voltage_value,其在DBC文件效果如下:当信号被多个节点接收时,在DBC中的描述,节点与节点之间用“逗号,”隔开。

BU_: DCDC VCU OBD

BO_ 529 Test_ID_211: 8 OBD

SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-"  DCDC,VCU

SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A"  DCDC,VCU

SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V"  DCDC,VCU

在“【DBC专题】-2-CAN Signal信号的Multiplexor多路复用在DBC中实现”多路复用信号在DBC文件中的描述如下:

VAL_TABLE_ Package_Num_Value 1 "No.2" 0 "N0.1" ;

BO_ 530 Test_ID_212: 8 OBD

SG_ Voltage_6_Value m1 : 55|16@0+ (0.1,0) [0|6553.5] "V"  VCU

SG_ Voltage_5_Value m1 : 39|16@0+ (0.1,0) [0|6553.5] "V"  VCU

SG_ Voltage_4_Value m1 : 23|16@0+ (0.1,0) [0|6553.5] "V"  VCU

SG_ Voltage_3_Value m0 : 55|16@0+ (0.1,0) [0|6553.5] "V"  VCU

SG_ Voltage_2_Value m0 : 39|16@0+ (0.1,0) [0|6553.5] "V"  VCU

SG_ Voltage_1_Value m0 : 23|16@0+ (0.1,0) [0|6553.5] "V"  VCU

SG_ Package_Num M : 7|8@0+ (1,0) [0|1] "-"  VCU

7 Value Table指标的绑定Signal信号

关键字:VAL_

格式:

VAL_ message_id signal_name  value_table_value “value_description” …… 0 “value_description”;

描述:

a) message_id同Message中的关键字描述;

b) signal_name同Signal中的关键字描述;

c) value_table_value “value_description” …… 0 “value_description”同Value Table中的关键字描述。

d)完成一个value table与信号绑定,需以“分号;”结尾;

f)多个value table与信号绑定需要换行。

举例:

在“【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC”一文的第8章节我们将Value Table绑定了信号,其在DBC文件中的描述为:

VAL_TABLE_ OBD_status_description 2 "Shutdown" 1 "Run" 0 "Initialization" ;

VAL_TABLE_ Voltage_state 65535 "Invalid voltage" ;

BO_ 529 Test_ID_211: 8 OBD

SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-"  VCU

SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A"  VCU

SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V"  VCU

VAL_ 529 OBD_status 2 "Shutdown" 1 "Run" 0 "Initialization" ;

VAL_ 529 Voltage_value 65535 "Invalid voltage" ;

8 Comment注释定义

关键字:CM_

8.1 Node节点的注释举例

格式:

CM_ BU_ node_name “Comment”;

举例

CM_ BU_ VCU "VCU node in can network";

CM_ BU_ OBD "OBD node in CAN network";

8.2 Message消息的注释举例

格式:

CM_ BO_ message_id “Comment”;

举例

CM_ BO_ 529 "The CAN_ID of the test message is 0x211.";

8.3 Signal信号的注释举例

格式:

CM_ SG_ message_id signal_name “Comment”;

举例

CM_ SG_ 529 OBD_status "OBD working status signal";

CM_ SG_ 529 Current_value "OBD current signal.";

CM_ SG_ 529 Voltage_value "OBD voltage signal.";

9 User Defined Attribute用户定义的属性定义

User defined attributes是扩展DBC文件的对象属性的一种方法。这些附加属性必须使用具有属性默认值的属性定义来定义。对于具有为属性定义的值的每个对象,必须定义一个属性值。 如果未对对象定义属性值,则该对象的属性值为该属性的默认值。

9.1 Attribute属性定义

关键字:BA_DEF_

关键字:BA_DEF_DEF_

格式

BA_DEF_ object_type “attribute_name”attribute_value_type ;

BA_DEF_DEF_ attribute_name attribute_value ;

描述:

a) object_type表示BU_、BO_、SG_、EV_等关键字;

b) attribute_name表示属性的名称,一般比较固定,参照相应的标准;

c) attribute_value_type表示INT、FLOAT、STRING、ENUM、HEX等类型,各自的表示发如下:

  1. INT signed_integer signed_integer;
  2. HEX signed_integer signed_integer;
  3. FLOAT double double;
  4. STRING ;
  5. ENUM “char_1_string ”, “char_2_string”, “char_3_string”;

d) attribute_name同b);

e) attribute_value表示unsigned_integer 、 signed_integer、double |char_string

f)完成一个Attribute,需以“分号;”结尾;

g)多个Attribute与信号绑定需要换行。

举例:

BA_DEF_ SG_  "ProjectSignalRequirementNb" STRING ;

BA_DEF_ SG_  "GenSigStartValue" HEX 0 0;

BA_DEF_ SG_  "GenericSignalRequirementNb" STRING ;

BA_DEF_  "Manufacturer" STRING ;

BA_DEF_ BO_  "ProjectFrameRequirementNb" STRING ;

BA_DEF_ BO_  "GenMsgSendType" ENUM  "Cyclic","OnEvent","Cyclic_And_OnEvent";

BA_DEF_ BO_  "GenMsgCycleTime" INT 0 65535;

BA_DEF_ BO_  "GenericFrameRequirementNb" STRING ;

BA_DEF_DEF_  "ProjectSignalRequirementNb" "";

BA_DEF_DEF_  "GenSigStartValue" 0;

BA_DEF_DEF_  "GenericSignalRequirementNb" "";

BA_DEF_DEF_  "Manufacturer" "BMW";

BA_DEF_DEF_  "ProjectFrameRequirementNb" "";

BA_DEF_DEF_  "GenMsgSendType" "Cyclic";

BA_DEF_DEF_  "GenMsgCycleTime" 0;

BA_DEF_DEF_  "GenericFrameRequirementNb" "";

9.2 Attribute属性值

关键字:BA_

格式

BA_ attribute_name BU_ node_name attribute_value;

BA_ attribute_name BO_ message_id attribute_value;

BA_ attribute_name SG_ message_id signal_name attribute_value;

BA_ attribute_name EV_ env_var_name attribute_value;

举例

BA_ "GenMsgSendType" BO_ 530 2;

BA_ "GenMsgCycleTime" BO_ 530 1000;

BA_ "GenMsgSendType" BO_ 529 1;

BA_ "GenMsgCycleTime" BO_ 529 100;

BA_ "GenSigStartValue" SG_ 530 Voltage_6_Value 3000;

BA_ "GenSigStartValue" SG_ 530 Voltage_5_Value 3000;

BA_ "GenSigStartValue" SG_ 530 Voltage_4_Value 3000;

BA_ "GenSigStartValue" SG_ 530 Voltage_3_Value 3000;

BA_ "GenSigStartValue" SG_ 530 Voltage_2_Value 3000;

BA_ "GenSigStartValue" SG_ 530 Voltage_1_Value 3000;

BA_ "GenSigStartValue" SG_ 529 OBD_status 2;

BA_ "GenSigStartValue" SG_ 529 Current_value 0;

BA_ "GenSigStartValue" SG_ 529 Voltage_value 768;

10 本文使用的DBC文件内容附录

VERSION ""NS_ : NS_DESC_CM_BA_DEF_BA_VAL_CAT_DEF_CAT_FILTERBA_DEF_DEF_EV_DATA_ENVVAR_DATA_SGTYPE_SGTYPE_VAL_BA_DEF_SGTYPE_BA_SGTYPE_SIG_TYPE_REF_VAL_TABLE_SIG_GROUP_SIG_VALTYPE_SIGTYPE_VALTYPE_BO_TX_BU_BA_DEF_REL_BA_REL_BA_DEF_DEF_REL_BU_SG_REL_BU_EV_REL_BU_BO_REL_SG_MUL_VAL_BS_:BU_: DCDC VCU OBD
VAL_TABLE_ Package_Num_Value 1 "No.2" 0 "N0.1" ;
VAL_TABLE_ OBD_status_description 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_TABLE_ Voltage_state 65535 "Invalid voltage" ;BO_ 530 Test_ID_212: 8 OBDSG_ Voltage_6_Value m1 : 55|16@0+ (0.1,0) [0|6553.5] "V"  VCUSG_ Voltage_5_Value m1 : 39|16@0+ (0.1,0) [0|6553.5] "V"  VCUSG_ Voltage_4_Value m1 : 23|16@0+ (0.1,0) [0|6553.5] "V"  VCUSG_ Voltage_3_Value m0 : 55|16@0+ (0.1,0) [0|6553.5] "V"  VCUSG_ Voltage_2_Value m0 : 39|16@0+ (0.1,0) [0|6553.5] "V"  VCUSG_ Voltage_1_Value m0 : 23|16@0+ (0.1,0) [0|6553.5] "V"  VCUSG_ Package_Num M : 7|8@0+ (1,0) [0|1] "-"  VCUBO_ 529 Test_ID_211: 8 OBDSG_ OBD_status : 39|8@0+ (1,0) [0|255] "-"  DCDC,VCUSG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A"  DCDC,VCUSG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V"  DCDC,VCUCM_ BU_ DCDC "DCDC node in CAN network";
CM_ BU_ VCU "VCU node in can network";
CM_ BU_ OBD "OBD node in CAN network";
CM_ BO_ 530 "The CAN_ID of the test message is 0x212.";
CM_ SG_ 530 Voltage_6_Value "Value of Voltage_6.";
CM_ SG_ 530 Voltage_5_Value "Value of Voltage_5.";
CM_ SG_ 530 Voltage_4_Value "Value of Voltage_4.";
CM_ SG_ 530 Voltage_3_Value "Value of Voltage_3.";
CM_ SG_ 530 Voltage_2_Value "Value of Voltage_2.";
CM_ SG_ 530 Voltage_1_Value "Value of Voltage_1.";
CM_ SG_ 530 Package_Num "Number of Voltage.";
CM_ BO_ 529 "The CAN_ID of the test message is 0x211.";
CM_ SG_ 529 OBD_status "OBD working status signal.";
CM_ SG_ 529 Current_value "OBD current signal.";
CM_ SG_ 529 Voltage_value "OBD voltage signal.";
BA_DEF_ SG_  "ProjectSignalRequirementNb" STRING ;
BA_DEF_ SG_  "GenSigStartValue" HEX 0 0;
BA_DEF_ SG_  "GenericSignalRequirementNb" STRING ;
BA_DEF_  "Manufacturer" STRING ;
BA_DEF_ BO_  "ProjectFrameRequirementNb" STRING ;
BA_DEF_ BO_  "GenMsgSendType" ENUM  "Cyclic","OnEvent","Cyclic_And_OnEvent";
BA_DEF_ BO_  "GenMsgCycleTime" INT 0 65535;
BA_DEF_ BO_  "GenericFrameRequirementNb" STRING ;
BA_DEF_  "BusType" STRING ;
BA_DEF_DEF_  "ProjectSignalRequirementNb" "";
BA_DEF_DEF_  "GenSigStartValue" 0;
BA_DEF_DEF_  "GenericSignalRequirementNb" "";
BA_DEF_DEF_  "Manufacturer" "BMW";
BA_DEF_DEF_  "ProjectFrameRequirementNb" "";
BA_DEF_DEF_  "GenMsgSendType" "Cyclic";
BA_DEF_DEF_  "GenMsgCycleTime" 0;
BA_DEF_DEF_  "GenericFrameRequirementNb" "";
BA_DEF_DEF_  "BusType" "CAN";
BA_ "GenMsgSendType" BO_ 530 2;
BA_ "GenMsgCycleTime" BO_ 530 1000;
BA_ "GenMsgSendType" BO_ 529 1;
BA_ "GenMsgCycleTime" BO_ 529 100;
BA_ "GenSigStartValue" SG_ 530 Voltage_6_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_5_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_4_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_3_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_2_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_1_Value 3000;
BA_ "GenSigStartValue" SG_ 529 OBD_status 2;
BA_ "GenSigStartValue" SG_ 529 Current_value 0;
BA_ "GenSigStartValue" SG_ 529 Voltage_value 768;
VAL_ 530 Package_Num 1 "No.2" 0 "N0.1" ;
VAL_ 529 OBD_status 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_ 529 Voltage_value 65535 "Invalid voltage" ;

11 结尾

【DBC专题】-5-DBC文件格式解析相关推荐

  1. 【DBC专题】-2-CAN Signal信号的Multiplexor多路复用在DBC中实现

    目录 0 关键字/术语描述 1有关"多路复用"概念 2 创建Message中"信号多路复用" 2.1 给Multiplexor Signal类型的信号创建合适的 ...

  2. 【DBC专题】-4-DBC文件中的Signal信号字节顺序Motorola和Intel介绍

    目录 0 引言 1 小端(Intel)编码格式 1.1 Signal信号不跨字节 1.2 Signal信号跨字节 2 大端(Motorola)编码格式 2.1 Signal信号不跨字节 2.2 Sig ...

  3. 【DBC专题】-7-在DBC中创建一个Signal Group信号组

    目录 1 创建Signal Group信号组​ 2 创建Signal Group信号组前后DBC内容的差异 3 结尾 关键字: CANdb++ Editor CAN Signal SG=Signal ...

  4. 转载:dbc文件格式解析

    首发于 汽车ECU开发 写文章 dbc文件格式解析 小木子 ​ 关注他 10 人 赞同了该文章 dbc对于汽车工程师来说,应该说是很熟了,它是用于描述整车CAN通信矩阵的文件,包括CAN消息的ID定义 ...

  5. Android init.rc文件格式解析

    /****************************************************************************** Android init.rc文件格式解 ...

  6. 【Android 逆向】Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )

    文章目录 一.Android 逆向方法 1.静态逆向解析 2.函数调用分析 3.动态运行跟踪 4.运行日志分析 5.文件格式解析 6.敏感信息分析 7.网络信息监控 8.软件动态调试 9.环境伪装模拟 ...

  7. gcc 删除elf_ELF文件格式解析器 原理 + 代码

    本文为看雪论坛精华文章 看雪论坛作者ID:菜鸟m号 附件链接:[原创] ELF文件格式解析器 原理 + 代码 写在前面: 读<Linux二进制>,发现作者对 ELF文件格式部分并没有做详细 ...

  8. cfile清空文件内容_编译-链接-加载 :ELF文件格式解析

    摘要:对于C++的初学者,经常在程序的编译或者加载过程中遇到很多错误,类似undefined reference to ... 和 GLIBCXX_3.4.20 not found 等.这些错误都涉及 ...

  9. mp4文件格式解析(一)

    原文地址:mp4文件格式解析(一)作者:可下人间 目前MP4的概念被炒得很火,也很乱.最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准.随后MP4概念被转移到视频上,对应的是MPE ...

最新文章

  1. java jar 配置_java jar包与配置文件的写法
  2. Scrapy项目实战
  3. mysql 启动个关闭命定_mysql利用phpmyadmin实现数据库同步更新
  4. JS:javaweb——a标签实现跳转并打开新窗口
  5. 豆瓣评分9.4!这一部纪录片,探秘中国人迹罕至的未至之境!
  6. gtx1660是什么级别的_GTX1660Ti到底属于什么系列?Nvidia一句话定性了
  7. pecl安装扩展(首选)
  8. TortoiseGit使用技巧
  9. Intel® Nehalem/Westmere架构/微架构/流水线 (8) - 重复字符串指令增强
  10. 【静脉检测】基于matlab手指静脉图像检测【含Matlab源码 1654期】
  11. 解决aqua data studio 中文乱码问题
  12. opencv python 人脸识别 相似度_如何使用OpenCV3直方图方法进行人脸相似度对比
  13. dw添加下拉菜单_Dreamweaver怎么创建下拉菜单
  14. html背景左右渐变,css 背景 上下渐变 左右渐变
  15. DHCP自动分配IP地址
  16. 用Tableau制作10种漂亮的饼图
  17. 北京地铁,4号线换乘13号线,用时最短换乘线路
  18. 智能化汽车3D ToF摄像头
  19. 关于Flex布局属性详解
  20. 用ArcMap打开MXD文件报One or more layers failed to draw错误!

热门文章

  1. TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
  2. listdir() 方法的使用
  3. java算法--冒泡算法
  4. linux下gz和tar.gz、zip压缩解压
  5. 编译之 jack-server报错
  6. Sentinel @SentinelResource 详解
  7. train_test_split(),随机划分训练集和测试集的函数
  8. 数据字典(Data Dictionary)
  9. Latex使用本地字体
  10. 什么是正向代理,开放的代理软件使用