当前位置:  编程技术>移动开发
本页文章导读:
    ▪CCS工程中运用EMCV所需做的配置和修改(独家!)        CCS工程中使用EMCV所需做的配置和修改(独家!)1、从网上下载EMCV(嵌入式平台的OpenCV)程序包,在CCS下新建lib工程,使用EMCV程序包中的cv源文件和cxcore源文件分别编译生成库文件dm642_cv.lib.........
    ▪ 3-类、对象跟方法        3-类、对象和方法 前两章参考: 1-引言 2-Objective-C 编程 今天把第三章过了一下,本章简单的把Objective-C的面向对象介绍了一下。 主要关注Objective-C定义类相关的语法,面向对象方面的和其.........
    ▪ 基于互换芯片的五元组过滤功能       基于交换芯片的五元组过滤功能基于交换芯片的五元组的PCL规则过滤功能 作者: 韩大卫@吉林师范大学 2012.12.10 Not Approved by Document Control Review Copy Only 基于Marvell 98DX51xx/81xx交换芯片的五元.........

[1]CCS工程中运用EMCV所需做的配置和修改(独家!)
    来源: 互联网  发布时间: 2014-02-18
CCS工程中使用EMCV所需做的配置和修改(独家!)
1、从网上下载EMCV(嵌入式平台的OpenCV)程序包,在CCS下新建lib工程,使用EMCV程序包中的cv源文件和cxcore源文件分别编译生成库文件dm642_cv.lib和dm642_cxcore.lib,将这两个库文件添加到工程中,将C++编程所使用的库文件rts64plus.lib添加到工程中。

2、在Build Option--Compiler--Preprocessor--Include Search Pach处添加$(Proj_dir)\inc,指定头文件路径,将EMCV文件夹中的所有头文件复制到工程目录下的inc文件夹中。

3、在Build Option--Linker链接选项中添加--no_sym_merge,否则会出现一串警告。

4、在DSP/BIOS中增大System选项MEM中SDRAM属性的heap size,将MEM选项的Segment For malloc()/free()修改为SDRAM,以存储EMCV的图像数据,若使用ISRAM或者heap size过小,程序运行时均会报内存不足的错误。

5、新建.cpp文件编写源代码,或者修改原先的.c文件为.cpp文件,因为C语言编译器不支持EMCV中的某些C++语法。

6、由于C++编译器对类型的检测比C编译器更为严格,使用void*指针定义的变量在C++中需要手工强制转换,否则会出现编译错误,可在出现错误时针对错误来源进行更改。

7、包含"cv.h"和"cxcore.h"这两个头文件,结合之前添加的EMCV库文件,CCS工程中已经包含了EMCV的所有资源,接下来就可以放心的使用EMCV的数据结构和图像处理函数了。

注:转载请注明出处,作者蛋蛋强。

    
[2] 3-类、对象跟方法
    来源: 互联网  发布时间: 2014-02-18
3-类、对象和方法

前两章参考:

1-引言

2-Objective-C 编程


今天把第三章过了一下,本章简单的把Objective-C的面向对象介绍了一下。

主要关注Objective-C定义类相关的语法,面向对象方面的和其它语言差不多。比较接近C++。


对象就是一个物件。面向对象的程序设计可以看成一个物件和你想对它做的事情。

对象(名词)----》做(动词),先定义类(Class),再定义方法(Method)。

C语言是典型的面向过程性语言。

在C语言中,通常是先考虑要做什么,然后才关注对象,这几乎总是与面向对象的思考过程相反。

做(动词)-----》对象(名词),先定义函数(Function),再定义模块(Module)。

我这里写上英文是因为,只有那个英文才能准确表达它的含义。


类的独特存在就是一个实例,对实例执行的操作称为方法。在某些情况下,方法可以应用于类的实例或类本身。

对象使用方法可以影响对象的状态。

关键概念:对象是类的独特表示,每个对象都包含一些通常对该对象来说是私有的信息(数据)。方法提供访问和改变这些数据的手段。


Objective-C采用特定的语法对类和实例应用方法:

[ ClassOrInstance method];


请求一个类或实例来执行某个操作时,就是向它发送一条消息,消息的接收者称为Receiver。所以,可以用另外一种方式描述:

[ receiver message];


这里我要说两句,Objective-C的Method操作执行,一种理解是发送消息,另外一种是方法调用。这个无所谓的。准确额是第一种啊。


程序在逻辑上分为下面3个部分:

@interface

@implementation

program


@interface部分用于描述类和类的方法;

@implementation部分用于描述数据(类对象的实例变量存储的数据),并实现在接口中声明方法的实际代码;

program部分的程序代码实现了程序的预期目的。


@interface部分一般格式如下:

@interface NewClassName: ParentClassName

propertyAndMethodDeclarations;

@end


按照约定,类名以大写字母开头。实例变量、对象以及方法的名称,通常以小写字母开头。确定名称时,要遵循找到能反映变量或对象使用意图的名称。程序具有更强的自解释性(Self-explanatory)

