EDN首页   博客首页

最新日志

发表于:2007-4-20 13:05:12
标签:RDC  风河  VxWorks  Linux  

3

RDC(区域开发者大会)在中国

RDC(区域开发者大会)在中国

作者:Tomas Evensen是风河的首席技术官     December 20, 2006

文章来源:http://www.ednchina.com/blog/tomas/

我刚刚结束了为时两周的中国之旅。那是一个迷人的国家,除了例行的参观,我们还在深圳、上海和北京举行了三场区域开发者大会 (RDCs)。

RDC取得了巨大的成功,平均每天到会人数超过了400位。并且,与会者都对风河的最新产品和未来规划有着极为浓厚的兴趣。

我是如何知道他们感兴趣的呢? 在中国的会场中,从前面到后面所有位子都被坐满了人。这与一些美国或欧洲会议常见的场面不同,在那些地方的会议中,后排的座位好像是最抢手的 (当然, 我并不是指我们的美国和欧洲朋友对会议内容不感兴趣...或许他们的视力更好些吧)。

Paul Chen在深圳的讲台上

在会议上,我们讨论了风河平台上的各种各样的组件的细微差别, 还讨论了很多诸如我们的VxWorks 、Linux 、WorkBench 和 Diagnostics 产品的新特点。如果您还没看过它, 我们正好刚刚发布了我们的平台的一个新版本,而这个新版本的产品也使我们讨论的内容更丰富了。在会议中,我还有幸谈到了关于我们的多核/多处理器某个细节,内容与FreeScale 的多核计划的介绍有紧密联系。

从会议演讲问答中以及后来提出的问题来看, 多核在中国正逐渐变得强大。在会议中,有很多关于不对称多重处理(AMP)或对称多处理技术(SMP) 哪个更好的讨论。正如生活中许多事情,关键不是对问题的一个简单的答案,而更多的是看到人们如饥似渴地讨论在“不同条件下”针对同一问题有多种不同答案。这里确实有很多令人困惑的地方,困惑起源于定义标准的不同。有些人也许会将SMP定义为同步多处理机(也就是同步的多个处理器,每个处理器可能拥有也可能不拥有独立的操作系统),而另外一些人定义它为对称多处理机(意指对称的多个处理器由一个操作系统进行控制)。这个具体问题,在未来博客上我将谈谈我的观点。

中国工程师的品质也给我留下很深的印象,他们非常地聪明,而且富有创造性。实际上,正是因为这样的一些原因,我们决定在北京成立一个开发中心。现在,我们的首批十位工程师在Alameda接受培训,以便我们能开始明年的运营。这个团队工作的重点将是我们用于VxWorks和Linux 平台的BSP;我期待在来年,这个小组能带给我们开发出更多新的、令人兴奋的技术。这也会使得接近客户的开发商有了绝对的优势;我们常常感到,通过我们在美国、加拿大和欧洲的开发中心可以看出,没什么比当地的第一手资料更加可靠。

至于我在中国的其它体验,我将必须引用一句古谚语,“在北京发生的事情, 只有在北京才能身临其境吧”……

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(1) | 阅读(2364)
发表于:2007-4-19 18:55:57
标签:嵌入式  IT  处理器  硬件  

1

嵌入式=IT+15年?

嵌入式=IT+15年?

作者:风河的首席技术官Tomas Evensen     October 23, 2006

文章来源:http://www.ednchina.com/blog/tomas/

这个标题中隐含的问题是,现在多数人所看到的嵌入式产业的问题,那就是多年来嵌入式产业总是跟随着IT产业的轨迹,并且大多数IT领域的趋向最终会在嵌入式领域找到相应的痕迹。确实是这样的,就像我们找到通往DSO领域的道路一样。关于DSO的信息请看John的博客

 

    这样会有两个问题:

1. 为什么嵌入式领域会落后?

