今天心情真爽,项目做好了;我们原定开发周期一个月的项目,半个月就差不多搞定了。呵呵第一次接触数据采集卡,感觉蛮有意思的。我们做的是一个关于轨道交通演示的平台,地上有个8*8玻璃方格组成的巨大玻璃地板,下面有一张地铁一号线和两号线的站点线路图,每个玻璃下装有一个光藕传感器,以及一个LED,这块地板链接一个大屏幕和一台工业控制机器,主要实现的功能是当没有人踏上玻璃方格的时候,大屏幕滚动显示各个站点的介绍,当有鼠标和键盘动作时,转入交互界面;当有人踏上其中一个方格,比如是黄披南路站时,显示该站点相应的信息,以周边的景点,并且点亮其脚下的LED;如果有多人踩到不同的方格,点亮这些方格的LED,显示的画面,则是第一个踏上玻璃方格的人所在的站点,只有当第一个人走掉了,才会按照列队顺序,显示第二个人所在站点的介绍。
从国庆节开始就开始做了,主要是先搞定硬件接口,本来是选择c++和c#混合变成的,最初设计,将所有数据采集卡硬件部分控制都做入一个dll(包含多线程处理采集中断的响应),然后使用c#导入该dll,后来发现有个致命性的错误,也就是说从设计少错误,国庆以后用用了两天时间将代码重新移植到c#里面,那时候c#的实际年龄只有2天,不断地在编写中碰到棘手的问题,修正了一个错误,后面出现的居然是更加棘手的问题,我记得那时候要做键盘和鼠标的钩子,都要用到回调函数,那么就在c#里面声明委托,在使用的时候,没有将委托创建一个引用放在类里面,而直接使用了new去作为函数参数,一段时间一直导致程序莫名其妙的崩溃,而且解释器不会指出任何错误位置,起先以为是垃圾收集机的问题,后来详细阅读了msdn才知道是由于垃圾收集机没有办法跟踪这些引用而重复销毁造成的崩溃,光这个错误我就从下午开始一直搞到晚上9点,终于弄明白原因,那时感到非常开心;后来程序里面的线程开始多起来了,这样多线程之间的同步就很是一个问题,而且并发操作的不可预料性,使调试便得复杂,没有办法,只有根据实际出现的逻辑错误,在可能的线程里做上断点,因为当时对c#不熟悉,使用的互斥量都是直接调用api的,后来才发现c#都把互斥量啊,监视器这些功能都封装了类了,这下已经写好了,也懒得改,索性在优化代码时在修改了。
呵呵,这里谢谢我的同学们,大家始终没有失去对我的信心团结一致,虽然分给你们做得程序代码少了点,有些对不起你们,没有让你们好好的得到锻炼,哎处于无奈,前面国庆节的框架推倒重做了,是我的设计思路变乱了,希望下次作项目是一定设计精密周到。
今天难得休息的机会,下星期开始又有新的项目了,也是数据采集卡的,这次是孤军奋战了,祝自己好运吧!一句话,不到最后决不放弃!!