制定名称的规则相当简单:名称必须以字母或下划线(_)开头,之后可以使任何大小写字母、下划线或者数字的组合。另外像$空格等都是非法,记住不能数字开头、不能使用保留字。


再次强调,Objective-C是大小写敏感的。sum和Sum是两个东西。

类或实例方法,开头为负号(-)表示实例方法,正号(+)表示类方法。

返回类型放在开头的负号或正号之后的圆括号中。有参数时,在方法名后加冒号(:),再加上参数类型和参数名。具体的如下例所示:

-(int) currentAge;

-(void) print;

-(void) setNumber: (int) n;


@implementation部分的一般格式如下:

@inplementation NewClassName

{

memberDeclarations;

}

methodDefinitions;

@end

需要注意的是:使用@synthesize指令能让编译器自动为你生成一些方法。


alloc是allocate的缩写。如果向某个类发送alloc消息,便获得该类的新实例。这个alloc方法继承自父类。alloc方法保证对象的所有实例都变成初始状态。当然想要适当的方法时,必须重新初始化,调用init方法。经常地情况是把alloc和init合在一起,或者直接使用new方法。例如:

Fraction *myFraction;

myFraction = [Fraction alloc];//类方法

myFraction = [myFraction init];//实例方法


Fraction *myFraction = [[Fraction alloc] init];//二合一


Fraction *myFraction = [Fraction new];//类方法,new包含alloc和init


记住,方法执行的上下文环境就是接收到消息的对象。

取值方法(get)和赋值方法统(set)称为访问方法(accessor)。


//

//  main.m

//  3_2_class_object_method

//

//  Created by forlong401 on 12-12-21.

//  Copyright (c) 2012年 forlong401. All rights reserved.

//


#import <Foundation/Foundation.h>


//-------- @interface section ----------

@interface Fraction: NSObject

-(void) print;

-(void) setNumerator: (int) n;

-(void) setDenominator: (int) d;

@end


//-------- @implementation section ----------

@implementation Fraction

{

    int numerator;

    int denominator;

}

-(void) print

{

    NSLog(@"%i/%i", numerator, denominator);

}

-(void) setNumerator:(int)n

{

    numerator = n;

}

-(void) setDenominator:(int)d

{

    denominator = d;

}

@end


//-------- program section ----------


int main(int argc, const char * argv[])

{


    @autoreleasepool {

        Fraction *myFraction;

        

        // new object

        myFraction = [Fraction alloc];

        myFraction = [myFraction init];

        

        // set

        [myFraction setNumerator: 1];

        [myFraction setDenominator: 3];

        

        // print all

        NSLog(@"Hello, World!");

        [myFraction print];

    }

    return 0;

}





    
[3] 基于互换芯片的五元组过滤功能
    来源: 互联网  发布时间: 2014-02-18
基于交换芯片的五元组过滤功能
基于交换芯片的五元组的PCL规则过滤功能


作者: 韩大卫@吉林师范大学

2012.12.10

Not Approved by Document Control
Review Copy Only


基于Marvell 98DX51xx/81xx交换芯片的五元组等的策略规则(PCL)过滤功能.现将部分的功能的底层实现予以简单介绍.

Contact author for detailed information: handawei@jusontech.com


Forward:

Marvell对PCL概念的定义是:

The Policy engine performs per-flow processing of packets received and  transmitted by the device.A packet can be bound to one or more sets of policy rules, which we call Policy Control Lists (PCL).

PCL:策略控制列表.可以理解为在交换芯片上实现的过滤规则列表.有一种类似的概念叫ACL.

ACL:Access Control List . 访问控制列表

一般来讲,ACL是用户层上下发的规则, 最终通过交换芯片或CPU来实现的,是一种用户层上定义的规则.PCL是底层的概念, 是交换芯片内部对此功能的定义,驱动工程师在操作系统底层软件提取出此交换芯片的PCL过滤功能(比如根据五元组,根据VLAN-ID, 根据是否ARP报文等等),封装成API类库供用户层使用, 用户层就可以综合使用这些API做成一条条过滤规则.

PCL是交换芯片较高级的功能,一般普通的二层/三层交换机的使用的低端交换芯片是没有的此功能的.很多网络安全设备(如防火墙,分流器等)的一部分实现也是基于此机制.


根据Marvell的datasheet, PCL对报文的处理是在L2/L3/L4之前,即

 		      Ingress 									Egress
Packet	   -------------->    PCL     ----->  L2    ------> L3 -------> L4 ...-------------->  


报文 首先经过IPCL(Ingress PCL) Engine  处理, 根据报文的类型和PCL-ID生成一张IPCL Table , 此表的数据结构大致为:

9bit---0bit  PCL-ID
..
29bit---18bit   VID
..
49bit---42bit  Ip Protocol
..
130bit---99bit  SIP[4]
162bit---131bit  DIP[4]

...


完成此IPCL table后, 拿此表在TCAM中进行查找匹配, 匹配成功的条件是: 首先要PCL-ID相同, 如果规则制定了过滤条件, 那么依次匹配自定义的成员, 例如: 如想过滤出报文中VID为100的,那么只有IPCL table中VID位置为100 的数据结构(即相应的报文)可以被筛选出来, 进而执行TCAM中此表对对应的ACTION.从而完成了一次PCL过滤.

