设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 IT综合资讯 查看内容

专访许雪松:深入理解嵌入式开发

2013-5-22 14:22| 发布者: joejoe0332| 查看: 2725| 评论: 0|原作者: CSDN|来自: CSDN

摘要:   许雪松,毕业于西北工业大学生物医学工程专业,现任必达测控技术总经理。15岁开始接触计算机编程,18岁学习C/C++编程,迄今已十多年有余,领导并参与大大小小几十个项目的开发及维护。涉及工业自动化、嵌入式计 ...

  许雪松,毕业于西北工业大学生物医学工程专业,现任必达测控技术总经理。15岁开始接触计算机编程,18岁学习C/C++编程,迄今已十多年有余,领导并参与大大小小几十个项目的开发及维护。涉及工业自动化、嵌入式计算机以及逆变器等领域。尤其擅长RTOS,如uC/OS-II、RTEMS,翻译RTEMS官方文档近千页。也擅长测量电路和开关电源的设计,现在在公司领导团队设计电池测试产品和大功率逆变器产品。

  • 一切源于爱好

CSDN如何在15岁接触到计算机编程的?

许雪松:1997年的时候,我15岁,读高一,学校参加市里的编程比赛。从各个班级里选拔一些成绩比较好的学生参加,当时我对计算机的理解仅限于这个名称。我在班里成绩还可以,老师问我是否愿意参加,反正多学东西没坏处,我就参加了。当时我不懂什么叫编程语言,从地摊上随便买了本basic编程的书(我的第一本计算机书籍)。学校为了能考个好成绩,从华中科技大学请来个计算机老师(姓唐,名嵩),他也是我的计算机启蒙老师。培训开始有很多人,不到一个星期就锐减到4个人。当时参赛的编程语言只能是QBasic或turbo pascal,也因为那本书的缘故,所有人当中只有我一个在搞basic。弄得唐老师一边讲完pascal,一边单独给我开小灶讲basic。那时候还是win95的天下,学校的电脑清一色的386,全部没硬盘,用5.25寸的软驱和dos启动盘工作。唐老师给我做了张启动盘,把QBasic和dos全部放了进去。学习过程是枯燥的,我老是把赋值语句当作现实数学里的方程理解,所以老是理解不了x = x +1……

CSDN是什么原因让你一步步进入嵌入式世界?

许雪松:主要因素是我的爱好。在同龄人中,由于特殊的机会,接触计算机相对较早,学习编程也早。记得高三的那年写过的C/C++代码就超过万行。大学的时候,由于所学专业正好和编程结合在一起。

我在大学第二个暑假,刚刚学完了数字电路,就想自己做个闹钟。当时在计算机系认识的几个好友说学校和台湾的凌阳建立了个实验室,推SPCE061A的单片机,我第一次听到这个东西,这个是一个能支持语音的MCU。于是找到实验室的老师,从他手里买了颗SPCE061A。从电子市场买了个盗版 protel99SE,画了个PCB,当时还不知道怎么绘制原理图。就是一根一根线硬那样连上去。画了近一周,PCB发出去,因为没钱,只能做白板。就是板子没有绿油,阻焊层,那个板子焊接起来讲究水平啊!特别的吃锡,省下下半个月的伙食费,买齐了元件,贴上板子,开始调试了。从老师那里借了个仿真器,开始编程。我的第一个单片机程序,代码量不大,也就是几千行。最终的产品是一个用我声音报时的闹钟,做完后,我把它送给我大学里玩得比较好的女同学。从此, 我对单片机程序产生了浓厚的兴趣,同样是计算机,还是这个来得过瘾。送给好朋友后那份兴奋我至今难忘,这感觉使我对嵌入式产生了浓厚的兴趣。

由于专业的原因,很多企业不愿意给予技术岗位。只好用嵌入式编程这个爱好敲开了企业大门,使我在这条道路上越走越远。

CSDN你第一份工作有很多的不如意,后来心态是怎么调整的?

许雪松:这其中有很多故事,今天回头用审视的角度去看,首先是自己有些自我膨胀;其次,自己涉世不深,不懂人情世故;最后,性格使然,缺乏对情绪有效地控制。

