第一篇:单片机开发经验总结
单片机开发经验总结 单片机开发 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等专用复位芯片了,既稳定又方便。
第二篇:单片机开发工程师求职简历
基本简历
姓名: 李先生
国籍: 中国
目前所在地: 广州
民族: 汉族
户口所在地: 广东省
身材: 172 cm?56 kg
婚姻状况: 未婚
年龄: 25 岁
求职意向
人才类型: 普通求职?
应聘职位: 嵌入式软件开发(单片机/DLC/DSp):单片机开发工程师、工作年限: 2 职称: 无职称
求职类型: 全职
可到职日期: 一个星期
月薪要求: 3500--5000
希望工作地区: 广州
工作经历
公司名称: 番禺致丰微电器有限公司起止年月:2008-03 ~ 2009-09
担任职务: 测试工程师
工作描述: 进行MCS51单片机(STC系列、AT89系列等)、ARM(LpC21XX)编程和硬件设计,熟悉uc/os和small rtos嵌入式实时操作系统。
教育背景
毕业院校: 韶关学院
最高学历: 本科
获得学位: 工学学士
毕业日期: 2008-06-0
1所学专业: 自动化
语言能力
外语: 英语优秀
国语水平: 精通 粤语水平: 优秀
工作能力
嵌入式系统开发应用技术(MCS51、ARM),熟练掌握汇编语言,C语言,熟悉C++.精通常用通信协议及相关总线:1-wire、I2C、SpI、UART、RS232、RS485等;以KEIL, RealView-MDK/ ADS1.2 , platform Builder 5.0和 eMbedded Visual C++ 4.0为程序开发平台,进行嵌入式系统开发;掌握uc/os和WINCE5.0嵌入式操作系统。熟悉模拟电子技术、数字电子技术和电力电子技术,硬件设计平台为ORCAD和 protel99SE.个人自传
能吃苦耐劳,工作积极肯干,自学能力和动手能力强,能进行MCS51单片机(STC系列、AT89系列等)、ARM(LpC21XX)编程和硬件设计,熟悉uc/os和small rtos嵌入式实时操作系统。
联系方式
通讯地址:
联系电话: ***
电子邮件: diyifanwen@glzy8.com
个人主页: http://www.xiexiebang.com
第三篇:项目开发经验总结
项目开发经验总结
本人做项目经理工作多年,感到做这个工作最要紧的就是要明白什么是因地制宜、因势利导,只有最合适的,没有什么叫对的,什么叫错的,项目经理最忌讳的就是完美主义倾向,尤其是做技术人员出身的,喜欢寻找标准答案,耽误了工作进度,也迷茫了自己。
项目开始阶段是一个最重要的阶段。项目经理在接手一个新项目的时候,首先要尽可能地多从各个方面了解项目的情况,如:
1.这个项目是什么项目,具体大概做什么事情,是谁提出来的,目的是解决什么问题。在国内很多客户都很不成熟的情况下,千万不要根据项目的名称望文生义地去想象项目的目标。一个名为“办公自动化”的项目很有可能在你进场以后一个月才发现客户其实需要的是一个计算机生产管理辅助信息系统系统。前期了解情况的工作越详细,后面的惊讶就越少,项目的风险就越小。
2.这个项目里牵涉哪些方面的人,如投资方、具体业务干系方、项目建成后的运营方、技术监督方等等,很多项目里除了业主单位的结构很复杂以外,还有一些其他单位也会牵涉进来,如项目监理公司、业主的行业主管机构等。项目经理需要了解每个方面的人对这个项目的看法和期望是什么。事先了解各个方面的看法和期望,可以让你在做项目碰到问题的时候,就每件事情分析哪些人会在什么方面支持你,哪些人会出于什么目的反对你,从而提前准备联合朋友去对抗敌人,让事情向你所希望的方向发展。没有永远的朋友,也没有永远的敌人,只有一致的利益,这句话作为项目经理是一定要记住的;
3.基本了解了客户的情况后,下面的事情就是了解自己公司各方面对这个项目的看法。
4.在做整体项目计划前,还要大致计算一下你手上的资源。首先是时间,现在市场竞争
激烈,往往很多项目要求在几乎不可能的时间范围里完成。对于这一点,你在做项目的风险控制计划的时候要充分考虑。其次是人员,根据项目预算和已往经验,大致计算一下未来的项目小组有多少种角色,每个角色目前公司是否有人,是否能完全归这个项目使用,是否需要另外招聘一些人员,招聘的准备工作要尽早启动。最后就是一些设备的准备,项目所需大件关键设备要尽早预定,以后不管发生设备等人还是人等设备的情况,浪费的都是你的时间;
5.现在是做项目说明书的时候了。一份好的项目说明书不仅将要做的事情描述得很清楚
7.明白了要做哪些事情和你手上的筹码以及你做这个项目的总体策略,现在是成立项目小组的时候了。很多项目经理都没有自己选择组员的权利,那么,就尽量发挥你的影响力去寻找那些你想要的人吧。成员的组成根据项目不同,相差较大,很难有什么具体要求,但是,一定要有精通客户业务的人,很多小项目里,这个人就是项目经理本人,大项目里会配
客户了,不知道自己要做什么,更不懂怎么做还要指手画脚的客户到处存在,但是要明白,是客户选择了你,而不是你选择了客户,有了客户你才有工资拿,心平气和一点吧;
8.如果你在一个部门时间做长了,对这些规则的运用觉得是一件理所应当的事情,但是,你现在面对的是多个部门甚至多个单位,不把沟通规则说清楚,你以后就会吃亏。下面的东西看起来无聊,其实还是很管用的:第一个是规定信息的流动方式和介质,是推还是拉。推的意思就是项目经理将主动发布信息,不管通过电话、邮件还是书面方式,保证将信息传达到每个人。这种情况适合小项目,人少;拉的意思就是项目经理就是一个类似web服务器,你自己需要什么信息就去问他。当然,没有项目经理把自己搞得那么累,他会用发布信息到公共介质的方式公布信息,简单的是白板,复杂一点的是项目的公共信息交互区,潜规则就是我发了你没去看就不要说我没告诉你。说这些看似很无聊,其实里面牵涉信息传达不完全的责任问题。当然,这些都是指一般的方式,而且不要绝对化,一般情况下,主动沟通和被动访问是同时存在的,尤其是对领导,项目经理更加应该主动去和领导沟通。第二个问题就是文档问题,很多人怕写文档,但是项目经理一定要牢记“好记性不如烂笔头”的道理。有理所以项目经理开始就要和客户说清楚有些共识的东西,比如会议纪要,甚至领导的讲话记录,都要写成文档,双方签字,这样以后扯皮的时候,就能做到有据可查。记住:说了的就和没说一样,只有写下来大家签字后才算真正发生了的。还有一些问题,比如你提交的报告,给领导(包括本方领导和客户领导)做一个选择题,结果领导压住不批,让你无所适从,结果拖延了进度。这时候,你可以等,但是注意要留记录,标明是谁的责任;另外,如果你在开始阶段就和领导商定:如果批示提交
三天后没有得到领导答复就算对方同意,这样你就会主动很多。再比如不同事件的审批流程问题:什么等级的事情记录在项目日志里、什么等级的事情要双方项目经理专门签署备忘录、什么等级的事情要双方领导出面签署合同附件等等。事先想得越周到,以后的工作就越主动。
9.定义了一些游戏规则,现在是坐下来做计划的时候了。这一节,首先是找几个关键组员,比如客户业务专家、系统分析员等等,做一下项目模块划分工作。项目分成几块去做,每一块完成什么,模块之间的信息如何交换等等。需求定义的是做什么
每件事情需要什么资源,他们之间的前后关系如何,消耗的时间有多长,完成后有什么标志等。所有的结果最后用一个叫做甘特图的形式表现出来。你做完这个表以后会惊奇地发现,甘特图上项目的结束时间会远远落后于你的计划结束时间(签合同的人永远不会先征求你的意见的)。当然,学过项目管理的人会大谈什么WBS、优化路径之类的东西,但是我的经验是你再优化也不可能把这些东西安排到计划的时间结束。如果你没碰到这个问题,在我恭喜你挑了一个轻松活之前,请你再去确认你是否罗列了所有要做的事情和正确评估了他们所需要的时间。这时候,你就要考虑牺牲一些任务的时间(也意味着质量)了。按照什么标准牺牲?这个项目的战略!我们在第三节提到过的战略。我的经验是如果你什么都赶进度,其结果可能就是十件事情你一件也没做好,想想多么失败啊。所以,把资源投到你熟悉和有把握的事情上,最后的结果是十件事情,你有三件做成了精品,三件完成,还有四件因为某些原因延误,成绩单是否靓丽了很多呢?战略决定优先级,而正确排列事情的优先级是一个项目经理能力的主要体现。
现在项目已经完成了前期工作,了解了项目的目标、搞清楚了手上的资源,制定了项目的策略,然后编制了项目的整体计划,项目进入实施阶段。进入这个阶段反而是项目经理比较空闲的时候,不像前期的时候项目经理要象记者一样到处和不同的人接触,搞清楚他们在说什么,努力猜测他们在想什么和他们的真正目的,那才是最累人的事情。当然,小项目的项目经理往往自己也是一个资源,要做很多事情,这时候反而比谁都苦。项目经理这段时间的主要工作是保持和客户领导以及自己领导的沟通。和客户领导沟通时特别要注意,除非你需要对方给你支持,那么你才需要讲得具体一点,否则,告诉他一切正常就可以了,而且态度要积极一些,千万不要说一些领导不懂的细节,比如:“王局长,最近项目进度还算正常,就是JVM经常发生一些内存泄漏的情况…”
项目经验总结(2)
前阵子负责一个接口项目的开发,虽然技术上没有太大问题,但过程并不顺利。现在总结一下经验上的不足:
一是,前期没有明确的分析文档、用例图和活动图,为了让快点看到成果,只凭着简单的需求文档进行开发。
二是,中期没有补上缺失的文档,而是在原来代码上修修补补,最后由于变化很大,所以基本上完全重构。
三是,给潜在客户的文档不明确方向,技术上太细致化,而且没有一个明确的世界观,不能在一个比较高的层面上表现接口的功能。
四是,接口散乱,没有统一的中心流程,虽然可以用,却经常走入死胡同。建议:
第四篇:校本课程开发经验总结
强化校本课程总结
校本课程的设置,是国家基础教育课程管理的一个重要组成部分,是国家和地方课程的主要补充,对教师、学生、学校的发展具有十分重要的意义。几年来,我校认真贯彻上级有关指示精神,本着“强队伍、优课堂、重质量、创特色、树品牌”的办学目标,从实际出发,在校本课程的开发和建设中,进行了有益的尝试与探索,取得了阶段性成果。下面,就我校所取得的点滴经验与做法,向各位领导和各位同仁做一简要的汇报:
一、加强领导,让校本课程融入到常规管理中。
我校自校本课程开发以来,为了切实将校本课程落到实处:一是定期召开专题会议,认真落实《特色学校建设活动方案》精神,从学校现有实际出发,因地制宜,本着既不增加负担,又符合儿童智力和能力发展需要的原则,集思广益,积极采纳基层领导、骨干教师的建议,逐渐完善校本课程的开发与建设。二是切实加强校本课程的管理,建立了领导组织,实行校长负责制,组建了校本课程开发小区,配备了专职校教师,制定了相应的管理、考核和评价制度,形成了学校决策把关、课程教师组织实施、家长委员会监督的管理体制,为校本课程有条不紊地开展奠定了坚实的基础。
二、勇于实践,让校本课程扎根于日常教学中。
在认真贯彻落实国家、地方两级课程管理的基础上,我校依据校情,结合儿童特点,把校本课程开发的目标定位在“以学生发展文本、以教师的专业发展为本、以学校的可持续发展为本”之上,《我爱泥塑》和《学学剪窗花》。经过一年的教学实践,即有教师、有课表安排;保证课堂教学时间、保证课堂教学质量;体现校本课程教学成果阶段性展示。每学期除了举办座谈会、演讲会,还广泛向教师、学生、家长、社会征求意见和建议,为校本课程的开发和建设广开言路。由于教材定位准确,目标明确,管理到位,教师的工作热情高,学生的学习兴趣浓,出现了校园内人人关心校本课程,人人参与校本课程,社会上全面关注校本课程,家长大力支持校本课程的良好局面。
三、注重研究,为校本课程开发提供不竭的动力。
我们认为:校本课程所蕴涵的新理念、新方法以及实施中所出现和遇到的各种各样的新问题,都是过去的经验和理论难于解释和应付的。教师不能被动
持“校校有特色,生生有特长”的办学理念,把校本课程的特色创建作为提升我校素质教育质量的重要工作来抓。
1、阳光体育丰富多彩。我校十分重视阳光体育活动的开展,做到了因地制宜,丰富多彩,特色鲜明。
2、特长教育有声有色。学校成立了美术、书法、音乐、舞蹈等兴趣活动小组,由学生自主进行选择。
几年的实践,使我们深刻体会到:虽然我校在校本课程的开发利用上做了一些工作,取得了点滴成绩,但距兄弟校还相差甚远。我们决心在今后的校本教研的开发和探索中,积极努力学习,借鉴先进经验,不断探索创新,把我校的校本课程开发工作做实、做细、做好、做强,为我校的校本课程开发做出我们应有的贡献!
第五篇:ORACLE数据库开发经验总结
ORACLE数据库开发经验总结
----ORACLE数据库作为大型数据库管理系统,近年来一直占有世界上高端数据库的最大 份额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出新的不断努力,一直成 为IT业界瞩目的焦点。岭澳核电站的数据库平台采用了ORACLE7.3作为后端平台,前端选 择了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作为开发工具,采用了目前流行的
CLIENT/SERVER模式。本人在ORACLE系统的开发中,就ORACLE的整套开发工具提出一些自
己的体会,供同行参考。
----一.ORACLE SQL PLUS 使用技巧:----①查找重复记录:
SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);----执行上述SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录。----删除重复记录:
DELETE FROM EM5_PIPE_PREFAB WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);----执行上述SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录。----② 快速编译所有视图
----当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,因 为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快 速编译。
SQL >SPOOL ON.SQL SQL >SELECT ‘ALTER VIEW ‘||TNAME||’
COMPILE;’ FROM TAB;SQL >SPOOL OFF 然后执行ON.SQL即可。
SQL >@ON.SQL 当然,授权和创建同义词也可以快速进行,如:
SQL >SELECT ‘GRANT SELECT ON ’ ||TNAME||’ TO USERNAME;’ FROM TAB;SQL >SELECT ‘CREATE SYNONYM
‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;③ 用外联接提高表连接的查询速度
在作表连接(常用于视图)时,常使用以下方法来查询数据: SELECT PAY_NO, PROJECT_NAME FROM A WHERE A.PAY_NO NOT IN(SELECT PAY_ NO FROM B WHERE VALUE >=120000);----但是若表A有10000条记录,表B有10000条记录,则要用掉30分钟才能查完,主要因 为NOT IN要进行一条一条的比较,共需要10000*10000次比较后,才能得到结果。该用外
联接后,可以缩短到1分左右的时间: SELECT PAY_NO,PROJECT_NAME FROM A,B WHERE A.PAY_NO=B.PAY_NO(+)AND B.PAY_NO IS NULL AND B.VALUE >=12000;----④ 怎样读写文本型操作系统文件
----在PL/SQL 3.3以上的版本中,UTL_FILE包允许用户通过PL/SQL读写操作系统文件。如下: DECALRE FILE_HANDLE UTL_FILE.FILE_TYPE;BEGIN
FILE_HANDLE:=UTL_FILE.FOPEN(‘C:’,’TEST.TXT’,’A’);
UTL_FILE.PUT_LINE(FILE_HANDLE,’ HELLO,IT’S A TEST TXT FILE’);UTL_FILE.FCLOSE(FILE_HANDLE);END;----相关UTL_FILE数据库包详细信息可以参见相关资料。----⑤ 怎样在数据库触发器中使用列的新值与旧值
----在数据库触发器中几乎总是要使用触发器基表的列值,如果某条语句需要某列修改 前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_ NO,:NEW.DEPT_NO。
----二.ORACLE DEVELOPER 2000使用技巧:
----① 改变FORM(FMX模块)运行时的Runform4.5的题头:
----DEVELOPER2000中FMX默认题头为:Developer/2000 Forms Runtime for Windows
/ NT 你可以改为自己定义的标题,----1.在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE----2.在此触发器中写如下代码:
set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT SYSTEM 欢迎使用');----② 如何隐藏菜单中的window选项:
----在创建自己的菜单时,最后选项总有window项,下面介绍如何去掉它,----1.创建一个Menu
----2.在Menu中建立一个Item,命名为WINDOW。----3.设置该Item属性如下:----
Menu Item Type:Magic Command Type:Null Magic Item:Window Lable:为空
----③ 怎样创建动态下拉列表List
----Developer 2000 中的列表是通过设置相关属性而完成数据项的列表设置的,但那
只是静态的,有时你想让某项成为动态的列表,随输入数据的改变而改变,就需要动手 去编个小程序。下面详细介绍怎样去做:----有块EBOP_CABLE_ACCOUNT,下有SPECIFICATION数据项,当一进入该模块时,就将
SPECIFICATION项在数据库中存储的值动态显示出来,先在Form4.5中建立一个PRCEDURE,命名为DYN_LIST: PROCEDURE DYN_LIST IS
CURSOR C1 IS
SELECT DISTINCT(SPECIFICATION)FROM EBOP_CABLE_ACCOUNT;CNT NUMBER;i NUMBER;TNAME EBOP_CABLE_ ACCOUNT.SPECIFICATION%TYPE;BEGIN
CLEAR_LIST('EBOP_CABLE_ ACCOUNT.SPECIFICATION');SELECT COUNT(DISTINCT
(SPECIFICATION))INTO CNT FROM EBOP _CABLE_ACCOUNT;open C1;FOR i IN 1..CNT LOOP
FETCH C1 INTO TNAME;EXIT WHEN C1%NOTFOUND OR C1%NOTFOUND IS NULL;ADD_LIST_ELEMENT('EBOP_CABLE_ACCOUNT.SPECIFICATION',i,TNAME,TNAME);END LOOP;DELETE_LIST_ELEMENT('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);CLOSE C1;END;然后在FORM的WHEN-NEW
-FORM-INSTANCE触发子中加入一行: DYN_LIST;----这样一进入该FMX,就会动态刷新该列表。除此之外,SPECIFICATION数据项改为列 表项。
----④ 当显示多条记录且数据项特别多时,如何组织录入及显示界面:----如上图所示,PRN代码及设备代码在画布1(CONTENT型)上,其它数据项在画布2(ST ACK型)上,所有数据项为一个表的列或一个块的数据项。在拉动水平滚动条时或用TAB或 敲回车键时,将看到全部数据项。这种排布方法适用于数据项特别多又想显示多条记录 时用。主要制作顺序为:先建立两个画布,画布1(CONTENT型),画布2(STACK型),然后
建立块,选画布时用画布1,这样所有项都显示在画布1上,然后选中除PRN代码及设备代 码之外的所有数据项,选TOOLS菜单下的PROPERTIES选项,将这些数据项的CANVAS属性选
为画布2(STACK型),然后调整整体位置就可以了。----⑤ 如何在FORM的受限触发子中提交保存数据
----在FORM中很多触发子是不能用COMMIT WORK语句的,当你在该触发子中使用了UPDA
TE,DELETE等操作并想立即存盘时,就需要COMMIT WORK语句了。首先在服务器端建立D B_SQL_COMMIT这个过程(采用ORACLE7.3数据库),PROCEDURE DB_SQL_COMMIT IS source_cursor integer;ignore integer;V7 NUMBER :=2;BEGIN
source_cursor:=dbms_sql.open_cursor;dbms_sql.parse(source_cursor,'COMMIT WORK',V7);ignore:=dbms_sql.execute(source_cursor);DBMS_SQL.CLOSE_CURSOR(source_cursor);END;----然后在FORM中该触发子中调用过程DB_SQL_COMMIT;就可以了,当然你可以根据自己
需要将该过程加入参数,这样通过参数可以得到执行DML语句的权限。----⑥ 如何在FORM中实现某数据项自动按记录序号加一操作
----设块名为VO,要操作的数据项为VO_ID,在该块中建立块级触发子WHEN-CREATE-REC
ORD,加入如下代码:
:VO_ID:=:System.Trigger_Record;----这样每当生成新记录时VO_ID就会自动加一了。
----⑦ 如何在一个FORM中调用另一个FORM,或在一个块中调用另一个块时显示特定的 记录有时用户会要求在调用另一个FORM时,只显示相关的记录,举例如下,在一个FORM 的块中有一个按钮,在按钮触发子中加入如下代码: DECLARE PM PARAMLIST;BEGIN
PM:=GET_PARAMETER_LIST('PM');IF NOT ID_NULL(PM)THEN
DESTROY_PARAMETER_LIST('PM');END IF;PM:=CREATE_PARAMETER_LIST('PM');......................ADD_PARAMETER(PM,'THE_WHERE', TEXT_PARAMETER,'EM_NAME=''EM4'' AND EM_PROJECT_NAME=''支架预制''');OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);END;
----其中EM_NAME,EM_PROJECT_NAME为本FORM某块的数据项,PAYMENT为要调用的FORM 模块。这样通过传递参数列表就可以得到想要的结果。在FORM PAYMENT.FMB中,建立一 参数THE_WHERE,CHAR型,长1000,然后在PAYMENT.FMB中建立FORM级触发子WHEN-NEW-F ORM-INSTANCE,在该触发子中加入以下语句:
IF :PARAMETER.THE_WHERE IS NOT NULL THEN SET_BLOCK_PROPERTY('PAYMENT', DEFAULT_WHERE,:PARAMETER.THE_WHERE);END IF;----其中PAYMENT为要显示的块,这样通过参数传递就得到想要的某些特定条件的数据 了。
----⑧ 在FORM中当有主从块时,连续输入记录如何避免被不断的提示保存:
----每输入一条主记录和若干条该主记录的从记录后,此时再导航到主块输下一条记录,FORM就会提示你是否要保存记录,而你并不希望FORM提示,让它自动保存,此时你可 以到Program Units中找到过程PROCEDURE Clear_All_Master_Details,然后在这个过程 中找到语句
Clear_Block(ASK_COMMIT);----将其改为Clear_Block(DO_COMMIT);就可以了。----⑨ 在Report开始时选择排序项:
----在报表开始的Parameter Form中选择报表按哪个数据项排序,----1.先在USER PARAMETER 中创建SORT参数,为字符型,长20。
----2.初始值选’责任方’,然后将这四个值输入到DATA SELECTION中,形成列表。----3.然后处理QUERY中的SQL语句: select CHARGER,FCO_NO,EM_NAME,FCO _NO,DESCRIPTION, FCR_POINT from FCR_MAIN ORDER BY DECODE(:SORT,'责任方',CHARGER,'FCO号', FCO_NO,'FCR号',FCR_NO,'FCR号',EM_NAME)----⑩ 在Developer 2000中如何读写操作系统文件
----在用Developer 2000的开发工具开发应用程序时,经常碰到需要读写外部文件的问
题,可以用ORACLE 带的包TEXT_IO来完成这项需求。例如: DECLARE
IN_FILE TEXT_IO.FILE_TYPE;OUT_FILE TEXT_IO.FILE_TYPE;LINE_BUFER VARCHAR2(80);/*若不用IN_FILE,可以将各字段联接在一起赋值给此变量*/
BEGIN
IN_FILE:=TEXT_IO.FOPEN(‘C:TEMPTEST1.TXT’,’r’);OUT_FILE:=TEXT_IO.FOPEN(‘C:TEMPTEST2.TXT’,’w+’);
LOOP
TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);TEXT_IO.PUT(LINE_BUFER);TEXT_IO.NEW_LINE;TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);END LOOP;EXCEPTION
WHEN no_data_found THEN
TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....’);TEXT_IO.FCLOSE(IN_FILE);TEXT_IO.FCLOSE(OUT_FILE);END;----三.数据库管理
----① 在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TAB
LE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DR OP,DELETE操作后,该TABLESPACE上百兆的空间就被耗光了。----② 数据库文件的移动方法
----当想将数据库文件移动到另外一个目录下时,可以用ALTER DATABASE命令来移动(比ALTER TABLESPACE适用性强):
----1.使用SERVER MANAGER关闭实例.SVRMGR > connect internal;SVRMGR > shutdown;SVRMGR >exit;----2.使用操作系统命令来移动数据库文件位置(假设这里操作系统为SOLARIS 2.6).在UNIX中用 mv命令可以把文件移动到新的位置,#mv /ora13/orarun/document.dbf /ora12/orarun----3.装载数据库并用alter database命令来改变数据库中的文件名.SVRMGR > connect internal;SVRMGR > startup mount RUN73;SVRMGR > alter database rename file
> ‘/ ora13/orarun/document.dbf’
> ‘/ ora12/orarun/document.dbf’;----4.启动实例.SVRMGR > alter database open;----ORACLE数据库开发经验总结