根据以上描述, 可以这样定义一个数据结构用来作为函数参数, 传递用户层的PCL指定规则

以下是PCL动作部分的定义, 关于IPCL Table等部分的制作略.

typedef struct  sw_pcl_action {
    BOOL_T              		        enable;
    uint32_t                		index;		//规则编号
    uint16_t                		pclid;		//PCL-ID
    pcl_rule_key_t      		pcl_key;    	//过滤依据
    pcl_rule_action_t   	        pcl_action;       //动作描述
}sw_pcl_action_t;                                                                                                                
 
index即为TCAM查表做匹配时要匹配的表的编号.一个index编号为一条PCL规则, 有多少规则就需要执行多少次匹配查找.


其中,
typedef struct pcl_rule_key {
    char                    	sip[4];			//源ip地址
    uint8_t                 smask;			//源ip地址掩码
    char                   	dip[4];
    uint8_t                 dmask;
    uint16_t               sport;      		         //源端口号
    uint16_t               spmask;			//掩码
    uint16_t               dport;      
    uint16_t               dpmask;	
    uint8_t                	protocol;		         //协议号
    uint8_t                 	tag;		
    uint16_t                vid;				//VID
....
}pcl_rule_key_t;
 

typedef struct  pcl_rule_action {    
    uint32_t               		intf_id;		//出接口
    pcl_action_cmd_type     	intf_cmd;		//动作类型
    InterFace_Type          		intf_type;		//接口类型
}pcl_rule_action_t;     
 
//动作类型
typedef enum {
    PCL_ACT_FOR = 0,				//默认转发
    PCL_ACT_DROP,					//丢弃
    PCL_ACT_NOT					//不做动作
}pcl_action_cmd_type;
 
//接口类型
typedef enum {
    PCL_INTF_PORT = 0,				//默认是端口
    PCL_INTF_VLAN,					//VLAN
    PCL_INTF_TRUNK,				//trunk
    PCL_INTF_DEV,					...
    PCL_INTF_VIDX,
    PCL_INTF_INDEX,
 ....
}InterFace_Type;
 

常用的过滤有如下:

基于五元组, 即基于源IPv4地址,源端口号,目的IPv4地址,目的端口号,协议号.

基于报文本身是否有tag.

基于报文本身的VLAN-ID.

基于报文是否为ARP报文.

基于报文是否为IP报文.

基于报文是否为IPv4/v6报文.

基于报文是否有分片.


如果使用VID子作为过滤条件, 此VID为进过PVID处理后, 报文此时携带的tag中的VLAN-ID.


将VID装入 pcl_action.pcl_key.vid , 通过msg发送至底层驱动.底层函数解析出此vid,将其赋值给配置寄存器的数据结构.

  
	mask->ruleStdIpv4L4.common.vid                  = 0xffff;
	pattern->ruleStdIpv4L4.common.vid               = key_info.vid;

理论上此VLAN-ID可配合掩码使用,实现过滤指定范围内的VLAN-ID. 但此功能目前尚未提供.
可参考后面端口号 + 掩码部分.



基于五元组的过滤可以使用掩码.说明如下:

如果使用基于源IP地址 + 掩码作为过滤条件, 如192.163.10.10/24


需要将192.163.10.10 分成四个uint8_t 类型的数值, 装在 uint8_t key_info.sip[4] 中. 

最后, 将此key_info.sip [] 封装到一个数据结构msg中, 通过socket发送到底层驱动,底层函数收到此msg, 解析出key_info.sip [] 的成员, 将4个成员以网络字节序分步填充一个uint32_t类型的成员.

   pattern->ruleStdIpv4L4.sip.u32Ip  |= (key_info.sip[0] & 0xff) << 24; 
   pattern->ruleStdIpv4L4.sip.u32Ip  |= (key_info.sip[1] & 0xff) << 16;                                                        
   pattern->ruleStdIpv4L4.sip.u32Ip  |= (key_info.sip[2] & 0xff) << 8;
   pattern->ruleStdIpv4L4.sip.u32Ip  |= (key_info.sip[3] & 0xff) << 0;
             
note :
key_info.sip[]承载的是此IP地址, 即192.163.10.10
pattern->ruleStdIpv4L4.sip.u32Ip  就是底层需要填充的uint32_t成员, 配置交换芯片寄存器时,依赖的即此变量与mask部分中对应变量的按bit相与的结果.


同时, 需要将掩码24也传至底层, 填充u32Ip同时配置一个相应的uint32_t mask 的掩码.

 mask->ruleStdIpv4L4.sip.u32Ip = ~0<<(32 - key_info.smask);    

(如果key_info.smask 为24, 得出结果为: 0xffffff00)

note : 
key_info.smask 承载的是此IP地址的掩码, 即24.
mask->ruleStdIpv4L4.sip.u32Ip 是需要配置的掩码, 配置交换芯片寄存器时, 需要将pattern部分与此mask的相应部分按bit相与, 其结果为寄存器真正的有效位.