自己对工作比较上进,第一份工作的不如意,让自己很痛苦,痛定思痛。为什么我会痛苦?我有哪些问题?这些矛盾是怎么产生的?这个企业有什么优点、不足?如何扬长避短?当然这些问题并不是一下子就想到答案。第一份工作做了两年,将这些问题全部弄清楚后,就决定辞职。我相信,自己可以把握自己的职场命运。

  • 深入理解嵌入式

CSDN我们都非常熟悉Windows这样的操作系统,但却不一定熟悉嵌入式系统中常用的RTOS。以你经验谈谈嵌入式和实时系统是什么样的?

许雪松:学生时代和朋友说起,我们这代人生在windows下,长在windows下,以为世界上就windows这唯一的操作系统。好在现在有Android和iOS让很多人意识到除windows之外还有别的操作系统。

嵌入式系统是为了特定应用高度定制的软件硬件计算机系统。从广义的去理解,只要被定制,都可以算作嵌入式系统。如今,在家用的x86系统上,跑一个类似VxWorks、RTEMS等操作系统,当成一个家庭网关都可算是嵌入式系统。有时候,同行认为真正的嵌入式系统硬件也必须按照应用去定制。

操作系统就是个资源的管理器。管理计算机上的全部资源,如CPU的计算时间、内存、IO等。实时操作系统简单的说,计算结果不仅依赖于计算结果的正确性,还依赖于结果计算完成的时间。比如说,火警按钮,按钮按下,要在规定时间内处理完成,延迟太大或者宕机都是无法接受的。

CSDN嵌入式系统为什么对实时性要求那么高呢?多快才算是实时系统?是不是所有满足一定的速度都可称为实时系统?

许雪松:很多厂家并不需要RTOS,前后台也能满足其需要,但他们还是用了RTOS。实时操作系统的高效是为嵌入式系统广为接受的一个很重要的原因。高效有两层意思,一是用任务可以封装开发的逻辑,使应用层代码逻辑更加完整,减小开发难度,代码的复用程度会变高;二是,RTOS代码都比较简洁,算法的空间杂度和时间杂度都很小,能将MCU的绝大部分资源都留给应用层。反过来,大量的应用促使RTOS更加的可靠、更加的精炼,实时性也会更好。当然,如医疗电子、航天电子和工业控制本身,有许多计算是依赖于时间的,对实时性要求非常苛刻。

实时一个很大的误区是认为实时是快的意思Windows启动一个应程序,在刚刚关闭一个大型程序后和刚刚启动不久,时间是完全不一样的。如果RTOS启动一个应用程序的时间是10秒,那么,不论在任何状态下,RTOS启动这个应用程序都是10秒,有一些误差,但这个误差是在系统的允许范围内。实时并不是快,是对于一个特定的计算过程,它的时间抖动非常的小,一般都可以精确到毫秒级。

CSDN嵌入式编程相比PC编程,具有哪些复杂性?你认为学习嵌入式开发如何开始和深入?

许雪松:嵌入式开发最大的挑战是软件硬件同时成熟出了问题容易踢皮球,影响开发时间。然而,对于软件开发者来说,最大的问题莫过于软件代码的撰写。PC平台的封装非常完善,应用也非常广泛,没有明显的错误,极其稳定。嵌入式平台几乎没这样的资源和封装级别,且和一些寄存器相关。这些寄存器配置的顺序,值都有严格的规定,严格按照datasheet的要求做。嵌入式代码全新开发得太多,自身也有个成熟的过程,也存在着很多方面的问题。例如:代码的应用层和底层耦合、应用层的使用不当和造成底层顺序错误等等。嵌入式调试成本很高,调试手段相比PC也比较单一,对从业人员的要求更高,这都增加了嵌入式的复杂性。

第一次选择嵌入式,完全不知道它是什么。走到今天,完全是兴趣使然。国外开源社区很多高手,其实都是抱着玩的心态去做开发,玩得好,也就是开发的好;开发的好也就是玩得好。这样才能保持持久的热情。我们常说成事要靠坚持,其实坚持需要方法和态度。

嵌入式还是计算机科学应用的一个子集。所以,学习好计算机基础课程是非常必要的。国内很多从事嵌入式的朋友,都是如电子、自动化等非计算机专业毕业的,这种状态不利于嵌入式职业的长期发展。

对于如何学习嵌入式开发我个人认为:

 

首先要学习好计算机的基础课程;

然后要有编程量,嵌入式以C/C++语言为主,这么语言入门易,掌握难,唯有大量的练习和阅读,才能提高,建议可以的话写到十万行的量;