2. IT领域所有的趋势都会被复制到嵌入式领域吗?

 

    我认为,如果你想得到这些问题的答案,你首先需要对IT领域和嵌入式技术二者之间奇妙的差别有一些了解。我将会对这两个领域的技术做一些比较,而在商业领域也会有一些相似的讨论。

 

    二者确实有一些共同之处,他们同样都是在处理器上运行软件的一种技术。那么,是否所有高效编程的技术(更高级的语言、模块化编程、更高的抽象级别)和更好的硬件(更快、更便宜、更少的种类)都同样能适用于两种技术呢?

 

    让我们看看下面这些趋势:

   

   高效编程

 

    在IT领域这种趋势是十分明显的。当高效编程出现后,我们从二进制语言转到汇编语言,又到了FORTRAN/COBOL/C 以及 Java/C++/C#,有时还会涉及模块化编程。随着语言等级的提高,带给我们的是更高的抽象级别。这使得我们需要对我们运行软件的硬件了解的更少,并且我们用大量的标准类库来完成一些以前靠我们自己编程来做的事情。还使得在底层上重用代码和只关注上层更新成为可能。这样,程序员变得更加高效了。

 

    但提高的效率是需要代价的,那就是我们需要更强的处理能力以及更多的内存等。如果编写一个同样的程序,你需要更多的花费开销。但这是值得的。因为丢掉硬件比在遇到困难时添加程序员划算得多。

 

    但有时,在嵌入式设备上,帐不能这样算;一个更强大的处理器所要耗费的不仅是金钱,它也还会带来更多的能耗、更快的消耗电池等其他负面影响。对于大量已生产的廉价设备来说,添加额外的更快的处理器和更多的内存也会是一笔不小的开销。

 

        JAVA就可以很好的说明软件在嵌入式设备上的差别,Michael Scharf会说javac是一样高效的,但显然它是错的。Java是通过使用一种叫做just-in-time (JIT)的编译技术来提高在工作站上的性能的;这意味着在你执行代码的时候,你实际上是将java的字节码转换成多个处理器可直接运行的本地代码。由于JIT的运行需要一个在目标机上的编译器并且这个编译器需要缓存来编译代码,所以JIT会消耗一些内存。这也就是在你想要的更快的、更小存储的设备时会遇到问题。

另一个问题是,你所使用的语言越高级,比如JAVA,你将会从硬件上做越强的抽象,这会使得你对同步运行的控制越难。一些设备需要考虑同步的问题,这意味着你需要在一个指定同步窗口上运行代码。汽车安全气囊就是一个典型的例子;你不会希望在一个气囊的膨胀过程中,java的垃圾收集器能够在每毫秒都来执行检查。

 

    硬件趋势

 

    一些硬件从桌面系统到嵌入式系统的转换越来越快。比如,使用多个高效处理器、多核芯片、廉价的内存。这些都很快在嵌入式系统中实现了。

至少有一件事到现在还没有发生,那就是合并成更少的处理器结构和种类。所有在七八十年代的微处理器构架都被两种处理器构架所取代;x86/IA32是其中的一种主导构架。在嵌入式的领域中,我们仍有多种处理器构架,虽然比较相近,但还是在不断变化。比如单独的power pc处理器就有一些在浮点数乘法运算的差别。这意味着操作系统和工具的提供商需要为这种处理器提供特定的支持。对比于X86构架来说,同样的工具和系统可以运行在多种运营商提供的设备上。为什么?

 

    这主要有以下一些原因造成:

l         IT领域向后兼容性的要求更强

l         IT领域,驱动的标准推进更快

l         工作站/服务器/桌面系统比电话与路由器之间的差别更小

l         设备的专属性更强

 

    在嵌入式领域的标准化是纵向的,比如,现在一些高级的电话使用的是基于ARM的芯片。

 

   问题

 

    现在我们解释了为什么嵌入领域的发展落后于IT领域了吗,还没有:)

 

    但是希望了解到你们的观点。

 

    实际上可能有些事情不同(比如使用高级语言是否划算方面),有些事情又可能比较类似;但确定的是,我相信在促进标准的形成方面,我们需要变换思维。在嵌入式领域,我们需要更好的标准来提高效率。

 

    这正是DSO所关注的:用不同的方式来思考,将产业带到一个更高的效率级别上。

 

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(2) | 阅读(2833)
发表于:2007-4-19 18:50:52
标签:存储器  嵌入式  编译器  代码  