最后还要:

pattern->ruleStdIpv4L4.sip.u32Ip &= mask->ruleStdIpv4L4.sip.u32Ip;

要保证mask为0 的部分 pattern的也为0 .

例:

如 mask->ruleStdIpv4L4.sip.u32Ip 为 0xffffff00 (mask 为24) ,
pattern->ruleStdIpv4L4.sip.u32Ip 为  0xc0a30a0a( IP为 192.163.10.10)

那么pattern->ruleStdIpv4L4.sip.u32Ip最后需要变为 0xc0a30a00.



使用目的IP地址 + 掩码 作为过滤的判定条件, 如 192.163.10.20/24
则将192.163.20.10 分成四个uint8_t 类型的数值, 装在 uint8_t key_info.dip[4]中, 其他原理同上. 

使用源端口号作为过滤判定条件, 如 200 .  

需要将此数值 传入uint16_t类型的key_info.sport.  通过msg发送出去, 在底层, 

将此值拆成两个uint8_t 数值, 按网络字节序传入 pattern->ruleStdIpv4L4.l4Byte1和 pattern->ruleStdIpv4L4.l4Byte0中. 其对应的掩码使用0xff.



    	 mask->ruleStdIpv4L4.l4Byte1          = 0xff;
        pattern->ruleStdIpv4L4.l4Byte1       = (GT_U8)(key_info.sport & 0xff);
                                         
        mask->ruleStdIpv4L4.l4Byte0           = 0xff;
        pattern->ruleStdIpv4L4.l4Byte0        = (GT_U8)(key_info.sport >> 8);                                                        


使用协议号作为过滤判定条件, 将数值传入 key_info.protocol,底层驱动中填入mask和pattern的如下部分.


        mask->ruleStdIpv4L4.commonStdIp.ipProtocol      = 0xff;
        pattern->ruleStdIpv4L4.commonStdIp.ipProtocol   = key_info.protocol;

使用目的端口号作为过滤的判定条件, 将数值传入key_info.dport, 其他原理同上.


************** ************************************

以下部分与驱动无关,可以略过.

***************** *********************************



使用一段范围的源端口号作为过滤的判定条件,  如 80-8080.需要使用一个或多个配合端口号的掩码共同使用.


简单的应用例子:

源端口号64-65535,即大于源端口号大于等于64的范围内作为过滤判定条件.



64 的二进制 为:  0000 0000 0100 0000


那么需要的掩码为: 1111 1111 1100 0000 

即0xffc0


令  

key_info.sport	= 64;
key_info.spmask	= 0xffc0;


在底层:

    	 mask->ruleStdIpv4L4.l4Byte1          = (GT_U8)(key_info.spmask & 0xff); 
        pattern->ruleStdIpv4L4.l4Byte1       = (GT_U8)(key_info.sport  & 0xff);
                                         
        mask->ruleStdIpv4L4.l4Byte0           = (GT_U8)(key_info.spmask >> 8); 
        pattern->ruleStdIpv4L4.l4Byte0        = (GT_U8)(key_info.sport  >> 8);                                                        


如果源端口号的二进制中1的bit为多个, 那么需要多个mask来配合使用. 即多个PCL规则配合使用.



如: value = 80   


根据特定算法, 可以得出一下几个mask:


80:			0000 0000 0101 0000


mask1:  	1111 1111 1000 0000   

mask2:  	0000 0000 0110 0000	
	
mask3:  	0000 0000 0101 0000	

note:文档附录中包含此计算掩码数组的函数


pattern1:	1000 0000 0000 0000
pattern1:	0100 0000 0000 0000
pattern1:	0010 0000 0000 0000
pattern1:	0001 0000 0000 0000
pattern1:	0000 1000 0000 0000
pattern1:	0000 0100 0000 0000
pattern1:	0000 0010 0000 0000
pattern1:	0000 0001 0000 0000
pattern1:	0000 0000 1000 0000

pattern2:	0000 0000 0110 0000
pattern3:	0000 0000 0101 0000

note: 如果(x & mask )== pattern  ,那么这是一次成功匹配.

每个mask均有相同的转发规则, 报文依次匹配mask1,mask2,mask3 , 命中任一个mask,说明报文的源端口号大于或等于80.执行PCL的设定的转发动作, 如果都没有匹配成功, 不在次范围内, 不执行次系列的PCL转发规则.






由于通过掩码的方式只能判断出一个数是否在一个值之上,即是否大于或等于一个数,因此,在处理一个范围的上限时, 需要对PCL的动作进行设定, 即, 当判断出一个数大于此范围的最大值时, 需要对其执行丢弃或不执行此系列的PCL转发规则处理.





例: 过滤出源端口号为: 80-8000范围内的报文,执行PCL动作1.


实现此功能分两步:  

一, 过滤出源端口号大于或等于80的报文, 命中规则的报文进入第二阶段, 没有命中规则的报文不跳出判断,  不执行PCL动作1,交给下个报文处理机制处理.

二, 过滤出源端口号大于或等于8001的报文,  命中规则的报文执行PCL_ACT_NOT处理.命中规则的报文执行PCL_ACT_FOR处理, 即实现PCL动作1.


