BACnet+网络开发经验总结

时间:2019-05-15 15:25:18下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《BACnet+网络开发经验总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《BACnet+网络开发经验总结》。

第一篇:BACnet+网络开发经验总结

BACNet这个东西的资料太少了,有用的高效的资料更是少!

资料太少,摸索着实在太辛苦,这是BACnet项目完成之后的一点开发经验,希望对正在摸索的各位同仁,有所帮助。

任务定位:

BACNet分为系统应用和开发应用,购买现有的BACNet设备组网,应用,属于系统应用,放松心情,继续读下去,如果是开发BACNet设备,这里的一点经验就不需耽误时间了。

层次定义:

BACNet既然协议里分了那么多层,我们要做多少呢?

继续放松,BACNet的系统应用来说,我们只需做到应用层+网络层就可以了,不要被协议厚厚的书吓到,我们用到的,很少。

好了,现在知道我们要干什么了,就是拿到BACNet设备进行网络层以上的应用。

资料选择:

BACNet协议,中英文网络上都可以找到,如果网络没搜过到,我的资源里也提供了下载。还推荐一本书,《智能楼宇BACNet原理与应用》董春桥写的,只出版了3000册,如果能搞到,庆幸吧!

知识储备:

既然是网络开发,必备网络编程一点小小的经验,尤其是UDP。

开发工具:

工欲善其事,必先利其器。看协议可以了然于胸,但如果有个智能点的开发工具,效率可以乘以10倍,推荐VTS,网络上应该可以下载到,我的资源里也提供了下载。

软件架构:

对于UDP,相信做这个的不需我多说。

对于BACNet编码,一句话,NPCI+BCLCI+APDU,唯一难一点的,就只有APDU,不过,有VTS的话,轻松很多。

好了,随手涂鸦的几句话,希望对大家有点帮助吧,QQ:404536204,愿与同仁共同进步!

如果上面提到的资料比较难找的话,我的资源里也有提供,开发源码:

VTS:

中文协议:

英文协议:

第二篇:NDIS网络防火墙开发经验总结

NDIS网络防火墙开发实践经验总结

一、window软件防火墙开发概述:

在window下开发软件防火墙可以实现:NDIS数据包的截获、NDIS数据包的抓取、NDIS数据包的分析、NDIS数据包过滤、NDIS 驱动对IP与port的过滤、NDIS中间层驱动安装技术等。本文对NDIS开发基本流程、NDIS开发注意事项、NDIS安装过程中出现的各种问题都给予详细说明,希望对做NDIS开发程序员有所帮助。

目前可以实现软件防火墙的方法有:

(1)SOCKET端口形式。

(2)NDIS中间驱动IPHOOK形式(xp/2003)。

(3)NDIS中间驱动miniport形式(xp/2003/vista/win7/win2008)。

三种形式从开发难度到使用范围都有自身的特点。

(4)SOCKET形式是面向应用层开发的,在代码及调试方面相对后两种简单的多,但

SOCKET形式不能捕获所有数据包,所以用socket开发防火墙不是最好的选择。

(5)后两种属于NDIS中间驱动程序开发,是面向驱动层(底层)开发,代码编写及调试较

socket形式上难。(说明:可能大部分采用高级语言程序员根本都没接触过驱动开发)但NDIS形式可以捕获到所有通过网卡的数据包(NDIS中间驱动是插入到协议层与网卡驱动层的中间驱动程序所以数据必须通过)。所以本文作者建议采用NDIS开发软件网络防火墙。

二、DNIS中间驱动开发注意事项:

NDIS中间驱动程序开发window防火墙要注意window版本问题,因为目前用户使用的window版本有window200、window200 server、window xp、window2003、window vistawindow

7、windown 2008 server。你采用的NDIS开发技术直接决定是否能在不同window版本上运行,这是很关键的问题。目前作者知道的NDIS防火墙技术有两种:

2.1.IP_FIREWALL_HOOK(NDIS防火墙钩子技术适合XP/2003)。

(1)这种技术的特点:相对miniport的开发、测试、安装简单些。

(2)安装步骤简单见四:可以采用注册表注册后用net start启动,也可以采用:

OpenService、CreateService、StartService等函数创建服务形式启动驱动具体用法请查询msdn帮助)

(3)比较典型的案例: ewall-Hook-Driv此种方法对window vista 之前window 2000之后的操作系统是没有任何问题。通过作者的开发测试,对于window vista 之后的产品向window 7 window 2008是不支持的(这点一定要注意)。

这里网上有许多评论有人说还支持,但本文作者给出答案是不支持,理由 msdn(http://msdn.microsoft.com/en-us/library/windows/hardware/ff546487(v=vs.8

5).aspx中有这样一句话: Note: Starting with Windows Vista, do not implement filter-hook or firewall-hook drivers.Use Windows Filtering Platform Callout Drivers instead.翻译成中文大概意思:从vista以后不再支持” filter-hook”,请使用…)。

