电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>可编程逻辑>工程师该避免的10个C语言陷阱资料下载

工程师该避免的10个C语言陷阱资料下载

2021-04-19 | pdf | 412.64KB | 次下载 | 免费

资料介绍

硬件设计师最常见的工作内容是通过写代码来测试硬件。这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代码 当然,现在仍有一些场合适于使用汇编语言,但这种场合仍比较少。首个推荐的场合是开发引导装载程序。这种情况下,可能需要优化对启动过程中某个决策(启动应用或引导加载器)的速度。此时,分支判定用汇编代码就可能有意义了。另一种场合是开发一种在DSP上运行有严格时序要求的控制循环。为了从设备中的得到每个时钟周期,用汇编语言做控制循环的编码是有意义的。如果目前任务适合用汇编,应确保将其妥善存档便于有据可查,这样,未来的开发者(或未来的版本)会明白该代码的用途。 技巧5:充分利用模块化 笔者最常见的经历是着手由硬件工程师开启的一个新项目往往是杂乱无章的代码组织。通常我们会发现,代码由一个单一的主模块组成,其中有2.5万多行代码。在这些应用中,一切都是全局性的,函数寥寥无几,goto语句贯穿整个代码结构。15年前这算正常,但如今已不再适用了!C语言编程使工程师能够将代码分成独立的功能模块,这简化了代码导航,同时还能够使工程师使用封装等面向对象技术。代码可以被组织成逻辑模块,这很有意义。虽然可能要先花点时间(几分钟),但从长远来看,这将能省掉很多漫长之夜,和很多调试之苦! 技巧6:写千层饼式代码而非面条式代码 Beningo是一个意大利名字,和许多意大利人一样,我对意大利面食也是毫无保留地热爱。当拿意大利面食与软件相比时,我就会想到两种面食,即意大利面条和千层饼。意大利面条比较混乱,面条相互交织,纵横交错,结果完全没有任何类型的结构。编写非结构化代码就非常像意大利面条:咬一口,完全不知道吃的是哪部分。 另一种就是意大利千层饼!这种面食是分层的,是有结构的。分层开发的代码不仅更容易理解,还可以移走一层并添加一个新层,基本上能够实现重复使用和维护的简易性。图1为用千层饼式代码模型的一个简单软件模块示例。 图1 千层饼软件 模型   驱动程序配置   应用程序配置   应用程序   驱动程序库   硬件 技巧7:使用描述式变量名称 编写易于理解和维护的较大软件有许多障碍,其中之一就是变量的命名习惯。为了尽力缩短变量名,开发者通常会自创一些较短的、令人费解的助记符,往往只有他们自己才能明白的符号。现代语言使一个变量名可以包含数百个字符。为了让事情清晰明确,“直截了当”地方法要好于其它方式。因此,变量名一目了然不仅有利于开发人员,也有利于未来的维护团队。列表8给出一个示例。
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1东芝BiCD集成电路硅单片TB67S109AFNAG数据手册
  2. 1.93 MB   |  5次下载  |  免费
  3. 2SP3060A/30120A/30160A/30320A/30520A系列数字合成扫频仪使用说明书
  4. 4.16 MB   |  3次下载  |  1 积分
  5. 3具有双通道 DC-DC转换器、由串行接口控制的9通道电机驱动器TPIC2010数据表
  6. 1.15MB   |  2次下载  |  免费
  7. 4USB Type-C PD快充协议智能触发芯片FS312B数据手册
  8. 0.75 MB   |  1次下载  |  免费
  9. 5USB Type_C PD快充协议智能触发芯片FS8025B数据手册
  10. 1.29 MB   |  1次下载  |  免费
  11. 6触摸按键PCB 设计要点V01
  12. 1.42 MB  |  1次下载  |  免费
  13. 7超低噪声、高 PSRR、低压降线性稳压器 (LDO)TPS7H1111-SP和TPS111-SEP数据表
  14. 4.05MB   |  1次下载  |  免费
  15. 8DC-DC电路(Buck)的设计与仿真
  16. 0.60 MB   |  1次下载  |  2 积分

本月

  1. 1DCDC原理详解
  2. 0.98 MB   |  65次下载  |  免费
  3. 2allegro快速入门教程
  4. 1.98 MB   |  36次下载  |  免费
  5. 3FU-7(807)胆机原理图
  6. 11.93 MB   |  25次下载  |  1 积分
  7. 4用于汽车应用的高压电源管理IC TPS65311-Q1数据表
  8. 1.05MB   |  22次下载  |  免费
  9. 5电子元件基础知识介绍
  10. 8.76 MB   |  15次下载  |  2 积分
  11. 6华为海思Ascend 310芯片的资料说明
  12. 0.12 MB   |  10次下载  |  10 积分
  13. 7GD32F10x系列MCU用户手册
  14. 11.5MB   |  9次下载  |  免费
  15. 86A 输出电流同步降压稳压器TPS65286数据表
  16. 2.05MB   |  6次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935083次下载  |  免费
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420045次下载  |  免费
  5. 3Altium DXP2002下载入口
  6. 未知  |  233067次下载  |  免费
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191308次下载  |  免费
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183308次下载  |  免费
  11. 6labview8.5下载
  12. 未知  |  81567次下载  |  免费
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73785次下载  |  免费
  15. 8NI LabVIEW中实现3D视觉的工具和技术
  16. 未知  |  70088次下载  |  免费