Note :  PCL的动作处理类型有三种为 :


      PCL_ACT_FOR  		转发报文
      PCL_ACT_DROP		丢弃报文
      PCL_ACT_NOT

          
默认的类型为 PCL_ACT_FOR. 默认转发.





第一阶段, 根据80-8000 中的下限80得出以下mask数组:

80 : 			0000 0000 0101 0000

mask1:			1111 1111 1000 0000	
mask2:			0000 0000 0110 0000	
mask3:			0000 0000 0101 0000	


pattern1-2:		0100 0000 0000 0000
pattern1-3:		0010 0000 0000 0000
pattern1-4:		0001 0000 0000 0000
pattern1-5:		0000 1000 0000 0000
pattern1-6:		0000 0100 0000 0000
pattern1-7:		0000 0010 0000 0000
pattern1-8:		0000 0001 0000 0000
pattern1-9:		0000 0000 1000 0000

pattern2:		0000 0000 0110 0000
pattern3:		0000 0000 0101 0000
note: 如果(x & mask )== pattern  ,那么这是一次成功匹配.

每个mask被分别制定为相应的PCL规则 ,其对报文的处理类型是 PCL_ACT_FOR

报文依次配置mask1,mask2,mask3,如命中任意一个mask, 那么进入第二阶段进行范围上限的过滤, 其他情况的报文不再执行本系列PCL的过滤.



第二阶段 , 由于本算法作用是过滤出大于或等于一个数的范围,那么对于80-8000的上线8000,需要定义一个uint16_t mask_ceiling = 8001. 按此值得出mask数组:


8001 :			0001 1111 0100 0001

mask1:			1110 0000 0000 0000		
mask2:			0001 0000 0000 0000		
mask3:			0000 1000 0000 0000		
mask4:			0000 0100 0000 0000
mask5:			0000 0010 0000 0000		
mask6:			0000 0001 1000 0000		
mask7:			0000 0000 0100 0000		
mask8:			0000 0000 0011 1110			
mask9:			0000 0000 0000 0001		


pattern1-1:		1000 0000 0000 0000
pattern1-2:		0100 0000 0000 0000
pattern1-3:		0010 0000 0000 0000
pattern2:		0001 0000 0000 0000
pattern3:		0000 1000 0000 0000
pattern4:		0000 0100 0000 0000
pattern5:		0000 0010 0000 0000
pattern6-1:		0000 0001 0000 0000
pattern6-2:		0000 0000 1000 0000
pattern7:		0000 0000 0100 0000
pattern8-1:		0000 0000 0010 0000
pattern8-2:		0000 0000 0001 0000
pattern8-3:		0000 0000 0000 1000
pattern8-4:		0000 0000 0000 0100
pattern8-5:		0000 0000 0000 0010
pattern9:		0000 0000 0000 0001




如果报文命中了任一一个mask, 说明报文的源端口号大于或等于8001, 即,不在80-8000 范围之内,则将报文执行PCL_ACT_NOT处理.

这样, 源端口号在80-8000范围内的报文执行PCL_ACT_FOR处理, 不在此范围内的报文执行PCL_ACT_NOT处理,即不经过次系列PCL处理.


根据交换芯片datasheet.  TCAM 的匹配查找可以分为两次, IPCL0 Lookup 和IPCL1 Lookup

那么, 将IPCL0 Lookup阶段的匹配动作设定为 PCL_ACT_FOR, IPCL1 Lookup 阶段的匹配动作设PCL_ACT_NOT, 即可实现如下处理流程:



Packet ----> IPCL0 Lookup 	  	NO
					|			----->	  	PCL_ACT_NOT
				Y	|
				E	|	
				S	|	
					|	
				       ↓		
			  IPCL1 Lookup	  	NO
					|			----->	  	IPCL0 ACTION
				Y	|
				E	|	
				S	|	
					|	
				       ↓							
				PCL_ACT_NOT					

第一阶段,  过滤出源端口号大于或等于80的报文, 命中规则的报文带着PCL_ACT_FOR的动作命令进入第二阶段再次进行过滤.


第二阶段,  过滤出源端口号大于或等于8001的报文, 命中规则的报文执行 PCL_ACT_NOT,取消PCL规则转发, 没有命中IPCL1阶段的报文, 即小于8001的报文,执行IPCL0阶段的动作.实现转发到指定接口或VLAN.


总上, 完成此功能需要的PCL规则共有如下:



IPCL0 : 

mask1:			1111 1111 1000 0000	


mask1:			1111 1111 1000 0000	
pattern1-2:		0100 0000 0000 0000

mask1:			1111 1111 1000 0000	
pattern1-3:		0010 0000 0000 0000

mask1:			1111 1111 1000 0000	
pattern1-4:		0001 0000 0000 0000

mask1:			1111 1111 1000 0000	
pattern1-5:		0000 1000 0000 0000

mask1:			1111 1111 1000 0000	
pattern1-6:		0000 0100 0000 0000

mask1:			1111 1111 1000 0000	
pattern1-7:		0000 0010 0000 0000

