本帖最后由 NE5532 于 2010-6-15 13:53 编辑
*注:此文专为21IC而著,可以转载,但需保留本说明,否则将可能导致版权追究
1.实时操作系统比“裸奔”好
2.“裸奔”不能实现实时操作系统所能实现的某些编程任务
3.实时操作系统可以提高单片机的响应速度
4.用过实时操作系统的人,绝不会返回“裸奔”状态
破题:
1.不讲条件
[a]违反工程设计的基本原则
这种结论方式违反了工程设计的基本原则。在设计中,没有“最好”的方式,只有“最合适”的方式,每种方案都有自己的优点和缺点,就像硬件的可靠性和软件的灵活性一样。
在工程中选取一种方案时,必须同时知道他“好”在哪里,“坏”在哪里,正如孙子兵法所说“知己知彼,百战不殆”。
[B]没有为“实时操作系统”下定义
什么是“实时操作系统”,实时操作系统是一种用于在多个并发性任务间进行调度的代码,是由“人”完成的。既然这种代码是由人完成(而不是神),那么每个编写单片机程序的人,在掌握了必要的编写思想后都可以自己完成一个“实时操作系统”。
如果“实时操作系统”的概念指“由特定的某人编写的那个实时操作系统”,那么其他人写的就都叫“裸奔”;如果“实时操作系统”仅指这种程序调度方式思想,那么任何人都可以用这种思想(或加以裁剪以适应自己的实际系统)后用于编写自己的订制软件。
综上:该命题没有指明“实时操作系统”的概念,没有具体说明其好在哪里,坏在哪里。
解决方案:在选择“裸奔”或“实时操作”系统前,应弄懂其各自的优缺点,和自己的应用需求,方可作出正确的选择。
2.定义不明
[a]没有为“实时操作系统”下定义
理由同上,最常见的直线型程序是最简单的程序模式,但肯定无法满足所有的编程要求。在直线型程序模式之上加中断、定时、调度等程序思想,可以形成状态机(一种简单的合作式调度模式)、合作式调度器、抢占式调度器(实时操作系统)等处理能力更强的,如果我们把“实时操作系统”仅看成一种变成模式,那么这个命题就不攻自破了。
解决方案:弄清方案的实质,千万不要把技术“神化”
[B]没有考虑“方案代价”
如上所述,任何方案都有他好的一面,也有坏的一面。实时操作系统的缺点在于“占用部分的系统资源”和“使用他人代码的风险性”。
当单片机硬件系统固定以后,其最高的指令处理速度就确定了。既然“实时操作系统”是一个需要一直运行的代码程序,其必然占用单片机部分的处理能力(包括使用定时中断、占用MIPS,占用RAM资源等)。我们知道,标准51上运行UCOSII后,资源几乎耗尽,这就像奔腾1G+128M RAM,虽然可以运行WinXP,但几乎只能用来上网一样。当系统确实需要实时系统时,我们在资源上必须做出折让,其代表是以ARM为首的32位平台,不过这样的折让又会带来第二个问题——技术风险。
技术风险包括硬件风险和软件风险。8位机里,51和PIC问世已达到或接近20年,由于其简单、应用广泛,内核的BUG几乎已经消灭殆尽,虽然这些单片机的资源几乎无法运行实时操作系统(有为PIC编写的非常简单的调度程序)。但是我们再转过来看看已经不是主流的ARM7的BUGLIST,以NXP为例,MAM加速器随机崩溃的BUG,足够让我们心惊胆战。如果再看更新的M3内核或者ARM9、ARM11,就知道其作为消费类或非关键类产品的处理器是足够的(例如手机),但是在一些“稳定压倒一切”的产品(例如能源计量、军事、医疗)上,我们不得不仔细考虑是否能够承受这样的代价。
软件风险是指你如何去信任别人的代码,世界上不犯错误的只有上帝,这就说明任何人类编写的程序代码都可能有BUG。但是在嵌入式系统的销售模式上,消费者只会找最终厂家的麻烦,比如移动Ophone使用GOOGLE的系统(改编后的),如果消费者发现问题,只会去找移动,而不会去找GOOGLE。同时,一些政府采购的例如电表、气表等,如果出现过多的问题,可能导致生产厂家被逐出该市场,在这种情况下,系统的设计者不得不考虑“是否为他人买单”的技术代价。
另一方面,随着软件复杂度的提高,软件的测试也会变得非常困难。直线程序很好测试,因为在编译之后,其各种行为就确定了;有中断参与的程序要难测一些,因为中断和主程序是异步运行的;当引入了事件驱动和调度后,软件的行为取决于外部事件发生的顺序,在产品上市时间的压力下,测试不可能找到所有的BUG,消费类产品必定会带着BUG出厂,这就是智能手机死机的原因之一。
解决方案:要仔细评估自己系统对需求、成本、可靠性的要求,权衡后决定是否使用操作系统。
3.概念混淆
上以述及,当硬件系统确定后,单片机总的处理速度是一定的。当其专注于某一个任务时,该任务会得到最高的相应速度;当其运行调度器,需要关心多个任务(或至少运行调度器)时,必将降低其响应速度。请注意我们的讨论条件——“只有一个任务”。当有多个并发任务时,简单程序模式(包括直线程序和中断模式)已经不能完成功能要求,这时就需要使用操作系统思想或代码。
以12M频率标准51系统而言,其实RTOS很难实现数uS级别的相应,但专注于单任务的“裸奔”程序却可以做到。
解决方案:单任务裸奔模式具有最高的响应速度,实时系统是为了同时响应多个并发任务。
4.违反工程设计基本原则或带有商业目的
上以述及,实时操作系统有利有弊,裸奔同样有利有弊,没有一个方案是万能的。有的设计师没有跳出自己所属的行业(例如消费电子、医疗或三表等)来全面看待这个问题。不得不承认,任何人(包括我自己)都有保护自己技术方向的本能(该能力属动物性质,为自然属性)。但是我们作为工程师,应该客观全面地认识事物,辩证看待“好”与“坏”的概念。简单说,不讲条件地推广RTOS的人,可能是“球迷类狂热者”,也有可能是销售员,就像电视购物一样,他们把你闹晕的目的只有一个——让你掏腰包。
解决方案:世上没有万能方案,没有绝对的“好”和绝对的“坏”,工程师应该辩证看待问题,给出最适合自己需要的选择。
链接--上一篇 【原创求精】破解单片机伪命题之(1)——精确定时
https://bbs.21ic.com/icview-177692-1-1.html |