硬件设计师最常见的作业内容是经过写代码来测验硬件。这10个C言语技巧(C言语仍然是常见的挑选)能够协助设计师防止因基础性过错而导致某些缺点的发生并形成保护方面的困扰。
为了成功的推出一个产品,软件开发过程自身需求阅历很多的实践危险和妨碍。任何工程师最不期望的工作便是因所运用言语或东西而带来的应战。因而,这就需求硬件设计师编写代码来测验硬件的作业状况,在资源受限的状况下,还需求开发硬件和嵌入式软件。虽然东西和结构化编程现已有了很大发展,但一般挑选的仍然是C言语,基础性过错的不断发生,仍会导致某些缺点的发生并形成保护方面的困扰。为极力防止这些C编程圈套,这里有10个C言语技巧供硬件工程师参阅。
技巧#1:不要运用“GOTO”句子
二十几年前,当计算机编程尚处于起步阶段时,程序流程是由“GOTO”句子来操控。该类句子答应程序员对当时代码行断行,而直接进入另一个不同的代码段。列表1为简略的示例。
列表1 运用GOTO句子
编程言语究竟开端引入了函数的概念,即答应程序对代码进行断行。假如现已完结,不再运用goto句子来标明代码的断行。函数调用后,函数将回到下一条指令。列表2为示例。这一做法改进了程序结构,提高了可读性。自此,这被视为编写程序的正确办法。只需看到或想到goto句子,就会让软件工程师畏缩,发生天性的讨厌。其间一个首要的原因是,一个遍及goto句子的程序会让让人很难捉住重心,不便于对程序的了解和保护。
列表2 用函数操控流程
技巧#2:运用FOR(;;)或While(1)
假如goto句子现已过期,那么对程序创立无限循环应该怎么去做呢,这是一些硬件工程师或许会疑问的问题。究竟,之前都是经过创立一个goto句子然后再返回到main句子。处理这一问题就要运用C言语中现已存在的循环句子for和while(列表3和4)。
列表3 运用一个无限的For循环
列表4 运用一个无限的While循环
列表中的循环条件相对比较简略。for循环无非是以无条件状况运用条件句子。而另一方面,while循环是句子为真即予履行,这等同对任何条件的非零值。
技巧#3:运用适宜的条件句子
除代码的可读性之外,程序的履行时刻还首要依赖于做决守时所挑选的条件结构类型。许多硬件工程师都了解简略的if句子的运用。但是,有时工程师或许没有意识到,假如第一个条件不正确,还能够运用else或else if句子。这能够节约处理器时刻,而不必评价另一个条件句子。在列表5所示的前半部分代码中,假如Var值为1,则代码仍会查看Var是否为0。而在用了else句子的后半部分代码中,只评价第一个句子,之后就持续走下面的代码,这样就节约了时钟周期,使代码愈加明晰。
列表5 用If/Else代替只用If
If/else if/else句子或许并不永久适用。假如需求查看若干个或许的条件,switch句子或许更适宜。这样,处理器能够评价句子,然后从一个答案列表中挑选下一步动作,而不必接连地评价一堆条件。列表6显现的比如与列表5示例的类型相同。
列表6 运用Switch句子
以上示例的涵义是,让条件句子的挑选更敞开,以挑选出最适合的句子。这种做法使程序结构更简略,便于了解程序流程,缩短处理器的额定时钟周期。
技巧#4:防止运用汇编言语
微处理器的自然言语为汇编言语指令。为低等级机器言语编程或许会为处理器供给更高效的代码。但是,人类并不是天然生成就会这种言语,而且经历标明,编写汇编言语会形成误解。误解会导致保护不妥,更甚者,或许会使体系到处是bug.一般主张防止运用汇编言语。实际上,现在大多数编译器都能编译出十分高效的代码。选用C言语或C++言语等高档言语的开发,能取得更有序的结构,便于了解和保护,使代码的全体作用更好。列表7给出了一个示例,比较了使一个32位变量递加所运用的汇编代码和C言语代码。
列表7 用汇编和C言语完结一个变量的递加
汇编
C代码