(4)你可以在window 7或window2008测试下你的钩子防火墙在status=IoCallDriver加入dbprint代码用 dbgview.exe截获status的值你会发现

在2000、xp、2003下返回0一切正常,在vista、win7、2008下返回0xc0000002-

0xc000000d的任意值。所以钩子防火墙在vista及以后的版本是不能实现的。

所以作者建议在vista以后的版本就要用IP HOOK(ipfirewall)浪费时间啦。

2.2.NDIS(miniport –protocol)中间驱动技术(XP/2003/vista/win7/2008)。

这种形式在2000、xp、2003、vista、win7、2008下都可以现实,但原理和代码实现上 要比钩子复杂的多,安装测试也比较麻烦。典型列子是ddk源文件路径下的passthru项 目。但我开发这个项目后,总结下NDIS开发其实并不是很难只是以前对这方面知识缺 乏已。

三、NDIS程序结构:

3.1.DriverEntry函数:这个函数必须存在,它是window驱动的入口函数(IPHOOK

与miniport都必须定义的函数,在驱动安装启动是执行)。

3.1.1.这个函数有两个参数:

IN PDRIVER_OBJECTDriverObject,IN PUNICODE_STRINGRegistryPath。

3.1.2.DriverEntry内部常用代码:

NdisMInitializeWrapper(中间驱动miniport):初始化小端口时会用到这连个参数。IoCreateDevice(钩子驱动IPHOOK):建立IO设备时会用到。

3.1.3.建立miniport与protocol端口(中间驱动miniport):

NDIS_PROTOCOL_CHARACTERISTICSPChars;

NDIS_MINIPORT_CHARACTERISTICSMChars;

并分别设置PChars、MChars一系列属性参数指定处理函数。

这里有几个很重要的属性在开发防火墙程序中很重要我说明下其它参数见DDK帮助文档。

MChars.CancelSendPacketsHandler = 自定义截获发送函数;

PChars.ReceivePacketHandler =自定义截获接受函数1;

PChars.ReceiveHandler =自定义截获接受函数2;

(说明:ReceivePacketHandler与ReceiveHandler区别:是针对不同型号网卡分别采用这两个属性接受数据的建议全部设置上你自定义的接受函数。)

3.1.4.如果是IPHOOK驱动需要绑定钩子(钩子驱动IPHOOK):

IP_SET_FIREWALL_HOOK_INFO filthook;

filthook.FirewallPtr = 钩子函数(处理过滤/抓包函数的函数);

filthook.Priority = 1;

filthook.Add = true;

应用这个IoBuildDeviceIoControlRequest函数绑定具体见DDK文档。

3.2.MajorFunction函数任务的指派(IPHOOK与miniport都必须定义的函数):

DriverEntry函数是驱动与操作系统的接口函数,MajorFunction函数是用户通过

应用程序控制驱动的接口。

3.2.1.几个常用的函数(IPHOOK与miniport都必须定义的函数):

DispatchTable[IRP_MJ_CREATE] = 创建函数;

DispatchTable[IRP_MJ_CLEANUP] =清除函数;

DispatchTable[IRP_MJ_CLOSE] = 关闭函数;

DispatchTable[IRP_MJ_DEVICE_CONTROL] =用户IO控制函数(这个函数很重要);

以上三个函数可以指向IO控制函数即:

DispatchTable[IRP_MJ_CREATE] =

DispatchTable[IRP_MJ_CLEANUP] =

DispatchTable[IRP_MJ_CLOSE] =

DispatchTable[IRP_MJ_DEVICE_CONTROL] =用户IO控制函数(这个函数很重要);

3.2.2.用户IO控制函数(DevIoControl):是用户通过指定IOCTOL码向NDIS驱动发出指令要求驱动为自己做事。(具体建立IO控制码见DDK)

3.2.3.DevIoControl(NDIS是一个很重要的函数,IPHOOK与miniport都必须定义这个函数)函数的定义规则:

它有两个参数:

IN PDEVICE_OBJECTpDeviceObject,IN PIRPpIrp(这个是主要参数,是驱动程序与用户的数据通信接口)

PIO_STACK_LOCATIONpIrpSp;必须定义本地IO堆栈变量。

pIrpSp = IoGetCurrentIrpStackLocation(pIrp);//返回输入/输出堆栈位置

ioBuffer = pIrp->AssociatedIrp.SystemBuffer;//获得IO操作缓存区指针

IOCode = pIrpSp->Parameters.DeviceIoControl.IoControlCode;//获得IO操作码

下面就根据用户发来的IO操作命令进行处理,处理过程如下:

switch(IOCode)

{

Case IO控制码1:

自定义操作函数1;

Break;

Case IO控制码2:

自定义操作函数2;

Break;

Case IO控制码3:

自定义操作函数3;

pIrp->IoStatus.Information = outputBufferLength;//这里要注意

Break;

}

最后加入下面代码:

if(NtStatus!= STATUS_PENDING)

{ pIrp->IoStatus.Status = NtStatus;IoCompleteRequest(pIrp, IO_NO_INCREMENT);

}

这里我要说下NDIS驱动开发IOCTRL写入或读取数据时要注意两点:

1.上面的pIrp->IoStatus.Information = outputBufferLength句用不好会出问题的。它是用在向用户应用程序返回数据的过程体中,如果这句用不好你应用程序可能接受不到NDIS返回给你的数据。

2.同时接受和返回如何做?

其实读取和写入全是在pIrp->AssociatedIrp.SystemBuffer缓存中我们操作的次序是先把用户发来的数据读出 把要写的的数据写入AssociatedIrp.SystemBuffer中。例如:

用户EXE中IO操作是:

DeviceIoControl(devhdle, IO操作码,输入数据地址,输入数据长度, 输出数据地址, 输出数据长度,返回值地址, NULL))

NDIS可以这样读取返回数据:

读取数据:ibuff=pIrp->AssociatedIrp.SystemBuffer;

返回数据:oBuffer=pIrp->AssociatedIrp.SystemBuffer;

自定义函数(oBuffer)向oBuffer写数据。

明白啦吗?还不明白,我还有个办法就是你自己动手实验一万遍。其实我已经说的很明白啦。

注意:IO操作码: 这个码必须是可读写的。至于怎么生产你看DDK。

3.3.驱动卸载函数(Unload IPHOOK与miniport都必须定义的函数):这个函数只有一个

参数IN PDRIVER_OBJECTDriverObject。作用:当驱动卸载时释放我们在程序中分配的内存、miniport端口、IO设备等。

总结: 从NDIS程序结构中我们不难找出NDIS的miniport与iphook开发的区别就是在你

驱动中是否注册啦miniport_protocol还是绑定啦IP_SET_FIREWALL_HOOK_INFO钩子,基本结构是一样。如果你在网上看到NDIS开发文档感到很难时我只能说:”真正了解一门技术是有一个过程的,过程中遇到些困难是很正常的,关键是你能否坚持到最后!”。

四.安装NDIS驱动方法:

4.1.IPHOOK驱动安装:相当简单我这里介绍两种方法:

4.1.1.手动注册表建立服务

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMControlSet001Services驱动名]

“Type”=dword:0000000

1“Start”=dword:0000000

3“ErrorControl”=dword:00000001

“ImagePath”=system32drivers驱动文件名.sys

“DisplayName”=“驱动名”

“Group”=“Extended Base”

4.1.2.用”NET STRAT 服务器名”启动/”NET STOP服务器名”停止服务

4.1.3.安装启动后可以用代码直接使用此服务:

(1)#defineMY_DEVICE_NAME “.驱动名” //驱动名称

(2)HANDLEhdle=CreateFile(MY_DEVICE_NAME,GENERIC_READ |GENERIC_WRITE, 0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)INVALID_HANDLE_VALUE);

(3)

4.1.4.对于(4.1.1与4.1.2)前步可以完全用代码取代手工来完成:

(1)拷贝.SYS文件到system32drivers(具体代码来完成不是很难)。

(2)定义SC_HANDLE hSCManager;变量。

(3)hSCManager = OpenSCManager(NULL, NULL,SC_MANAGER_ALL_ACCESS);打开服务控制管理器。

(4)如果(3)成功OpenService(hSCManager, lpszServiceName,SERVICE_ALL_ACCESS);打开服务。

(5)如果(4)失败说明驱动服务没有安装开始安装驱动:

hService = CreateService(hSCManager, lpszServiceName, lpszServiceName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, lpszDriverPath, NULL, NULL, NULL, NULL,NULL);

建立服务。

(6)启动服务器StartService(hService, 0, NULL);

(7)关闭SC_HANDLE:CloseServiceHandle(hSCManager);

(8)再使用4.1.3.中代码访问驱动。

以上说明啦NDIS钩子驱动(不含miniport-protocol端口)的安装使用两种方法。

4.2.NDIS中间驱动(miniport-protocol)安装使用方法:

