时间:2023-03-14 15:05:26
绪论:在寻找写作灵感吗?爱发表网为您精选了8篇程序设计论文,愿这些内容能够启迪您的思维,激发您的创作热情,欢迎您的阅读与分享!
一、前言
Windows提供强大的功能以及友好的图形用户界面(GUI),使得它不仅广泛的用作管理事务型工作的支持平台,也被工业领域的工程人员所关注。但Windows3.1并非基于优先级来调度任务,无法立即响应外部事件中断,也就不能满足工业应用环境中实时事件处理和实时控制应用的要求。因此,如何在Windows环境中处理外部实时事件一直是技术人员尤其是实时领域工程人员所关注的问题。目前已有的方法大都采用内挂实时多任务内核的方式,如Windows下的实时控制软件包FLX等,而iRMX实时操作系统则把Windows3.1当作它的一个任务来运行。对于大型的工程项目,开发人员可采用购买实时软件然后集成方式。
对中小项目,从投资上考虑就不很经济。如何寻找一种简明的方法来处理外部实时事件依然显得很必要。
本文首先阐述Windwos的消息机制及中断机制,然后结合DPMI接口,给出一种保护模式下中断程序的设计方法,以处理外部实时事件。经实际运行结果表明,该方法具有简洁、实用、可靠的特点,并同样可运行于Win95。
二、Windows的消息机制
Windows是一消息驱动式系统,见图1。Windows消息提供了应用程序与应用程序之间、应用程序与Windows系统之间进行通讯的手段。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成。
Windows系统中有两种消息队列,一种是系统消息队列,另一种是应用程序消息队列。计算机的所有输入设备由Windows监控,当一个事件发生时,Windows先将输入的消息放入系统消息队列中,然后再将输入的消息拷贝到相应的应用程序队列中。应用程序中的消息循环从它的消息队列中检索每一个消息并发送给相应的窗口函数中。一个事件的发生,到达处理它的窗口函数必需经历上述过程。值得注意的是消息的非抢先性,即不论事件的急与缓,总是按到达的先后排队(一些系统消息除外),这就使得一些外部实时事件可能得不到及时的处理。
图1
三、Windows的保护模式及中断机制
1.Windows的保护模式
保护模式指的是线性地址由一个选择符间接生成的,该选择符指向描述表中的某一项;而实模式中则通过一个段/偏移量对来直接寻址。80386(486)CPU提供的保护模式能力包括一个64K的虚拟地址空间和一个4G的段尺寸。Windows3.1实现时有所差别,它支持标准模式和增强模式。标准模式针对286机器,不属本文探讨范围。增强模式是对386以上CPU而言,Windows正是使用保护模式来打破1M的屏障并且执行简单的内存保护。它使用选择器、描述器和描述器表控制访问指定内存的位置和段。描述器表包括全局描述器表、局部描述器表、中断描述器表。保护模式与实模式有许多不同。其中显著的差异是访问内存的机制不同。
2.中断机制
(1)实模式中断
为了便于理解,我们先回顾实模式中断。
在实模式下,中断向量表IVT起到相当重要的作用。无论来自外部硬件的中断或是内部的软中断INTn,在CPU中都产生同样的响应。
①CPU将当前的指令指针寄存器(IP)、代码段寄存器(CS)、标志寄存器压入堆栈。
②然后CPU使用n值作为指向中断向量表IVT的索引,在IVT中找出服务例程的远地址。
③CPU将此远地址装入CS:IP寄存器中,并开始执行服务例程。
④中断例程总以IRET指令结束。此指令使存在堆栈中的三个值弹出并填入CS、IP和标志寄存器,CPU继续执行原来的指令。
(2)保护模式中断
保护模式中断过程与实模式中断过程类似,但它不再使用中断向量表IVT,而使用中断描述符表(IDT)。值得一提的是,Windows运行时IVT还存在,应用程序并不使用它,Windows仍然使用,但含义已不同。
①IVT结构:IVT在RAM的0000∶0000之上,占据开始的1024字节。
它仍然由BIOS启动例程设置,由DOS填充到RAM中。
②IDT中断描述符表:保护模式下,Windows操作系统为实现中断机制而建立的一个特殊表,即中断描述符表IDT。该表被用来保存中断服务例程的线性地址,它们是真正的24位或32位地址,没有段:偏移值结构。中断描述器表最多可含有256个例程说明,详细说明请见【3】。I
DT结构见图2。
图2
③当中断或异常发生时,处理过程与实模式类同。当前的CS∶IP值和标志寄存器值被存储。保存的内容还包括CPU其他内部寄存器的值,以及目前正在被执行的任务的有关信息(若必须发生任务切换的话)。CPU设法获取中断向量后,以它为索引值,查找IDT中的服务例程远地址,接着将控制转移到该处的服务例程。这是与实模式转移到IVT的不同所在。保护模式使用IDTR寄存器分配和定位内存中的IDT中断描述符表。IDT在内存中是可移动的,与IVT固定在内存中刚好相反。IDT中断描述符表在Windows中起决定性的作用。理解了Windows下保护模
式的中断机制。有助于我们理解中断服务程序的设计,它的关键就在于如何将服务例程的地址放入IDT中断描述符表中。当中断发生时,如何将断点地址及CPU各寄存器值保护起来;中断结束时,如何将保护的值恢复。Windows系统本身并不提供实现上述功能的API,而DOS保护模式接口DPMI正具备了上述的功能。
下面我们首先介绍DPMI接口,然后基于它实现Windows下中断服务程序的设计。
四、DOS保护模式接口DPMI
Windows除了标准服务外,还支持一组特殊的DOS服务,称为DOS保护模式接口DPMI,由一些INT2FH和INT31H服务组成。它使应用程序能够访问PC系列计算机的扩充内存,同时维护系统的保护功能。DPMI通过软件中断31h来定义了一个新的接口,使得保护模式的应用程序能够用它作分配内存,修改描述符以及调用实模式软件等工作。
Windows为应用程序提供DPMI服务。即Windows是DPMI的宿主(host),应用程序是DPMI的客户(client),可通过INT-31H调用得到DPMI服务。INT-31H本身提供多功能。其中它的中断管理服务允许保护模式用于拦截实模式中断,并且挂住处理器异常。有些服务能够和DPMI宿主合作,以维护应用程序的虚拟中断标志。
可以用INT31H来挂住保护模式中断向量,以中断方式处理外部实时事件。利用INT31H,功能0205H:设置保护模式中断向量,将特定中断的保护模式处理程序的地址置入中断向量里。调用方式:AX=0205H,BL=中断号,CX∶(E)DX=中断处理程序选择符:偏移值。返回:执行成功CF=清零,执行失败CF=置位。
挂住/解挂中断向量的时机很重要。主窗口第一次被创建时会传送它WM-CREATE消息,这时是挂住中断向量的最好时机。退出时需解挂向量,否则Windows可能崩溃。主窗口接收到WM-DE-STROY之后进行解挂工作,是最适合的。解挂向量可先用INT35H,0204H功能将老的中断向量保存,退出时用INT35H,0205H恢复。
五、编程实现
有了DPMI的支持,我们就可以很方便地处理数据采集、串行通信等工业过程中的实时事件。下面以Windows3.1平台下中断方式实现的串行通信为例,说明中断程序的编制和实现。为便于参考,给出了详细的代码。开发平台BC3.1/BC4.5,其本身支持0.9版的DPMI,无需运行其它支持DPMI的软件。编程语言C,可与C++混合编译。
初始化COM1,9600波特率,每字符8bits,1个停止位,中断接收,查询发送。
//windowsasycommunication
//byLiXiuming
//lastmodifiedonJune25,1996
#include〈windows.h〉
#include〈dos.h〉
voidinterruptfarDataReceive();
voidinterruptfar(*old-vector)();
unsignedchardatacom-r[1024],datacom-s[1024];
intinflag=0;
unsignedints8259;
intInitCom1()
{//串口1初使化
s8259=inportb(0x21);//读入8259当前状态并保存
outportb(0x21,s8259&0xe8);//初始化8259,允许0x0c号中断
outportb(0x3fb,0x83);
outportb(0x3f8,0x0c);
outportb(0x3f9,0x00);
outportb(0x3fb,0x03);
outportb(0x3fc,0x08);//允许中断信号送到8259A,以便能中断
outportb(0x3f9,0x01);//0x01,中断允许
return1;
}
voidinterruptfarDataReceive()
{//中断接收子程序
staticinti=0;//静态局部变量
charrechar=0;//每中断一次,i自动加1
rechar=inportb(0x3f8);//从数据口读出发送过来的数据
if(inflag==0)
{
if(rechar!=s&&i==0)//帧起始
{
i=0;
gotoll;
}
datacom-r[i++]=rechar;//存入datacom-r[](通信缓冲区)
if(rechar==e)//帧结束
{
inflag=1;
i=0;
}
}
ll:outportb(0x20,0x20);//回送中断结束标志
}
//调用DPMI
//保存旧的0CH号保护模式中断向量
//设置新的保护模式中断服务例程
voidInitCom(void)
{
asm{
cli
movax,204h
movbl,0ch
int31h
sti
}
old-vector=MK-FP(-CX,-DX);//保存
asm{cli//设置新的0x0c中断服务例程
movax,205h
movbl,0ch
movcx,segdatareceive
movdx,offsetdatareceive
int31h
sti
}
InitCom1();
}
//恢复8259状态
//恢复0CH保护模式向量
voidRestoreComm(void)
{
outportb(0x21,s8259);
asm{
cli
movax,205h
movbl,0ch
movcx,segold-vector
movdx,offsetold-vector
int31h
sti
}
}
在窗口第一次被创建时会传送它WM-CREATE消息,这时调用InitCom()即可。在主窗口关闭时,即主窗口中收到WM-DESTROY消息时,调用RestoreComm()恢复原来的状态。
这样在对串口初始化,设置中断服务例程后,通信事件发生时,会立即跳入中断子程序中执行,越过系统的消息队列,达到实时处理通信事件的目的。而数据处理模块可通过全局标志flag访问全局的数据通信缓冲区获取实时数据。这种实现方式与基于消息机制的Windows通信API实现相比具有实时性强的特点,因为它超过Windows系统的两极消息机制。
上述程序已在实际系统中得到应用。在Windows3.1支持下,同时运行三个Windows任务:服务器SERVER(内有实时串行通信,多个网络数据子服务),客户CLIENT,FOXPRO数据库系统。整个系统运行良好。切换到WIN95平台下(支持0.9版DPMI),系统也运行良好。
参考文献
1张豫夫、曹建文译.【澳】BarryKauler著.Windows汇编语言及系统程序设计.北京大学出版社,1995
阴阳理论强调万物皆含有“阴阳”,“阴”与“阳”之间的互动,构成了稳定、平衡的局面。在面向对象程序设计里,继承性体现了阴阳理论的这种“构成论”。派生类通过继承得到了父类的一切—父类中的数据(阴)和函数(阳)。如果在祖先类定义好数据(阴)和函数(阳),那么从这个祖先类派生出去的所有子类都将含有数据(阴)和函数(阳)。CPerson类中,含有阴(Name和Age属性)和阳(GetName()、GetAge()、SetName()、SetAge()四个函数)两大部分,通过派生得到CChina、CUsa和CJapan三个子类,在这所有的派生类中,都继承了CPerson的阴、阳两部分的内容,即使这三个派生类再派生其它子类,依然会继承CPerson的阴、阳两部分的内容,正所谓“万物负阴而抱阳,冲气以为和”,面向对象编程中这种阴、阳互动的内部工作方式构成了它强大的生命力。
2多态性抽象类与阴阳理论
面向对象程序设计的多态性中出现的抽象类,因其定义的某些函数(阳)是纯虚函数,没有具体的代码,实现不了常规的操作(缺失“阳”的功能),这种抽象类(含有“阴”却无功能性的“阳”)不能够生成对象,正符合“孤阴不生”之道。在抽象类中,接口类是一种典型的没有数据(阴)的抽象类,它只含有纯虚函数(无功能性的“阳”),从上面分析可知,该类型也是不能够实例化对象的,正所谓“独阳不长”。《易经》中有“天地氤氲,万物化醇,男女构精,万物化生”,在古籍《雪心赋》中更有“孤阴不生,独阳不长”的名句[6]。句中的“天地”、“男女”更抽象一步可理解为“阴阳”,两句都强调“阴阳”在万物的构成中相互依存的对立统一性。
3总结
当电缆没有开路、错位质量故障时,A0~A31端的电缆等效电阻RT≤7000mΩ时,对A0~A31端分别取样进行精密测量。在综合考虑IC100~IC131输入端低电平应≤0.7V和图2中运算放大器输入灵敏度兼容情况下,取恒流源IS的输出电流为10±0.5mA,Re0~Re31=33Ω±5%,Vces≤0.1±0.05V。因此可以计算出VA采样取值范围是0.353~0.566V,VB的采样取值范围是0.348~0.384V。为此图2中选用OPA335运算放大器,其输入电压范围是0~3V(单电源供电时),最大输入失调电压为5μV。图2中运算放大器输出电压V0~V31可由式(4)计算。由于OPA335的最大输入失调电流是70pA,在设计中控制最大输入电流在0.1~1mA之间,选择RA=RB=2kΩ±5%,R1=RF=33kΩ±5%,电压增益为16.5,输出电压范围0~3.6V。
2测量分析电路设计
A/D转换与分析电路设计在图3中,A/D转换电路ADC0809的输入端IN0~IN7分别与图2中运算放大器的输出端V0~V7连接,将模拟信号转化为8位数字输出信号,并传送给单片机的D0~D7端口,由单片机进行分析运算。路模拟输出信号共需要4块ADC0809电路进行模数转换。单片机P0.0~P0.7端口接收ADC0809输出的8位数字信号后进行分析。
3电缆等效电阻检测程序设计
3.1标准等效电阻值确定
端子压接后电缆等效电阻的标准值因电缆长度不同而有差异。可采用预先设定标准值和自动确定标准值两种方法。对线径为0.4mm的铜芯线电缆,预先设置标准值RT标准可按照式(5)进行计算:RT标准=75+148•L(5)其中,L是电缆长度,单位为m;RT标准的单位是mΩ。自动确定标准值方法是以正常工艺在质量稳定情况下,将首根检验的压接端子的电缆作为样品,对32个芯线等效电阻进行自动检测对比,选取其中的最小值,然后乘以系数1.05作为标准值。
3.2自动设定标准值程序设计
标准等效电阻值存放于I2C存储器AT24C08中。检测程序设计多路通信电缆端子精密检测的主程序流程图如图5所示。以下为采集的主要函数,假设通道数为36路。
4批量检测结果分析
案例需要选取复杂程度适中,学生比较感兴趣的实例,使课堂变得生动活泼。每位同学设计自己的实施方案,鼓励大家去思考、去创造,经过老师的讲解,可以完成整个案例的实现。学生之间可以通过讨论,经验交流,互相取长补短,完善自己的案例制作。当学生完成作品时,教师应当对此次案例的实施进行总结,并且在此基础上,将问题延伸,对其进行完善或改进,根据课时情况,鼓励学生设计并实现。
2与自身专业相结合
为了提高VisualBasic程序设计的实用性,增强学生学以致用的能力,需要将该门课程与学生所学专业有机的结合在一起,这样能够使学生的学习兴趣更加浓厚,提高学习热情。以交通运输专业为例,课程开展至图形图像的使用时,可以选取红绿灯变换例题作为学生的操作案例,如图2所示。在这个案例中,与交通专业的专业知识也许还有一定的差距,但这样一个简单的实例足以吸引学生的注意力,控件要求也比较简单,代码结构并不复杂,但是需要提醒学生注意的是需要对于Image3控件需要添加具有3个元素的控件数组,来存储红、黄、绿三种颜色。类似的案例教师可以通过网络搜索或图书资料等多种方法搜集,难度不能太大,如果太复杂,反而会影响学生学习的积极性,以上就是对于非专业学生,将案例教学法应用于理论教学中的一些建议。
3程序实践教学改革
本文对温度、湿度两个显著影响温室作物生长的参数进行深入分析研究,构建的温湿度模糊控制系统方案如图2所示。图2中,T和H分别为模糊控制系统输出的温室环境温度和湿度值;T1、H1分别为根据专家经验给出的农作物生长最佳的温度和湿度值;eT1、eH1分别为给定值与温室环境的实际测量值的偏差;ecT1、ecH1分别为温湿度偏差随时间的变化率。
2温湿度模糊控制器设计
2.1输入与输出变量的模糊化
根据温室大棚的实际状况,以温湿度偏差及其偏差变化率为输入变量,各输入变量的模糊化信息如表1所示。结合研究对象实际情况,既考虑控制规则的灵活性又兼顾简单易行。表1中,4个输入变量模糊集均取为A,A为{NB,NS,ZE,PS,PB};模糊论域均取为B,B为{-4,-3,-2,-1,0,1,2,3,4}。模糊控制器的输出控制变量为前窗、天窗、后窗、遮阳帘、通风机、加湿器和加热器。这7个变量均为开关量,只有开和关(0/1)两种状态,分别用符号u1、u2、u3、u4、u5、u6、u7表示这7个变量。
2.2隶属函数的确定
由于三角形隶属度函数在输入值变化时比正态分布或高斯型具有更高的灵活性[6],因此本研究中温湿度偏差与偏差变化率均选取三角形隶属度函数。图4为各输入变量的隶属度函数,选择的模糊集宽度为4。因为宽度过小会造成部分区间空缺,可能找不到相应的控制规则,收敛性不好;宽度过大会造成控制规则的重叠部分过多,相互间影响加大并且响应速度也变慢[7]。根据隶属度函数对输入变量量化为9个等级,其相应的隶属度赋值如表2所示。
2.3模糊控制规则的制定
模糊控制规则的形成实质上是把操作者的经验或专家的知识和经验进行凝练得到的若干条模糊控制规则[8]。经对实际温室控制系统的研究,发现温湿度间存在一定的耦合性,即当通过某一执行机构改变温度(湿度)时湿度(温度)也会发生变化,因此在制定模糊控制规则时就要渗透解耦的思想。基于此,对7种执行机构的开关状态做如下考虑:u1、u2和u3每打开一个设备降温和降湿效果增强一点,但速度较慢;u5开通后其降温和降湿速度明显比u1、u2、u3快;u4降温作用明显,对湿度基本无影响;u6主要起加湿作用,降温为次要作用;u7主要为增温作用,降湿为次要作用。研究中制定了温度与湿度之间、温度变化率与湿度变化率之间的两个模糊控制规则表,在此仅列出温度与湿度之间的模糊控制规则,如表3所示。表3中,U为u1到u7这7个变量的开关状态,开用“1”表示,关用“0”表示。
2.4反模糊化
模糊控制器输出的是模糊语言不同取值的一种组合,由于被控对象只接受一个精确的控制量,因此需要从组合中判决出一个精确的控制量,这也就是反模糊化的过程[9]。常用的判决方法有重心法、最大隶属度法和中位数法等,本研究采用重心法计算模糊控制输出的精确控制量。其具体表达式为u'=∑nj=1ωjμ(ωj)/∑nj=1μ(ωj)(1)其中,n为模糊变量个数,ωj为模糊变量,μ(ωj)是对应模糊变量的隶属度。本系统反模糊化的具体过程:首先温湿度误差或其误差变化率经量化后得到相应的量化等级,根据量化等级查询各个执行机构在控制规则表中对应的控制规则并使其激活。然后,由式(1)计算各个执行机构的输出值,计算结果等于0.5时,执行机构保持原来状态;计算结果大于0.5时,执行机构开;计算结果小于0.5时,执行机构关。基于这种思想,可建立各执行机构的模糊控制查询表,放在内存中,编写相应的PLC程序即可实现模糊控制器对执行机构的实时控制。
3温湿度模糊控制PLC程序设计
温湿度模糊控制PLC程序包括输入量的采样与模糊化程序、量化等级程序、模糊控制查询程序、执行机构控制程序和预警程序等[10],在此仅介绍有关输入采样、误差的计算和模糊控制查询的部分程序。本研究是在STEP7编程环境下完成的模糊控制程序。
3.1输入量采样和ET/EH计算程序
研究中应用的温湿度传感器的变送单元分别取0~50℃、0~100%RH,线性对应电流均为4~20mA,因此在编写PLC程序前需把温湿度的值与PLC中的数字量关系建立起来。具体过程如下:以温度为例,用I表示电流值,T表示温度值,X表示实时温度转换为PLC中的数字量值。由于0~50℃与4~20mA对应,4~20mA又与PLC中的数字量为6400~32000对应,因此可得曲线方程如式(2)与式(3)所示。根据式(4)即可计算0~50℃对应PLC内部的数字量值。如22℃对应数字量值为17664。同理,可求得湿度值与PLC中数字量的对应关系如式(5)所示。其中,H表示湿度。下面以温度为22℃和湿度为70%RH的情况编写相应的PLC程序,70%RH对应的数字量为24320。
3.2模糊控制查询程序
由反模糊化得到的模糊控制查询表实质上是一个9×9的二维数组,存在以VW200开始的81个字单元中。在此把数组的首地址指针设定为VD48,根据(VW20×9+WV18)×2即可计算偏移值,在查询表中定位并把相应值赋予WV28。
4系统实际运行测试
控制系统投入运行后,任选某一天对控制效果进行实际测试。测试时的起始温度和湿度分别为32℃和52%RH,控制设定值分别为22℃和70%RH。对温湿度采样时间间隔均为5min,根据采集数据绘制的曲线如图5所示。由图5可知30min左右时温湿度值均达到设定值,再经10min左右温湿值即达到预设的稳定状态值,达到了较满意的控制效果。控制系统达到稳态的时间可通过增减有关设备进行调节。
5结束语
1、设计原理及内容
1.1设计原理
为实现嵌入式田间图像视频采集,主控芯片选择使用比较广泛的S3C2440芯片,摄像头采用芯片为中星微ZC301的USB摄像头,把采集到的植物视频信息传输到主控芯片中。主控芯片包括把采集的视频信息显示到LED触摸屏上,还要把采集到的信息传输到PC机中。大田视频采集模块总体结构如图1所示。图1大田视频采集模块总体结构图软件方面包括USB摄像头的驱动程序、视频采集程序、LED实时显示程序网络传输程序的设计、调试、烧写等操作。
1.2主要研究的内容
1)对ARM嵌入式Linux的内核,Bootloader、YAFFS根文件系统的制作和移植,即完成软件平台的搭建;2)中星微ZC301的USB摄像头驱动程序的设计;3)模块的视频采集程序的设计;4)设计驱动LED,来显示采集到视频信息的程序;5)设计TCP网络传输程序,把视频信息发送出去;6)把采集到的视频图像显示到PC虚拟机上。
2、总体设计
2.1平台设计
2.1.1 BootLoader制作和移植首先按下任意键,使ARM9的程序运行停止在如图2所示的在DNW软件上出现主选择菜单界面;接着选择下载到flash,即选择‘1’,使用USB下载;在DNW软件上出现有关闪存的各个存储区间的情况。在上一步完成的基础上,再选择FLb.bin要烧写到NAND闪存中的位置,即选择‘0’,烧写到NAND闪存中的boot的位置;然后在DNW软件界面下执行配置选项中的操作执行指令,来进行下载地址、COM口和波特率设置;在DNW软件上点击USBPort选项中的传输操作,找到要烧写FLb.bin的位置,选中FLb.bin文件;文件传输完成后即完成了BootLoader的移植。
2.1.2 系统内核剪裁、制作和移植Linux内核的移植和引导加载程序的烧写过程几乎是相同的,添加内核的映像文件和BootLoader的移植都是相同的。也就是说,内核是下载到NAND闪存的kernel位置;内核移植时会出现移植进度条;移植完成后出现的和BootLoader的移植出现的提示一样。到此,Linux内核的移植就完成了。Linux内核配置对话框如图3所示。
2.1.3 FAFFS根文件系统的创建和烧写过程1)使用目录创造命令创造根文件系统的目录,并创建在usr目录下的bin、dev、etc等目录,把根文件系统的框架搭建起来;2)创造根文件系统的设备文件,进入到dev目录下使用创造命令来完成;3)安装etc,进入到etc目录下进行解压etc.tar.gz;4)进入到内核目录下使用模块编译命令来编制内核模块;5)使用模块安装命令对模块进行安装;6)使用配置命令对其进行配置,编译命令进行编译,安装命令进行安装;7)进入到根文件目录下使用ln-s命令来进行链接,重新再编译内核;8)将编译生成的内核映像文件通过USB传输到开发板的根文件系统中。
2.2软件设计
2.2.1 摄像头驱动程序设计
实现USB设备的即插即用功能的函数是摄像头探测函数,函数名称是sp_probe。该驱动程序中的数据传输模块使用takelet来实现对数据的同步快速传递,此函数对图像数据进行解码使用的是spcode.c程序。数据传输模块函数的具体名称是sp5_init_isoc,并且在sp5_open函数中挂有该函数的入口点。打开设备是同步传输数据开始的标志,这里实现数据传输的函数是sp_m_data,它把数据传送给驱动程序,驱动程序对数据的访问使用的是轮询法。Linux中的USB器件通过系统的USB层来操作下层硬件,流程图如图4所示。
2.2.2 模块视频采集程序
本系统的视频采集程序是基于V4L开发的,主要实现图像采集设备的初始化、读取和关闭等,基本操作流程如图5所示。
3、大田视频采集模块的安装与调试
3.1大田视频采集模块安装执行该命令要在该软件文件所在的目录下,将视频采集模块和PC虚拟机连接起来。这样在PC虚拟机上就会显示出视频图像,如图6所示。
3.2大田视频采集模块现场调试在齐齐哈尔嫩江大桥以北的农田里,对种植的土豆进行试验。模块调试如图7所示。图7模块调试一触摸屏LED和虚拟机显示图像不清晰,是因为帧的大小等参数设置得小,修改后图像较原来清晰些;触屏和虚拟机图像显示不连贯是因为其显示程序中延时设置太大,以及内核需要优化小点。大田视频采集模块的对农作物视频采集稳定,触屏的视频图像显示非常清晰,且以非常高的质量把采集到的视频图像传输到了PC机上(见图8),在其上显示的视频图像清晰连贯,能对农作物进行非常有效的实时监测;操作人员能够从其中迅速获得农作物的自身生长发育情况和是否有病虫害等信息,而且大田的农作物视频信息采集受阳光的影响也很小。本次试验非常成功。图8PC机显示的视频图像
4、结论
程序设计课程具有很强的实践性,在培养学生学会自己分析问题、使用计算机解决问题能力的同时提倡学生创新意识和创新能力的培养,主要采用的教学模式有项目教学法、案例分析法、任务驱动法等。
1.1《VB程序设计》课程中项目的设计
1.1.1章节项目
在整个教学过程当中,采用了“大项目、小案例、任务驱动不断”的教学模式,设计并选取与生活相联系的合理的能够调动学生学习积极性的项目。针对课程教学的最终目的,设计了一个比较完整的图书馆管理系统综合项目,但是这门课程知识点较多,要想完成这个综合项目,学生首先必须熟悉VB开发环境、掌握VB程序设计的基本概念和基础知识、各章节的知识点内容。为了配合整个课程最后综合项目的完成,在具体的教学中按照教学内容由易到难,针对教学中的重点和难点安排了13个章节项目,帮助学生更好地学习教材各章节中的知识点。项目一:由现实生活中的汉诺塔游戏、交换两个杯子中饮料的问题,引入一个利用VB程序解决两幅图片对换位置的具体案例,使学生熟悉VB集成开发环境以及各种窗口的使用、掌握常用控件对象的建立以及布局、利用VB开发简单应用程序的步骤、并初步引入程序设计思想,引导学生思考两数互换的问题,使学生通过观察、思考、总结得出两数互换的问题和两幅图片互换位置是一类问题。项目二:编写一程序,在屏幕上显示“欢迎来到VB世界!”,并输入自己的名字。使学生熟悉VB编程四部曲———界面设计、相关对象的属性设置、相关对象的代码编写、调试运行,尤其注意程序的调试过程。项目三:设计一个华氏温度与摄氏温度之间转换的程序。通过这个项目熟悉VB的数据类型及其运算,掌握VB的常用标准函数、变量以及常量的使用等语法知识点。项目四:利用输入函数输入一元二次方程的系数a、b、c,编写程序计算一元二次方程的两个实根或虚根,用输出语句输出结果。熟悉常用的输入输出控件、掌握Print方法、Inputbox()函数、Msgbox()函数和Msgbox过程的使用方法。项目五:设计一个账号和密码的输入检验程序。规范整理英文文章,即对输入的任意大小写的英文文章进行整理,规则是:所有句子开头应为大写字目(句子是以符号“?”、“.”、“!”作为结束符的),其他都是小写字母。使学生熟练掌握程序三大结构中的选择和循环结构。项目六:对一个班级的学生成绩进行输入统计,找出所有成绩中的最高分和最低分、全班成绩的平均分等。使学生掌握数组的使用。项目七:编写一个函数,在已知的字符串中找出最长的单词。假定已知字符串中只含有字符和空格,空格用来分隔不同的单词。通过该项目的学习使学生掌握过程程序的设计、实参、形参等基本概念。项目八:常用控件的使用。设计一个类似Win-dows记事本的应用程序,并完善其各项功能。通过该项目使学生掌握菜单、对话框和多重窗体程序设计。项目九:导入手机号码文件,编写一个手机选号程序,比如说选出手机尾号后四位相同的手机号码等。要求学生通过学习,掌握文件的相关操作,利用文件能够建立简单的应用程序。项目十:建立本班同学信息库,具体包括:学号、姓名、性别、出生日期、寝室电话、手机号码,并用数据控件及绑定控件实现对同学信息的浏览,并实现按姓名查询相关人员的基本信息。通过该项目掌握VB数据库的相关技术。项目十一:设计多文档应用程序,熟悉VB高级界面的设计。项目十二:用MMControl控件设计一个录音机,用API函数设计一个用户化的CD播放器。通过学习,使学生掌握VB多媒体程序设计。
1.1.2阶段项目
为了使整个学期的教学内容具有连贯性,糅合各章节零散的知识点,使教学实践具有可操作性,将整个学期的教学实践分成了三个阶段,每个阶段选用一个打破章节限制的阶段项目,使学生对所学知识内容有一个阶段性较完整的认识。这三个阶段依次是实践的开始阶段、实践的展开阶段、实践的结束阶段,分别对应阶段项目一、阶段项目二和阶段项目三。每个阶段中抓住关键教学环节,按照“大项目、小案例、任务驱动不断”的具体教学流程组织教学。阶段项目一:选用简单的项目,如蝴蝶飞舞、字幕滚动的项目。由于是初次接触计算机编程语言,所以对于非计算机专业的学生来说,这门课程的入门学习很关键,如果按照常规授课方法,依据书本上的章节内容安排依次讲授VB语言发展史、VB语言特点以及编程环境等内容的话,学生很难接受,往往是听得稀里糊涂,不知道学习VB究竟有什么实际作用,从而会产生畏难情绪,最终导致学生对VB知识学习失去兴趣和信心。为消除初学者的畏难情绪,第一阶段主要以激发学生的学习兴趣为主,让学生对VB有一个直观的认识,同时让学生在轻松的气氛中了解VB的编程环境和编程步骤,以及VB面向对象、事件驱动的编程机制。万事开头难,一旦学生对VB产生了兴趣,就有利于后续知识的学习。阶段项目二:难度稍微加大,选用计算器项目。通过本项目,一方面让学生理解控件数组的含义和设计使用方法,以及简单下拉菜单、常用数学函数的使用、过程函数的编写等,进一步加强学生对概念的理解。另一方面让学生注意可视化界面的设计,因为友好美观的人机交互界面,给人赏心悦目感觉的同时是软件的门面。阶段项目三:选用综合项目———学生信息管理系统。通过这个项目让学生真正了解掌握软件的开发过程。虽然这个项目比较难,但是有了前面知识的铺垫,会变得容易接受理解,也是对前面所学知识点的一次巩固和进一步更深入的理解,更是对前面知识的综合应用,让学生由浅入深、由易到难,逐步领会掌握编程的基本思想、基本方法和开发一个软件的完整步骤。三个阶段通过运用“大项目、小案例”,每个阶段让学生带着具体任务去学习,把枯燥的理论知识与生动形象的教学方式相结合,以清晰简明的表达方式深入浅出地向学生传授VB程序设计语言课程的知识,使学生在完成具体任务的实践过程中不断加深对面向对象程序设计思想和知识的理解。
1.2《VB程序设计》课程中的案例选取
有了已经准备好的各模块的项目,并展示给学生,学生有了兴趣后,就会想这些项目是怎么完成的,任务就落到各个模块项目里面具体的案例上了。由于VB程序设计授课内容多,授课时间紧张,按各知识模块划分选取项目后,在每个项目里面,按项目选取具体案例或是进行设计各项目的各功能模块,各功能模块实际就是一个个案例。在教学过程中应循序渐进,可以在原有案例的基础上逐步改变或增加一些条件,将应用进行引申,启发学生思维,让学生对知识点的理解更透彻,掌握各知识点之间的联系,提高学生发现问题、解决问题的能力,并在教学中兼顾学生生活经验与知识趣味性,达到事半功倍的教学效果。
1.3任务设计
围绕每一知识模块的教学内容、教学知识点,设计相关的项目,并在各个项目中采用了系列案例以及完成各功能模块的案例,为了让学生更加熟练、更好地掌握教学内容,在各知识模块的学习中设置学习情景,给学生留有感兴趣的任务,让学生去完成。同时根据各知识模块提出了单元任务,单元任务设置两个层次———基本任务和提高任务。由于学生自身水平有差异,对于基础好、学有余力的学生,要求他们不但要完成基本任务,还要完成提高任务;对于大多数学生,只要求他们完成基本任务。由于时间的限制,可以让学生在课余时间分析任务,在上机实践课以及课余时间去完成任务,最后做任务的总结。有了兴趣和任务的驱使,学生为了完成任务,就会利用各种方式和手段积极主动地去解决问题,他们会通过查阅相关书本、浏览网络资源、同学之间互相协作等方式解决问题,充分调动了学生的主观能动性,在完成任务的过程中学生分析问题、解决问题、实际开发应用程序的能力得到了锻炼,为学生知识的创新奠定良好的基础,同时知识面也更广、更大了。学生不会再觉得教学只是教师一个人的“独角戏”,而是教师和学生的“二人转”。在相互的配合以及友好和谐的师生关系中,教学顺利完成的同时学生个人的知识库也得到了构建。
2实施方法
1.1 课程结构陈旧
现在民办高职院校采用教学材料中的课程结构往往跟不上时代变化的脚步,甚至远远落后与当前的研究形式。而且在讲授Java这门实践性较强的课程,选择的教学方式非常陈旧,以教师为中心的被动化课堂模式,无法显示学生的主动性和积极性,这种教学模式根本无法诠释Java语言的精妙之处。
1.2 教学内容编排存在问题
现阶段民办高职院校的Java程序语言课程教学内容比较单一和落后,教学过程中,教师主要讲解一些Java理论性的知识。学生在学习了Java语言这门课程之后,往往对Java只是一个宽泛性的概念理解,对Java语言的实际操作的强大功能没有切身领会和感受到[2]。
二、java程序设计课程教学质量保证体系构建
2.1 提升教师教学水平
要有效提高Java程序设计课程教学质量,提高教师的教学水平是首要途径。Java语言的授课教师必须立足自身的优势和缺陷,取长补短,不断丰富自身的专业知识,增强专业技能,更新教学观念,引入创新的教学方法,积极主动参与Java实训活动,这样才能在Java课堂教学中游刃有余。
2.2 改革课程结构
课堂教学过程中,遵循“教师为引导,学生为主体”原则,选择与学生知识水平相符合的教学课程,课程结构要与学生的生活世界紧密结合,以培养学生的上机实操能力为主,让学生成为课堂上的主体,积极培养学生主动学习能力、动手能力,提高学生的应用创新能力。比如在讲授类、图形用户界面设计、网络编程等内容时,笔者特意将教科书的章节打乱,实际教学时由浅入深、循序渐进的讲解,适当增加直观化、生动化的案例解析。
2.3 优化教学内容
Java程序设计课程作为一项跨学科、知识面广的学科,在课程教学内容上要进行合理优化组合,以符合学生的知识水平和实际生活为主,利用网络教学资源为学生提供Java程序设计课件、Java案例解析、Java学习论坛等[3]。
三、结束语