1

存储空间对于嵌入式系统还重要吗?

存储空间对于嵌入式系统还重要吗?

作者:风河的首席技术官 Tomas Evensen    October 05, 2006

文章来源:http://www.ednchina.com/blog/tomas/

    存储器,或你的软件需要使用的总内存容量,曾经是嵌入式设备的一个难题。但是现在,RAM和闪存的成本比例和以前相比变得越来越小,是不是存储器不再是一个问题了?随意的使用?因为很便宜?还是不要太早的下定论。

 

    你可以把我看成是古板的学究。但我相信,存储器在一些设备中仍旧是一个难题(虽然不是所有的情况总是如此),让我来告诉你原因。

 

    当我最初开始编程的时候,我所选择的电脑是TRS-80,也被Pet/Commodore/Apple称作Trash-80。实际上对于我父亲带回家的这台机器,我并不能做太多的选择。到了1970年代以后,我使用的计算机有一个巨大的4KB RAM,并很快升级到了16KB。当时我使用的编程的语言是Z80汇编语言。在这种条件下,你只能使用你的第6感来解决程序问题,并尽量使用短小的代码。我说这个并不是炫耀我的年龄而是要表明我的看法。

 

    在个人电脑/工作站/企业级平台上,存储器显然已不是开发软件的首要标准。你也可以对比Office97Office2003。我们对于存储器的需求至少增加了5倍。由于在PC上磁盘和RAM平均的增长数量与此相当,所以这并没有带来什么问题。

 

    但在嵌入式领域中并不是这样。我会给你举出3个理由,但我相信还有更多:

1.   PC相比,内存在嵌入式设备中的成本还是比较重要的,虽然内存的价格已经便宜了很多,但其它组件也在降价,你在硬件上每一笔开支的节省都会在你卖掉成千上万的廉价设备时得到补偿。

2.   电能消耗

更多的内存就会消耗更多的电能。那些经历过因Windows Mobile没电而无法使用的用户,会深刻体会到这一点的重要性。这不仅是你在设备中使用的内存数量问题,这同样还涉及在不同情况下需要供电的内存数量。一些精巧的设备会关闭不需要使用的内存。

3.   启动时间

一些设备,比如数码相机需要快速启动,在一些系统中,一大块的启动时间是用来将软件从闪存中读到RAM内存中。代码越短的启动越快。

 

       OK,所以存储器还是很重要的,但是如何削减软件在设备上占用的存储器容量呢?

 

    这里有一些小技巧。有些时候代码的大小可以衡量一些事情,比如特性、性能、程序的应用性等,但我发现保持代码的精简会使得程序的复杂性降低,这对于程序的质量来说是一件好事情。

l         选择一个可以优化程序代码占用存储空间大小的编程语言

这是一种简单的替换。对于节省存储器来说,相比于Java来说,C语言是一种较好的语言(因为你可以得到你想要的存储空间)。如果你知道你在做什么,c++也是一种十分高效的语言,但是我见过很多臃肿的c++程序,所以我建议你小心使用。你可以阅读Stroustrup的相关评论来了解更多的内容。尽量不要使用所有的C++组件。

l         选择一个可以优化代码占用存储空间大小的编译器

大多数的编译器可以优化速度并关注代码的大小,这与嵌入式编译器有很大的差别。例如,其中的一个原因是我们使用风河的编译器来编译VxWorks,对比于gcc,它不仅会将代码的运行效率提高10%,同时也会将代码缩小10%

l         选择一个可以订制的操作系统并只包含你想要的组件

为设备设计操作系统(比如VxWorks)与设计一般功能的操作系统(比如Linux)不同。RTOS系统(实时系统比如VxWorks),可以被看成是一个库,你可以只将你实际用到的代码放到代码镜像中。

 

