Chinaunix首页 | 论坛 | 博客
  • 博客访问: 947215
  • 博文数量: 632
  • 博客积分: 2778
  • 博客等级: 大尉
  • 技术积分: 3387
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-31 09:09
个人简介

123

文章分类

全部博文(632)

文章存档

2014年(36)

2013年(33)

2012年(563)

分类:

2012-12-14 16:54:46

我工作的内容大致分为三种:MCU、DSP嵌入式开发,工控软件开发,控制和信号处理的算法研究。

嵌入式开发

开发嵌入式程序主要是C语言和少量汇编,但是Python也派上了大用处,例如可以用它先模拟算法,设计滤波器,绘图。也可以设计一些调试工具,例如通过串口、CAN通信实时观察芯片内存中的数据,有时候调试比较复杂的东西时,甚至可以用pywinauto自动化界面操作,按照一定逻辑排查错误。在这些工作中,Python起到辅助作用。

工控软件开发

工控软件开发主要是通过一些AD,DA,DIO,电机驱动扩展卡,监控传感器,控制电机,读取并分析数据。这些程序原先是采用VC 6.0编写的,界面设计一直很成问题,一个好的绘图控件都没有。后来我改用C#,提高了一些开发效率,但是C#语法比较麻烦,一段时间不接触就忘记了。后来就改用Python,问题是那些扩展卡都没有Python的演示程序,因此需要自己动手用ctypes库调用扩展卡的DLL驱动程序。一旦和扩展卡打交道的程序写好之后,剩下的就是Python的强项了。
  • 用PyQt, wx可以很方便地制作界面,界面要求不高时,也可以用TraitsUI。
  • 绘图工具可以用Chaco, Mayavi, matplotlib,如果要求绘图速度比较高的话,可以用guiqwt,这个是对Qt的qwt绘图库的包装,速度要比其它的都快。
  • 如果需要做图像处理,那么OpenCV就派上用场了。
  • 如果需要高效计算的话,一般可以用NumPy解决,解决不了的就用Cython或者SWIG写一个扩展。有时还需要用多进程模块multiprocessing。
  • 数据存储可以用sqlite,如果是大规模的数据,可以用pyTable保存成HDF5格式。
使用Python能够解决绝大部分的工控软件的需求。

算法研究

Python开发快,比较适合研究算法,虽然执行的时候会很慢,不过也可以通过NumPy, Cython或者寻找一些现成的扩展库改善。当算法比较成型时,再用C, C++改写。

曾经有一个模拟项目的动态性比较高,用Python比较容易实现,运行速度虽然尚能接受,但是有时需要进行上百次模拟运行时,就需要等待很长时间了,因此决定用C++重写。而我的C++水平有限,不知道该如何设计,我最后采用Python动态输出C++代码,调用C++编译器编译成DLL,然后通过ctypes动态载入。由于每次根据用户的设置都会生成C++代码,因此使用的C++功能很基础,没有继承,虚函数等东西,我想能最大地提高程序的运行速度。最终程序的运行速度比Python版本提高了10-20倍(Python版本已经足够优化,使用了NumPy, SciPy的一些高速运算函数,否则纯粹的循环、判断和数值运算的话,C要比Python快几百倍)。

Python的优势

  • 扩展库非常丰富,而且都能看到源代码,源代码有时候比文档更管用。
  • 便携性,我在U盘中安装了一个portablepython,并将所有会用上的扩展库都放进去了,这样无论到哪台机器上,都能运行我的Python程序。
  • Python语法优美,用Python写程序是一种享受。

关于本书的编写

这本书的编写历时近3年,是我在工作中自学的一个总结,因此成书时间拖得比较久。如果真要写的话,书中介绍的每个扩展库都可以写出一本书来,因此这本书只能起到入门、打基础的作用。读者可了解到足够多的库,但是具体到实际工作中的某个问题时,还需要您自行查找文档,甚至分析库的源程序。在解决问题的同时所学习到的才是最有用、最牢固的。

也许您会怀疑花许多时间学习一门新的语言,以及那么多不太出名、甚至文档都不全的扩展库是否值得。那么你可以看看我的经验:我在工作中一边自学一边用来做实际的项目,这几年下来我感觉我的开发效率比用C#时高出3-4倍,比用VC时高出7-8倍。而我获得的回报就是,每天都能不用加班,并且写出了这本书,更重要的是,我还有更多的时间陪伴家人了。

欢迎到本书的论坛共同探讨Python科学计算方面的问题。 http://www.zeuux.org/group/scipython/
阅读(514) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~