系统介绍嵌入式开发的书籍很少,建议看《程序员的自我修养》,可以对整个嵌入式开发的内在机理有个较为深入的认识。

CSDN:硬件开发平台有FPGA,ARM,DSP等等,哪个更好,能简单分析下吗?初学者如果要学习ARM开发板,该如何去选购?

许雪松:FPGA和MCU是嵌入式开发的两个不同领域:前者硬件多、后者软件多,应用的行业领域和背景知识差别很大。两者相互不能完全替代。一般来说,FPGA相对于MCU的市场,较为小众。至于DSP,它是以计算见长的一类MCU,并不适合跑调转指令太多的事务代码,会打断流水线,优势体现不出来。所以,DSP的应用和一般的MCU用法略有不同,比较侧重计算、优化。

ARM是近十年来嵌入式中常用处理器,随着Cortex系列的推出,其市场更加立体和全面。看目前市场的发展,选择cortex-M4cortex-A8的单板做相关的开发,会更贴近现在企业应用的偏好。但如果这类开发板若太贵,也不一定就要买一块Cortex的开发板。其实,在实际的硬件上主要锻炼的是:驱动的开发,系统的移植。而常用的驱动中最复杂的莫过于以太网和图形系统,开发板能完成这两方面的学习即可。

CSDN学习嵌入式开发的开发板是否一定要买?是否有比较好的硬件模拟器?

许雪松:可以直接在x86上做。我买过开发板,但是买了之后,就放在屋子里睡觉。因为可以直接使用x86平台做目标平台。

虚拟平台差异很大。目前,x86是虚拟做得最好的平台,可以在x86上实现所有的驱动。ARM的平台虚拟水平也要看具体型号。我曾今参加一个开源项目,将RTEMS移植到QEMU mini2440上,可惜QEMU mini2440 的虚拟器或多或少仍有点问题,但也可以解决大部分的问题。可对于学习操作系统的朋友,去解决虚拟平台的问题,有些不靠谱。所以,真心想学习的,就把x86当作嵌入式平台去写代码。毕竟,能比x86这种嵌入式还要复杂的系统,也是屈指可数的,其含金量毋庸置疑。

CSDN请简单介绍下哪些是常用的嵌入式系统?在这些系统中,如何选择适合自己的系统?

许雪松:uC/OS,FreeRTOS、rt-thread、VxWorks、ThreadX、RTEMS、ECOS。不下上百种。在这些系统中选择自己的系统可不是件容易的事情。

学习的朋友,我推荐uC/OS,有相关书籍,国内网上的资源也比较多。uC/OS仅仅是一个处理器时间的分配器,简单、易学。学好了,触类旁通,其他的也复杂不了多少。

由于商业应用比较复杂,涉及工具链、商业授权、维护、可靠性、易用性等问题。商业应用的朋友我建议开源免费的就选择发展时间比较长的系统如RTEMS、ECOS这种系统,或者直接选择有商业服务的系统。

CSDN在众多的实时操作系统中,你为什么选择RTEMS?现在还有开发用到RTEMS吗?如果初学者想精通一门RTOS , 你觉得从RTEMS开始可行吗?

许雪松:当年公司使用的RTOS除了版权问题,还有技术、代码的问题,迫切需要寻找替代品。通过互联网搜索到RTEMS,它在2003年加拿大航天部门综合指数排名中超过VxWorks。这让我产生了极大的兴趣,一个开源免费的操作系统RTEMS做得尽然比商业系统还要强悍,于是开始学习它。RTEMS的内部数据结构设计非常精巧,是一个知识的宝库。举个例子,在数据结构里,双向空链表插入第一个元素时与插入第二个元素操作很不一样。在RTEMS里,用特殊的技巧使得不需要做这种判断,直接插入就好。又如堆的管理、重复释放申请的指针,不会产生任何问题。而在uC/OS里,这是致命的。虽然RTEMS是上个世纪80年代末开发的系统,数据结构和内部的组织从今天的角度来看,仍然是非常先进的,是个含金量非常高的系统。

RTEMS的代码量比Linux小,又比uC/OS这种系统大几个数量级。其开发难度和应用难度相对较高。初学者若是有坚实的基础,可以从RTEMS开始学习;基础较差朋友,若有RTEMS的熟手带,也是可以的。否则不建议这样做,会挫伤学习的积极性,形成恶性循环。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部