在嵌入式软件技术中,C++言语具有较高的编程功率。可是,要完成高功率,还有许多问题需求特别注意。首要,应该正确了解C++的作业原理,逐渐运用它的各种强壮功用,把专业经历集成到目标中,并运用针对嵌入式运用做过优化的开发东西。不主张运用朴实的自顶向下的规划战略和深层嵌套承继,并防止为习惯东西而抛弃言语功用,而使编程的功率下降。
嵌入式软件技术好像落后于新的开展局势,这首要是由于嵌入式开发人员依据多年来敷衍有限资源的经历而养成了慎重保存的情绪。这儿所指的有限资源包含:存储器容量十分有限,CPU的功用只是刚好够用。
对编程言语的挑选彻底反映了这种有用保存主义情绪。数年前,嵌入式开发人员渐渐开端了解高档言语,但终究被承受的是C言语。为了促进业界承受,C言语具有很高质量的代码生成和通明调试功用,另一方面,也正是在巨大的压力下C言语才变得更有功率。
即便相对于C,C++取得了显着的改善,但它在嵌入式体系中的运用仍远未遍及。
形成这种优柔寡断的原因倒不是由于人们顽固地回绝改动,而是很简略,他们仍是忧虑资源问题。存储器或许是大了一些,但你不或许为所欲为地额定添加500兆字节容量;处理器速度也的确快了许多,但本钱和功耗约束决议了它们的功用远远比不上即便是最一般的台式机中的处理器那么强壮。
按这种思路对C++用于嵌入式软件的恰当性发生顾忌又是否合理呢?答案是不必定。就像任何东西那样,只要正确合理地运用言语,才干发生杰出的成果。
主张开端逐渐运用C++。假如规划师今日还在运用C,那么让他明日就运用C++肯定是一个极大的跨过。但是,由于C++并不是一种面向目标的言语(实践上它是具有某些面向目标特色的一种进程言语),而且基本上是C的一个超集,因而规划师可以逐渐开掘C++新增的强壮功用。
了解C++的实践作业原理。检查生成的代码,并试着了解为什么要按它那样的办法做。
在目标中集成专业经历。嵌入式软件开发小组成员会有各种编程技巧,将这些专业经历集成到一些类(class)里边,然后能让其他团队成员安全地同享这些专业经历。
运用针对嵌入式运用做过优化的规划东西。尽管许多公司供给嵌入式编程东西,但相对而言,一些东西更能满足嵌入式开发者的实践需求。
恰当运用言语功用。C++并不是专门针对嵌入式运用而开发的言语。某些言语特性,比方过载功用,绝不会耗费任何资源。而其它特性,如反常处理体系(EHS),则或许需求很大的开支。该功用可以协助编程人员构建极具鲁棒性的代码。但缺陷是为了习惯这种功用,东西会在后台悄悄地发生许多的代码。假如这种状况不可防止,那么至少以简略的办法运用EHS将能削减意外发生。
不主张将嵌入式体系当作PC。假如规划师在对PC进行编程,那么可以以为存储器是无限和随意运用的,而且总是有满足的CPU处理才干。但在编写嵌入式软件时需求愈加慎重。先编一些代码,看看它的长度和履行功用。然后,只要当测验成果坐落合理范围内而使规划师满足时,才干持续做下去。
图1:在嵌入式体系中,存储器一直是宝贵的资源。一个支撑智能链接的链接器能运用编译器发生输出来消除重复的存储器区域。
运用朴实的至顶向下的完成办法。从高层开端,创立只包含低层功用stub程序的软件运用程序创立是十分吸引人的。但是,这种战略的缺陷在于会呈现许多令人讨厌的意外问题。规划师或许在编写完代码后发现整个程序太大或太慢,乃至又大又慢。
运用深层嵌套的承继(inheritance)。面向目标编程办法的长处之一是可以让规划师自己或其它开发人员依据曾经创立的其它根底类界说新的类,而且不必彻底了解那些根底类的内部作业机理。这便是承继。但这样做的缺陷是依据这种办法生成的类的实例化目标或许需求必定的开支。
编写“聪明的”代码。开发人员可以用C++写出十分聪明简练的代码。但C++也能让人写出适当不流畅难明的代码。千万不要是后者。
只是由于东西不能很好地处理而抛弃一些言语功用。例如,假如模板完成很差,它们就会发生严峻的代码胀大(codebloat)。假如东西不能很好地处理这种状况,那就改用其他可以协助进步编程功率的东西。