4.2.1只要你掌握其实也很简单(你可以参考DDK_SRC下的netcfg例子。其中有一个很重要的函数是HrInstallNetComponent你把它看明白安装基本就差不多啦。

4.2.2.但这里有个很大开发安装程序问题:就是netcfg是用ddk编译的,我们有时要把安装代码集成到VC编译器中,有人说include ddk包文件。我这里建议你用DDK编译成dll 接口函数。

4.2.2.其次你最好对inf文件各个键值作用了解详细。我这里要说明

[SourceDisksFiles]这个键,如果你的inf文件与sys在同一个路径下那么

[SourceDisksFiles]键值为空。如下:

[SourceDisksFiles]

Passthru.sys=1 改成;Passthru.sys=1前面加分号

如果不这样在安装sys时可能提示你选择sys路径问题。

4.2.3.值得特别注意的是:无论你安装成功或不成功你最好把用到的所有inf文件和sys

文件拷贝到 windows/inf 路径下。拷贝过去绝对没有坏处,但不拷贝可能

安装过程会出现不成功的现象;这点是本人实践中总结出来的。

至此,本人对DDK开发软件防火墙的两种方法全部介绍完毕。真正想实现防火墙的封包、抓包等一系列功能需要你不断总结和摸索才行。以上内容都是作者本人通过开发过程中实践中总结出的经验可能有些地方与网上其它文章有很大出处,但上面思路在PC机上全部实现过。(本人在开发过程依据是DDK帮助文件和PASSTHRU)。在此,谢谢各位网友网上文档给予了很大的帮助!

2012年11月29日

本文来源: http:///techntxt/20121***705291

第三篇:单片机开发经验总结

单片机开发经验总结 单片机开发 2010-07-20 00:54:19 阅读77 评论0字号:大中小 订阅

1、与发光二极管串联的电阻(排阻)的计算和选取,一般发光二极管的正常发光的电流是3~10mA,在发光二极管上产生的压降是1.7

V(轨管)R=(5-1.7)/3~10(k)

2、单片机TTL电平高电平:+5V;低电平:0V。

RS232串口电平高电平:—12V ;低电平:+12V。可以通过MAX232电平转换芯片,转换之间的电平。

3、单片机上电IO口的寄存器为高电平,其余寄存器为低电平。

4、三极管的开关作用:在B、E间接正向电压,E、C是导通的。

5、蜂鸣器:

1)有源蜂鸣器直接接上额定电压就可以连续发声。

2)无源蜂鸣器和电磁扬声器一样,需要接在音频输出电路中才能发声。

3)有源蜂鸣器带振荡源,无源的不带。

4)有源蜂鸣器的理想信号是直流电。

5)无源蜂鸣器的理想信号为方波信号。

方波发声函数:void beep()

{fmq=0;

delay 500us();

fmq=1;

delay 500us();

}

6、计算单片机指令周期:

指令周期(us)=12 /晶振频率(Mhz)

选用12M的晶振,一个指令周期为1us7、89C51的芯片最高支持24M的晶振

目前介绍单片机应用的文章很多,但介绍单片机开发工具制作的文章却较少。由于单片机是一门实践性很强的课程,如果采用传统的开发模式,则要购买价格昂贵的仿真器、编程器等开发工具来作实验。其实由于芯片功能的日益完善,我们可以利用芯片的在系统编程(ISP)功能制作出实用而低价的开发工具。本文旨在帮助DIY爱好者开发制作出适合自己的开发工具。

1当前常用开发模式

目前,基本上有两种开发模式可供选择:用仿真器、用编程器。

①用仿真器。优点:方便,可以设置断点,可以观察存储器及寄存器的内容。缺点:价格昂贵,不同类型的单片机要购买不同的仿真器;仿真器终究不是单片机,有时代码在仿真器上能通过,但在单片机中不能正常工作,反而增加了调试的难度。

②用编程器。优点:价格相对便宜,通常一款编程器可编程多种器件。缺点:操作相当不便,每次要将芯片在目标板与编程器之间转移,并且还要在编译操作界面与编程器操作界面之间切换,大部分时间在做简单的重复工作。

2新的开发模式介绍及芯片选择

本文介绍的开发工具采用一种新的开发模式(类似于编程器开发模式)。由于利用了芯片的在系统编程功能,因此不需要移动芯片。在软件设计时设计成:一旦代码文件被重新编过,即自动下载到芯片,并自动复位运行,是真正的“所编即所得”。

目前很多单片机都支持在系统编程。8051系列单片机支持在系统编程的也很多,但大多数是支持通过PC机的串口对单片机进行编程。这样有四个不方便的地方:一是项目本身与PC机串行通信不方便;二是要增加1片MAX232电平转换芯片;三是有的芯片要按特定的步骤进入下载模式,编程过程需要手工干预;四是有的芯片需要固件(定制的程序)的支持,如果不小心损坏了固件,则芯片的在系统编程功能也没有了。

经过比较,Atmel公司生产的AT89S8252是一种比较理想的芯片,适合制作开发工具。此芯片有如下特点:

◆ 与8051兼容;