mask1:			1111 1111 1000 0000	
pattern1-8:		0000 0001 0000 0000

mask1:			1111 1111 1000 0000	
pattern1-9:		0000 0000 1000 0000


mask2:			0000 0000 0110 0000	
pattern2:		        0000 0000 0110 0000


mask3:			0000 0000 0101 0000	
pattern3:		        0000 0000 0101 0000



IPCL1:



mask1:			1110 0000 0000 0000		
pattern1-1:		1000 0000 0000 0000

mask1:			1110 0000 0000 0000
pattern1-2:		0100 0000 0000 0000

mask1:			1110 0000 0000 0000
pattern1-3:		0010 0000 0000 0000

mask2:			0001 0000 0000 0000	
pattern2:		         0001 0000 0000 0000
	
mask3:			0000 1000 0000 0000			
pattern3:		        0000 1000 0000 0000

mask4:			0000 0100 0000 0000
pattern4:		        0000 0100 0000 0000

mask5:			0000 0010 0000 0000	
pattern5:		        0000 0010 0000 0000

mask6:			0000 0001 1000 0000	
pattern6-1:		0000 0001 0000 0000
mask6:			0000 0001 1000 0000	
pattern6-2:		0000 0000 1000 0000


mask7:			0000 0000 0100 0000	
pattern7:		        0000 0000 0100 0000

	
mask8:			0000 0000 0011 1110			
pattern8-1:		0000 0000 0010 0000

mask8:			0000 0000 0011 1110
pattern8-2:		0000 0000 0001 0000

mask8:			0000 0000 0011 1110
pattern8-3:		0000 0000 0000 1000

mask8:			0000 0000 0011 1110
pattern8-4:		0000 0000 0000 0100

mask8:			0000 0000 0011 1110
pattern8-5:		0000 0000 0000 0010
		
mask9:			0000 0000 0000 0001	
pattern9:		        0000 0000 0000 0001

详细列表如下:


(0) mask1 + pattern1-1 + (1) mask1 + pattern1-1
(0) mask1 + pattern1-2 + (1) mask1 + pattern1-1
(0) mask1 + pattern1-3 + (1) mask1 + pattern1-1
(0) mask1 + pattern1-4 + (1) mask1 + pattern1-1
(0) mask1 + pattern1-5 + (1) mask1 + pattern1-1
(0) mask1 + pattern1-6 + (1) mask1 + pattern1-1
(0) mask1 + pattern1-7 + (1) mask1 + pattern1-1
(0) mask1 + pattern1-8 + (1) mask1 + pattern1-1
(0) mask1 + pattern1-9 + (1) mask1 + pattern1-1

(0) mask1 + pattern1-1 + (1) mask1 + pattern1-2
(0) mask1 + pattern1-2 + (1) mask1 + pattern1-2
(0) mask1 + pattern1-3 + (1) mask1 + pattern1-2
(0) mask1 + pattern1-4 + (1) mask1 + pattern1-2
(0) mask1 + pattern1-5 + (1) mask1 + pattern1-2
(0) mask1 + pattern1-6 + (1) mask1 + pattern1-2
(0) mask1 + pattern1-7 + (1) mask1 + pattern1-2
(0) mask1 + pattern1-8 + (1) mask1 + pattern1-2
(0) mask1 + pattern1-9 + (1) mask1 + pattern1-2

(0) mask1 + pattern1-1 + (1) mask1 + pattern1-3
(0) mask1 + pattern1-2 + (1) mask1 + pattern1-3
(0) mask1 + pattern1-3 + (1) mask1 + pattern1-3
(0) mask1 + pattern1-4 + (1) mask1 + pattern1-3
(0) mask1 + pattern1-5 + (1) mask1 + pattern1-3
(0) mask1 + pattern1-6 + (1) mask1 + pattern1-3
(0) mask1 + pattern1-7 + (1) mask1 + pattern1-3
(0) mask1 + pattern1-8 + (1) mask1 + pattern1-3
(0) mask1 + pattern1-9 + (1) mask1 + pattern1-3

(0) mask1 + pattern1-1 + (1) mask2 + pattern2
(0) mask1 + pattern1-2 + (1) mask2 + pattern2
(0) mask1 + pattern1-3 + (1) mask2 + pattern2
(0) mask1 + pattern1-4 + (1) mask2 + pattern2
(0) mask1 + pattern1-5 + (1) mask2 + pattern2
(0) mask1 + pattern1-6 + (1) mask2 + pattern2
(0) mask1 + pattern1-7 + (1) mask2 + pattern2
(0) mask1 + pattern1-8 + (1) mask2 + pattern2
(0) mask1 + pattern1-9 + (1) mask2 + pattern2

(0) mask1 + pattern1-1 + (1) mask3 + pattern3
(0) mask1 + pattern1-2 + (1) mask3 + pattern3
(0) mask1 + pattern1-3 + (1) mask3 + pattern3
(0) mask1 + pattern1-4 + (1) mask3 + pattern3
(0) mask1 + pattern1-5 + (1) mask3 + pattern3
(0) mask1 + pattern1-6 + (1) mask3 + pattern3
(0) mask1 + pattern1-7 + (1) mask3 + pattern3
(0) mask1 + pattern1-8 + (1) mask3 + pattern3
(0) mask1 + pattern1-9 + (1) mask3 + pattern3

