昨天突然接到一个任务,要用C#写一个程序。任务是非常的紧急,要求在半天之内写一个程序,把我们开发产品上的EEPROM里的内容读出来,再与样板数据比较,如果数据错误就必须显示错误,并指出错误的地址。说真的这个程序功能很简单,但要在这么短的时间内做错来,更要求用C#来写与保持与另外一些开发员的一致性!
说到C#,我还真的没用过!不为什么,用惯了C,C++写程序,对于其他不能用指针的语言多少不习惯。但任务都下来了,只好硬着头皮上。再看在老板谁都不叫,而叫我做的份上也要在两小时内完成这个程序!(接到任务时是上午9:50,我们11:45下班,所以只剩不到两个小时时间!加油!)
第一个任务安装C#,前一段时间重新安装了操作系统,除了日常开发用工具之外,就没装其他软件。安装时间,先设计一下算法。首先要读出样板数据出来,样板数据在文件里。在C++里可以用CFile之类的类去读写文件。在C#里呢?查了一下msdn,用FileStream,然后丢个OpenFileDialog进去,然后读到一个byte数组里就行了。第二步里从产品里读数据了,产品用治具通过串口与电脑连接,当然要读写串口了。但是这不是通用的串口,还好以前写了一个通讯用的dll,直接用它吧。程序中直接用命令控制串口读产品EEPROM的数据就行了。最后是比较了,由于有些数据是统一的,有些数据为每个产品不一样的,如产品id,解决方法是定义一个数组,里面存放不一样数据的地址,比较时skip掉这些位置就行了。
30分钟左右,C#终于安装好了,这破机子。拖拖拉拉,几十秒就把界面给搭好了,RAD工具就是好!还是十分不习惯里面控件的名字命名方式,多了就不知谁是谁了。花了几分钟给它们一一命名(始终喜欢匈伢利命名)。然后用了20多分钟吧,把刚才写下的算法用C#语言写了出来。
接下来编译试试看,由于C#有在编辑代码时自动显示语法错误的功能,编译竟然一次通过了(这点可比C,C++强多了)。当然有点问题啦,接下来开始调试,微软的调试器都是一样的,所以调试起来非常的顺手。首先是读eeprom数据有问题,从串口缓冲区传来都是空数据。由于C#没有指针,也不知有没有其他方,只好用数组一byte一byte地拷到我定义的数组里。但总传回出错信息,提示说引用的空对象。搞了半天才发现,串口没有数据返回,串口接口函数返回的应该是一个数组,但没读出数据的时候竟然返回一个null.不知C#优化了还是怎的,返回类型竟然变了。赶紧在这里加个判断,如果串口读数据不成功地话就千万别做下一步拷贝动作!不然可能有内存泄漏的可能。调试了近四十分钟时间,终于把功能弄好了。看看时间,大概还有20多分钟,改改了一界面,简单美化一下,和人性化一点,一个小程序终于在两个小时内大功告成了。
一点收获:
1.用C#开发windows应用程序的话和其他开发程序一样的,控件的属性和名字都差不多,所以如果做windows应用开发的话,不要对工具太过依赖,多学点windows知识才是更重要的。
2.在C#里显示十六进制很简单,比如:int i=16;Text1.Text=i.ToString("X");这样,你就可以显示十六进制了。毕竟站在前人肩膀上!
思考:
在C#里怎样实现类似指针的功能呢?
阅读(810) | 评论(1) | 转发(0) |