◆ 内含8KB可擦写1000次的程序存储器,2KB可擦写超过100 000次的数据存储器及256字节8位宽内部RAM;

◆ 可通过SPI接口在系统串行编程,与8051兼容

◆ 串行编程时有自动擦写周期,在调试大程序时可以分段下载,节约时间;

◆ 低电压下载,无需12V编程电压。

3AT89S8252串行编程

(1)AT89S8252串行编程模式

当芯片的RST引脚置高电平时,所有程序和数据存储器可以通过SPI总线接口[SCK,MOSI(input),MISO(output)]编程。RST变高以后,在编程或擦除操作之前必须首先发送一条编程允许命令。在串行编程模式下,芯片会在字节编程之前自动插入一个擦除周期。因此,除非芯片的代码保护位被编程,编程之前不需要执行全片擦除命令。SPI接口之SCK时钟频率须低于晶振频率的1/40。

(2)AT89S8252串行编程步骤

①在XTAL1与XTAL2之间连接一个3~24MHz的晶振;在VCC与GND之前加上电源电压,将RST置高,等待10ms。

②发送串行编程允许命令。

③发送写/读/擦除等命令及数据,串行数据高位在前,低位在后,数据在时钟的上升沿锁定。④如果上一步是写命令,至少等待2.5ms。

⑤需要时重复③、④两步。

⑥将RST置低,芯片开始运行。

(3)AT89S8252串行编程命令

AT89S8252串行编程命令如表1所列。

(4)AT89S8252串行编程时序图

AT89S8252串行编程时序如图1所示。

14硬件设计

①通过计算机并口与单片机SPI口连接;

②为了保护计算机并口,需要增加1片74HC244作为隔离。

实用的原理图如图2所示。(已经过实践检验,可放心使用。)

25用VB编程进行并口控制

打印端口的基地址一般为0x278、0x378或0x3BC,可以从控制面板中查到。为了方便读者,表2列出了常用打印端口引脚及寄存器位元的说明。