(0) mask1 + pattern1-1 + (1) mask4 + pattern4
(0) mask1 + pattern1-2 + (1) mask4 + pattern4
(0) mask1 + pattern1-3 + (1) mask4 + pattern4
(0) mask1 + pattern1-4 + (1) mask4 + pattern4
(0) mask1 + pattern1-5 + (1) mask4 + pattern4
(0) mask1 + pattern1-6 + (1) mask4 + pattern4
(0) mask1 + pattern1-7 + (1) mask4 + pattern4
(0) mask1 + pattern1-8 + (1) mask4 + pattern4
(0) mask1 + pattern1-9 + (1) mask4 + pattern4



(0) mask1 + pattern1-1 + (1) mask5 + pattern5
(0) mask1 + pattern1-2 + (1) mask5 + pattern5
(0) mask1 + pattern1-3 + (1) mask5 + pattern5
(0) mask1 + pattern1-4 + (1) mask5 + pattern5
(0) mask1 + pattern1-5 + (1) mask5 + pattern5
(0) mask1 + pattern1-6 + (1) mask5 + pattern5
(0) mask1 + pattern1-7 + (1) mask5 + pattern5
(0) mask1 + pattern1-8 + (1) mask5 + pattern5
(0) mask1 + pattern1-9 + (1) mask5 + pattern5

(0) mask1 + pattern1-1 + (1) mask6 + pattern6-1
(0) mask1 + pattern1-2 + (1) mask6 + pattern6-1
(0) mask1 + pattern1-3 + (1) mask6 + pattern6-1
(0) mask1 + pattern1-4 + (1) mask6 + pattern6-1
(0) mask1 + pattern1-5 + (1) mask6 + pattern6-1
(0) mask1 + pattern1-6 + (1) mask6 + pattern6-1
(0) mask1 + pattern1-7 + (1) mask6 + pattern6-1
(0) mask1 + pattern1-8 + (1) mask6 + pattern6-1
(0) mask1 + pattern1-9 + (1) mask6 + pattern6-1


(0) mask1 + pattern1-1 + (1) mask6 + pattern6-2
(0) mask1 + pattern1-2 + (1) mask6 + pattern6-2
(0) mask1 + pattern1-3 + (1) mask6 + pattern6-2
(0) mask1 + pattern1-4 + (1) mask6 + pattern6-2
(0) mask1 + pattern1-5 + (1) mask6 + pattern6-2
(0) mask1 + pattern1-6 + (1) mask6 + pattern6-2
(0) mask1 + pattern1-7 + (1) mask6 + pattern6-2
(0) mask1 + pattern1-8 + (1) mask6 + pattern6-2
(0) mask1 + pattern1-9 + (1) mask6 + pattern6-2


(0) mask1 + pattern1-1 + (1) mask7 + pattern7
(0) mask1 + pattern1-2 + (1) mask7 + pattern7
(0) mask1 + pattern1-3 + (1) mask7 + pattern7
(0) mask1 + pattern1-4 + (1) mask7 + pattern7
(0) mask1 + pattern1-5 + (1) mask7 + pattern7
(0) mask1 + pattern1-6 + (1) mask7 + pattern7
(0) mask1 + pattern1-7 + (1) mask7 + pattern7
(0) mask1 + pattern1-8 + (1) mask7 + pattern7
(0) mask1 + pattern1-9 + (1) mask7 + pattern7

(0) mask1 + pattern1-1 + (1) mask8 + pattern8-1
(0) mask1 + pattern1-2 + (1) mask8 + pattern8-1
(0) mask1 + pattern1-3 + (1) mask8 + pattern8-1
(0) mask1 + pattern1-4 + (1) mask8 + pattern8-1
(0) mask1 + pattern1-5 + (1) mask8 + pattern8-1
(0) mask1 + pattern1-6 + (1) mask8 + pattern8-1
(0) mask1 + pattern1-7 + (1) mask8 + pattern8-1
(0) mask1 + pattern1-8 + (1) mask8 + pattern8-1
(0) mask1 + pattern1-9 + (1) mask8 + pattern8-1

(0) mask1 + pattern1-1 + (1) mask8 + pattern8-2
(0) mask1 + pattern1-2 + (1) mask8 + pattern8-2
(0) mask1 + pattern1-3 + (1) mask8 + pattern8-2
(0) mask1 + pattern1-4 + (1) mask8 + pattern8-2
(0) mask1 + pattern1-5 + (1) mask8 + pattern8-2
(0) mask1 + pattern1-6 + (1) mask8 + pattern8-2
(0) mask1 + pattern1-7 + (1) mask8 + pattern8-2
(0) mask1 + pattern1-8 + (1) mask8 + pattern8-2
(0) mask1 + pattern1-9 + (1) mask8 + pattern8-2