但是得到精简存储器的最有效方法是精简你的代码构架并缩小你的代码尺寸。虽然说起来容易,但当你真正处理现存的代码时,你会发现这是很困难的。

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(2214)
发表于:2007-4-19 18:45:15
标签:英特尔  多核  Workbench  Diagnostics  wikipedia  

0

英特尔和多核工具

英特尔和多核工具

作者:风河首席技术官Tomas Evensen          September 20, 2006

文章来源:http://www.ednchina.com/blog/tomas/

英特尔正在发布用于帮助程序员运用多核技术的工具。看看the news.com的故事: Intel: Optimize applications for multicore. (英特尔:优化用于多核处理器上的应用程序)。在文章中, James・Reinders 声明, “编写多个线程本身并不困难, 而是开发人员需要习惯我们需要工具帮助的思维方式。” 虽然我也同意开发人员需要习惯那种思维方式,但是实际上我相信, 编写多线程的应用程序本身也是很困难的。我发白的头发可以证明这一点...

令人质疑的是,“为什么多核与单核(或唯一内核)的发展会显现如此的不同呢?”

原因之一是,多数软件是用非常连惯的方式写出来。这意味着,一个程序处理的事件队列能够很好地被定义和控制,那正是程序员喜欢的。同步和调试同时进行是不足为奇的,你可以经常使用普通范例设置断点、停止编码、查看代码,然后继续。

如果想更加充分地发挥多核技术的潜能,你需要并行地执行任务。如果当第一个内核在执行简洁的顺序程序时其它的内核不得不进入挂起状态,那么增加额外的内核是没有意义的。同步执行意味着,你需要将多个计算指令分别放到多个线程中,并让他们同时运行。我们知道同时做许多事是很困难的。特别是如果你是男性(也许会存在神话,如果你是前总统就更是如此)。

在编程中,多任务中的困难常常出现在你共享数据以及多任务同时访问数据时,这已被传统的售票问题证实。如果在数据库上,一个拥有剩余票的数量的事件不受保护,会出现资源竞争的情况:
  
数据库中票(TicketsLef): 10 .

票代理处A从TicketsLeft读: 10 .

票代理处B从TicketsLeft读: 10 .

票代理处A 减1 和写回: 9 .

票代理处B 减1 和写回: 9 .

数据库中票: 9

这样你花一张票钱买了两张票。
   
使用某种锁是一种典型的保护的方法,它可以确保只有当A完成访问之后,才让B出票。这就是互斥信号量;但受保护的事件越多,越可能使两项任务彼此互相等待,也叫死锁。

在wikipedia读很多关于racing conditions,(资源竞争)的现象、deadlocks(死锁)semaphores(信号)的书。如前所述,在多核环境中实现多任务所遇到的问题更为严重,其原因有两个: 
 
1. 在多核中, 您需要利用多任务使性能获得提高,而在单核中只需让你的任务很简单。

2.  由于多核处理器实际上会并行的执行临界区的代码,所以在使用多核处理器执行多任务程序时发生竞争的可能性就更大。而在单核中,只有不幸在计时器发生冲突时才会发生竞争情况。

像英特尔和HP生产的工具将通过跟踪信号和存储器存取帮助你查出这些问题。经证明得知工具是聪明的,你可以从它那里得到任何对你有利的帮助。

在Wind River的产品中, 我们有一个新的更强大的工具帮助你发现线程中以及其他方面非常棘手的问题。我认为,关于Workbench Diagnostics这个工具,你可以在不让系统停止的情况下,随时用它在任何代码行中插入可执行代码(传感器点)或记录任何你感兴趣的信息。例如,你可以在C代码中很容易地设置传感器点,核实当你访问数据时是否采用了特殊的信号量。
   
我坚信, 利用像Workbench Diagnostics这样的工具是多数人将来调试复杂问题的方式。当你遇到同步问题,并且当最棘手的问题就是同步问题时,停止系统并使用传统的设置断点的调试方式将变得非常困难,传感器点的输出调试能力将给你最后的一线希望。

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(2097)
总共 , 当前 /