在Windows环境下最简单易学的语言恐怕非VB莫属,所以我们的开发工具也选用VB作为编程语言。但由于Windows的保护,VB无法直接读写打印端口,因此我们需要另外的程序模块来实现打印端口的直接读写。在Internet网上可以找到许多此类模块,并且相当多的模块可以免费使用。经过试用,笔者推荐使用Winio v2.0。该模块支持Win9X/NT/2000/XP(http:// Yariv Kaplan),并且带有详细的帮助、例子程序及源码。使用时,将Winio.sys、Winio.dll、Winio.vxd

及Winio.bas四个文件拷贝到工作目录下,在VB中直接添加Winio.bas模块即可。本例中用到的函数有四个,分别说明如下。

①Initialize():允许端口控制函数。在使用端口输入输出函数之前调用一次,成功返回“1”,失败返回“0”。

②Shutdown():关闭端口控制函数。在退出程序时执行一次,成功返回“1”,失败返回“0”。③GetPortVal(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte)As Boolean:读取端口函数,PortAddr 为端口地址, Portval为端口值,bSize为要读取的字节数。读取成功时返回“1”,失败时返回“0”。

④SetPortVal(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte)As Boolean:写端口函数。PortAddr 为端口地址, Portval为要写的值,bSize为要写入的字节数。写入成功返回“1”,失败返回“0”。

四个函数在Winio.bas模块中的声明如下:

Declare Function InitializeWinIo Lib “WinIo.dll”()As Boolean

Declare Function ShutdownWinIo Lib “WinIo.dll”()As Boolean

Declare Function GetPortVal Lib “WinIo.dll”(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte)As Boolean

Declare Function SetPortVal Lib “WinIo.dll”(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte)As Boolean

6Intel HEX 格式文件

由于一般编译软件产生的用于写入芯片的文件都是Intel HEX格式的文件。Intel HEX文件属于文本文件,可以用记事本查看。一个Intel HEX文件的一行称为一个记录,每个记录都是由十六进制字符组成的,两个字符表示一个字节的值。Intel HEX文件通常由若干条记录组成,每个记录都具有如下的形式:

:LLAAAATTDD...DDCC

“:”——记录的起始标志;

LL——记录长度,表示该记录中的数据字节数;

AAAA——数据装入的首地址(16位);

TT——记录类型,00表示数据记录,01表示文件结束;(注意:有的编译软件会产生大于01的记录类型,本应用中对大于01记录类型的记录忽略掉即可。)

DD——数据值(字节);

CC——校验和。(将其本身与记录中除起始标志外的所有字节相加应为0,不为0则有错。)

VB编程详细说明见本刊网络补充版(http://.cn)。(由于各子程序的流程都较简单,所以直接给出源码,而未画出流程图。程序采用由底至顶的设计方法。)

结语

虽然上述程序能实现各种基本的功能,但并不完善,并未考虑各种异常情况,读者可根据实际情况进行完善。编程功力较差的朋友可直接到笔者的网站(http: //)下载相对较完善的应用程序。如果充分理解了上述程序,那么DIY一个AVR或PIC单片机的开发工具也非难事。在笔者的网站也有制作完成的“MCS51/AVR/PIC三合一下载器资料”供爱好者下载。

由于AT89S8252的价格还是较贵,所以现在市场上较难买,不过Atmel公司推出的替代

AT89C51/52的AT89S51/52也有在系统编程功能,且价格便宜。其在系统编程的实现方法与

AT89S8252类似,对本例部分程序稍作修改即可支持该器件。笔者制作的“MCS51/AVR/PIC三合一下载器”增加了对AT89S51/52的支持。

文章来源:http:///wz_17380.htmPowerd by laogu

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

再来几点:

先从最简单的AT89C5X(51,52,55等等)说起吧,做这个的时间最长,知道的可能多些,书本上的东西这里我不多说,主要谈些实际应用中的经验与教训。书可以参看北航出的一本专门讲AT89系列的,还不错,建议大家购买。

AT89C51我认为是一个非常标准的51单片机了,4个P口,1个串口,RAM只有标准的128Byte,Flash也只有4K,功能还算齐全,我就以它为基础,所以开发过程中遇到的问题吧。

第一个问题:复位源的问题

大家最常用的复位方式就是电阻加电容吧,AT89C51是高电平复位,这种方式不稳定,在产品调试时可以使用,因为在调试时我们一般使用了仿真器,而许多仿真器都会自己输出复位信号,而屏蔽掉目标板产生的复位信号,所以调试时复位信号是没有问题的,我们公司使用的是长沙菊阳的仿真器,用的是比较先进的技术,还算可以,仿真AT89系列的芯片一点问题没有,还很稳定的说。这里有一个非常重要的问题要说下,大家有时候会遇到这样的一个问题:自己的程序在仿真时运行一点问题也没有,但烧录后却不行了。结合我的经验有两种原因。一是时序可能变了,这个大家都知道,我不多说,还有一个原因就是复位信号的问题。具体情况如下:

(1)复位电路有问题,不能正常产生复位信号。因为调试时仿真器可能给你提供了复位信号,而脱离仿真器后就没有了;

(2)看门狗的问题。有些51芯片带有看门狗复位功能,如At89c55WD,当程序开启了看门狗后,有时候程序的初始化内容太多了,往往会产生了复位信号,特别是用C语言编程功能时,有时候虽然你明明在程序开始时某个地方关闭了看门狗,但程序依然会复位,这是因为C语言执行效率比汇编低,看似几行代码,有时候要很长时间的,所以在使用开门狗时一定要注意这个问题。而这个问题在使用仿真器时容易被忽视,因为即使你的程序里看门狗复位了,但是仿真器(菊阳仿真器可以开启/屏蔽这个功能)往往会屏蔽了这个复位信号,所以程序仍然会正常运行的。当你把程序烧好后再运行时,你却为发现刚调试好的程序却无法正常运行了,那是因为你的程序一直在不停复位了,注意用示波器观察RST脚可能看不到复位信号的,因为看门狗复位并不影响RST脚的电平。再一种情况就是芯片内部不带看门狗,但是电路中有CPU监控芯片的,它往往是可以提供复位信号的,而且是多种原因的复位信号,如果你发现上述情况,就可以用示波器查看RST脚看是否有电平变化。

所以建议大家做51产品开发时尽量使用CPU监控芯片,向X5045就是非常好用的,因为它还带有Eprom功能,这在很多场合使用的到的,也可以用MAX708等专用复位芯片了,既稳定又方便。

第四篇:WEB前端开发经验总结

ASP.NET前端开发经验总结

通过此次大作业的设计到完成,我负责的是web前端的开发,经过此次作业和结合W3C上的自学,我渐渐有了一些对前端开发的小小经验(仅为个人意见)。WEB标准是什么?

说是WEB标准,不过我这里主要是对HTML5 和 CSS3.0的一些经验总结。因为WEB含盖的内容实在是太多了,“WEB标准”是一系列标准的总称,包括HTML5.0、HTML4.0、XHTML1.1、CSS3.0、CSS2.1、XML1.0、RSS2.0、ECMAScript1.1、DOM1.0等等。所以这里要跟大家指出来一下,WEB标准不是我们所说的DIV+CSS。刚刚上面提到了――DIV+CSS,这里要说明下,这样说其实是不正确的。DIV+CSS准确的说法(个人的理解)应该是:采用W3C推荐的WEB标准中的HTML5结合CSS3.0样式表制作页面的方法,DIV应该指的是HTML标签,而CSS显示是指的CSS样式表了。

采用WEB标准开发的好处

那么W3C为什么会推荐这样的页面制作方法呢?下面我们就简单的看看采用WEB标准开发(个人理解的)相对以前TABLE布局的优势有哪些?

1、节约运营成本

看看我们的WEB标准制作方法是如何做到的?

采用WEB标准制作,我们可以做到表现很形式的分离,我们用XHTML来表现(数据),用CSS来控制(页面元素呈现的)形式。写的好的页面,XHTML代码中基本上都是用户要看的数据,还其他修饰性的东西,全部由我们的CSS来控制。这样一来我们的(XHTML)页面的体积就大大减小了,这样你在带宽上的费用就会大家降低了,这个怎么降低的,你可以想象一下,YAHOO的首页小1K,100W个人一起访问,那么带宽节约了多少?而且可以更充分的利用带宽。

而我们的CSS控制了,所有的页面元素的样式,现在想改网站的整体风格,你只需要花几分钟修改一下一个CSS文件,就可以轻松搞定了。维护的成本也下来了,省了不少钱了吧?还有,你开这个页面的速度会快很多啊,一个让你等半分钟的页面,除非里面的信息对你很有用,不然我们大家基本都没有太多的时间去用来等待的。

2、对用户友好更友好,且有机会获得更多的用户 现在来说说用户友好。首先我想把我们的用户来分下类。第一类:普通用户(每个访问我们网站的人); 第二类:搜索引擎;

采用WEB标准开发的页面,结构清晰,页面体积小,浏览器兼容性好。普通用户访问的时候,页面打开速度快,而且不管用户使用那种浏览器,都能够正常访问(显示)页面,且页面的结构清晰,要找的数据可以很方便的浏览到。

而对搜索引擎来说,一个好的采用WEB标准开发的页面,都是做过SEO优化的,它访问起来很友好,很容易理解你的页面中哪里是标题(H1~H6标签),哪里是段落(p标签),哪里是段落里要强调的内容(strong标签)等,它可以很容易的分析出来。而一个SEO好的站点,大家都知道,被搜索引擎收录的机会更多,这个也意味着您的网站会被更多的普通用户访问到,给你的站点带来更多的用户。

一个能帮我们省下大笔费用,提高工作效率。同时又能够提高页面浏览速度,对用户友好,甚至能够不花钱宣传,就能给你带来更多用户的技术。你说你会不会去使用它?这个也正式我们的W3C推荐使用WEB标准开放网站的原因啊。而这个技术也得到了我们广大用户的认可,所以现在需要学习WEB标准啊。合理的布局

前面我提到了一些知识点――“结构清晰、SEO优化、页面体积小、HTML代码中基本上都是用户要看的数据”。这些东西,都是我做了合理布局的结果。而且我个人觉得,我们采用WEB标准制作的一切都是从这个知识点开始的,所以我这里就先来说这个话题。

也许有人会问,怎样的一个页面,才算是合理的布局的呢?这个问题问题问得好,也是我们大家刚开始学用WEB标准的问得最多的问题之一,我也曾经常被这个问题所困扰,这里就说说我对合理布局的一些理解。

在开始讲合理布局的页面要达到的要素前,我们还是用个实例来讲解会更直观些。先来看看这个图片:

不错,这个是一个文章详细页,没有左右两栏布局,不过这里我重点要讲的是合理的布局。

这是此次实验中customer(前端的一项)部分的完整代码:

<%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“Customer.aspx.cs” Inherits=“Customer” %> <%@ Register Src=“Controllers/Bottom.ascx” TagName=“Bottom” TagPrefix=“uc4” %> <%@ Register Src=“Controllers/Top.ascx” TagName=“Top” TagPrefix=“uc1” %> <%@ Register Src=“Controllers/Left.ascx” TagName=“Left” TagPrefix=“uc2” %>

<%=Titlep %>

” name=“description”/> ” name=“keywords” />

第五篇:PHP开发大型项目经验总结

PHP开发大型项目的一点经验

文章摘自我赢职场php在线教育

一、变量

最好是把所有的变量存储在一个数组中,这样在程序的开发中可以带来很多的方便,特别是当程序很大的时候。变量的命名就当适合自己的习惯,不管是用拼音还是英语,至少应当有一定的意义,以便适合记忆。变量的命名尽量规范化,不要与PHP中的关键字相冲突。

二、函数

PHP自带了很多函数,这给我们程序的编写带来了很多的方便。当然,在大型程序中我们往往自己要定义许多个函数,几十甚至上百个。当然在使用了类的程序中就不叫函数了,就应该叫方法,这里暂且不谈类的使用方法。函数多了,难免就会搞混了。有什么方法可以解决这个问题呢?可以参照上面变量的使用方法一样,同样的,我们也可以把自己定义的函数名全都放在一个数组中。这样我们在使用的过程中可以直接在数组随时检查函数是否有无重复的定义。如果发现重复的现象,马上变可以改过来。提高了程序编写的速度。函数的使用还有一点要注意的是全局变量,虽然这是一个小问题,但却不容忽视,要不然当某个变量千呼万呼出不来的时候,呵呵。这时看看该变量是否在该函数中已经申明成了全局变量。

三、程序的注释

程序的注释是很重要的,不管是C还是JAVA,程序的注释往往可以体现出程序员的良好编程风格。无论是对于它人还是自己对大有好处,当然我们这里说的是大型项目的开发,团体合作精神是很重要的。当你的程序写出来别人都很难看懂那还怎么谈团体合作精神啊。当然如果这个大型项目是你一个人开发的那就另当别论了,或者是你时间紧迫,来不及写注释。不过一般来说这种情况是很少的。除非真的是非常时刻。一个优秀的程序员绝对会为他写的每个程序加注释,哪怕是给自己看的。

四、采用何种文本编辑软件写源程序

这其实也没一定的规定,只要自己喜欢就行了。我比较喜欢PHPEDIT,也许是用惯了,现在感觉一离开PHPEDIT写PHP就没感觉,初学PHP的时候用NOTEPAD写,因为程序比较简单。所以用NOTEPAD应付下就行了,对于有几百行的程序来讲,用NOTEPAD显然是不合适的。用PHPEDIT工作效率会提高几倍,哪怕你从来没用过。

五、数据库的设计

数据库的设计在开发大型项目中是很重要的一点,关系到整个项目开发的成败。具体也就不多说了。大家可以在自己的实践中积累经验,慢慢去体会。总之在数据库的设计中最好应该一开始就应该确定下来。虽然可以在开发的过程中去改变已经设计好的数据库结构,但这对于整个项目的开发效率来讲将大打折扣,有谁会愿意时不时的去改数据库的结构呢?

六、类的使用

类的使用主要是实现了代码的重复使用,以降低项目开发的时间,程序员的工作量也会减少许多。只要可以使用类的地方应当尽量使用类,使用类应该养成一个良好的习惯,这样才可以在真正使用类的地方得心应手。可以说一个大型PHP项目就是由类组成的。个中的滋味还是自己慢慢体会吧。

总之,PHP在线学习的平台我赢职场提醒大家在开发大型PHP项目的时候,要预算好时间。特别要小心客户在半途来个回马枪,那就功亏一篑了。

下载BACnet+网络开发经验总结word格式文档
下载BACnet+网络开发经验总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    ORACLE数据库开发经验总结

    ORACLE数据库开发经验总结 ---- ORACLE数据库作为大型数据库管理系统,近年来一直占有世界上高端数据库的最大 份额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出新的不......

    校本课程开发经验总结

    强化校本课程总结 校本课程的设置,是国家基础教育课程管理的一个重要组成部分,是国家和地方课程的主要补充,对教师、学生、学校的发展具有十分重要的意义。几年来,我校认真贯彻......

    WEB前端开发经验总结

    WEB前端开发经验总结 发布时间:2009-04-20 09:05:33来源:作者:shengman点击:21015 这里跟大家谈谈个人对WEB前端开发的一些经验(当然都是个人的一些理解,有什么地方说的欠妥或不对......

    网络开发策划

    慕橙网络开发工作室成立于2013年,于11月份正式营业。该工作室由前身的培训单位演变而来,具有一定的工作经验和业务积累。慕橙网络开发工作室致力于小型网络前台开发,网络后台开......

    网络开发合同范本

    合同号_______ 网站建设合同书甲方:乙方: 地址:地址: 电话:电话:鉴于甲方委托乙方建立网站,帮助甲方树立自身形象,扩大宣传。为明确双方责任,根据中国法律经双方协商,签订此合同,以期双方共同......

    网络集体备课经验总结

    网络集体备课经验分享 鄂温克旗第一实验小学萨娜 这段时期联校组织低段老师利用网络进行集体备课,以前我们都是各备各的课,而自从“网络集体备课”以来,利用网络的优势和平台,......

    移动网络优化经验总结

    移动网络优化经验总结 热度 4已有 133 次阅读 2010-12-22 20:21 |个人分类:网优|关键词:移动网络优化经验总结移动网络优化经验总结 感知篇 此文通过比喻的方式总结一下我对......

    项目开发经验总结(含5篇)

    项目开发经验总结本人做项目经理工作多年,感到做这个工作最要紧的就是要明白什么是因地制宜、因势利导,只有最合适的,没有什么叫对的,什么叫错的,项目经理最忌讳的就是完美主义倾......