(0) mask1 + pattern1-1 + (1) mask8 + pattern8-3
(0) mask1 + pattern1-2 + (1) mask8 + pattern8-3
(0) mask1 + pattern1-3 + (1) mask8 + pattern8-3
(0) mask1 + pattern1-4 + (1) mask8 + pattern8-3
(0) mask1 + pattern1-5 + (1) mask8 + pattern8-3
(0) mask1 + pattern1-6 + (1) mask8 + pattern8-3
(0) mask1 + pattern1-7 + (1) mask8 + pattern8-3
(0) mask1 + pattern1-8 + (1) mask8 + pattern8-3
(0) mask1 + pattern1-9 + (1) mask8 + pattern8-3

(0) mask1 + pattern1-1 + (1) mask8 + pattern8-4
(0) mask1 + pattern1-2 + (1) mask8 + pattern8-4
(0) mask1 + pattern1-3 + (1) mask8 + pattern8-4
(0) mask1 + pattern1-4 + (1) mask8 + pattern8-4
(0) mask1 + pattern1-5 + (1) mask8 + pattern8-4
(0) mask1 + pattern1-6 + (1) mask8 + pattern8-4
(0) mask1 + pattern1-7 + (1) mask8 + pattern8-4
(0) mask1 + pattern1-8 + (1) mask8 + pattern8-4
(0) mask1 + pattern1-9 + (1) mask8 + pattern8-4

(0) mask1 + pattern1-1 + (1) mask8 + pattern8-5
(0) mask1 + pattern1-2 + (1) mask8 + pattern8-5
(0) mask1 + pattern1-3 + (1) mask8 + pattern8-5
(0) mask1 + pattern1-4 + (1) mask8 + pattern8-5
(0) mask1 + pattern1-5 + (1) mask8 + pattern8-5
(0) mask1 + pattern1-6 + (1) mask8 + pattern8-5
(0) mask1 + pattern1-7 + (1) mask8 + pattern8-5
(0) mask1 + pattern1-8 + (1) mask8 + pattern8-5
(0) mask1 + pattern1-9 + (1) mask8 + pattern8-5

(0) mask1 + pattern1-1 + (1) mask9 + pattern9
(0) mask1 + pattern1-2 + (1) mask9 + pattern9
(0) mask1 + pattern1-3 + (1) mask9 + pattern9
(0) mask1 + pattern1-4 + (1) mask9 + pattern9
(0) mask1 + pattern1-5 + (1) mask9 + pattern9
(0) mask1 + pattern1-6 + (1) mask9 + pattern9
(0) mask1 + pattern1-7 + (1) mask9 + pattern9
(0) mask1 + pattern1-8 + (1) mask9 + pattern9
(0) mask1 + pattern1-9 + (1) mask9 + pattern9





(0) mask2 + pattern2 + (1) mask1 + pattern1-1
(0) mask2 + pattern2 + (1) mask1 + pattern1-2
(0) mask2 + pattern2 + (1) mask1 + pattern1-3
(0) mask2 + pattern2 + (1) mask2 + pattern2
(0) mask2 + pattern2 + (1) mask3 + pattern3
(0) mask2 + pattern2 + (1) mask4 + pattern4
(0) mask2 + pattern2 + (1) mask5 + pattern5
(0) mask2 + pattern2 + (1) mask6 + pattern6-1
(0) mask2 + pattern2 + (1) mask6 + pattern6-2
(0) mask2 + pattern2 + (1) mask7 + pattern7
(0) mask2 + pattern2 + (1) mask8 + pattern8-1
(0) mask2 + pattern2 + (1) mask8 + pattern8-2
(0) mask2 + pattern2 + (1) mask8 + pattern8-3
(0) mask2 + pattern2 + (1) mask8 + pattern8-4
(0) mask2 + pattern2 + (1) mask8 + pattern8-5
(0) mask2 + pattern2 + (1) mask9 + pattern9


(0) mask3 + pattern3 + (1) mask2 + pattern2
(0) mask3 + pattern3 + (1) mask3 + pattern3
(0) mask3 + pattern3 + (1) mask4 + pattern4
(0) mask3 + pattern3 + (1) mask5 + pattern5
(0) mask3 + pattern3 + (1) mask6 + pattern6-1
(0) mask3 + pattern3 + (1) mask6 + pattern6-2
(0) mask3 + pattern3 + (1) mask7 + pattern7
(0) mask3 + pattern3 + (1) mask8 + pattern8-1
(0) mask3 + pattern3 + (1) mask8 + pattern8-2
(0) mask3 + pattern3 + (1) mask8 + pattern8-3
(0) mask3 + pattern3 + (1) mask8 + pattern8-4
(0) mask3 + pattern3 + (1) mask8 + pattern8-5
(0) mask3 + pattern3 + (1) mask9 + pattern9



鉴于此部分在软件上做起来比较麻烦, 同时,考虑到为实现一个功能而一次下发100多条规则的效率问题, 所以这类功能可以交给CPU来做,用户层判断出此需求后, 将报文全部交给CPU,后者解析出报文后, if(sport >= 80 && sport <=8000)即可作出判断, 相比起来将更为可取.



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3