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

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

3天内不再提示

如何成为更好的防御性程序员 5个小技巧

PCB线路板打样 来源:LONG 2019-08-09 10:18 次阅读

在实验室中有效的方法并不总是在现场工作,通常是由于意外的交互和未发现的错误。防御性编程可以帮助提高设计的弹性,但开发能够处理不可预见情况的嵌入式软件并非易事;它需要纪律和深谋远虑。以下是帮助开发人员成为更好的防御性程序员的五个技巧。

技巧1 -校验和或CRC数据

使用校验和和循环冗余校验( CRC)算法是开发人员验证通过串行链路发送的数据确实正确的好方法。经过审查的嵌入式系统在测试台的受控环境中始终表现如预期。然而,一旦系统被释放到野外,系统运行的环境就变得非常未知。嘈杂的环境可能会产生通信噪声,导致位翻转和误读数据。检测此损坏数据的最佳希望是通过使用校验和或CRC对数据进行健全性检查。

提示2 -按合同设计

按合同设计是一种开发软件的方法,可以生成高度定义的软件界面,每个函数都与之相关联具有明确的前提条件和后置条件。我们的想法是,如果应用程序要调用特定函数,则调用应用程序必须满足函数的前置条件才能获得有效的响应或操作。按合同设计对开发人员来说可能是一个强大的工具,因为它明确指定了函数期望接收的内容以及有效前置条件下的保证输出。由于期望不是“在线之间读取”,因此调用该函数的开发人员确切地知道了使用该函数的期望是什么。

技巧3 -使用断言

断言宏是开发人员验证其应用假设的好方法在应用程序中的给定点。断言的使用对于在bug发生时捕获程序中的错误和意外行为非常有用。断言甚至可以在契约式设计环境中使用,以验证合同的前提条件和后置条件是否已得到满足。有关在嵌入式软件中使用断言的介绍,请考虑阅读8个使用C中的断言和何时断言或不断言来压缩错误的提示。

提示4 -检查指针和缓冲区

指针和缓冲区是开发人员似乎总是遇到麻烦的两个地方。在C中开发嵌入式系统时,很容易意外地取消引用NULL指针或溢出缓冲区。防御程序员应该在取消引用之前检查指针的有效性。指针是否为NULL?不要去除它!存储在指针中的值是否为有效值?如果是,则取消引用。

指针算法和数组的使用也很危险。开发人员应该在缓冲区和指针算术运算中添加边界检查,以确保结果保留在它们应该的内存空间内。意外地仅通过一个字节覆盖内存可能会对嵌入式系统产生灾难性后果,更重要的是会对其用户造成灾难性后果。

提示5 -使用堆栈监视器

执行最坏情况的堆栈分析并正确调整堆栈大小是一项艰巨的任务。通常,堆栈的大小要么保留在编译器的默认设置中,要么开发人员在一张纸上写下几个可能的值并使用“eeny meeny miny moe”技术。这两种技术都不够,堆栈溢出的最坏情况成为现实。

开发人员可以通过监视此类事件来帮助防止堆栈溢出。大多数实时操作系统都内置了堆栈监视器。启用堆栈监视器只不过是使用RTOS的配置调整宏。在裸机系统中,开发人员需要更加积极主动,并且要么自己编写堆栈监视器,要么使用可以在Internet上找到的许多可用堆栈监视器之一。要了解有关堆栈监视器的更多信息,请考虑通过七个简单步骤阅读创建堆栈监视器并使用堆栈防护改进代码完整性

最后的想法

这五个技巧只是开发人员如何通过防御性编程改进嵌入式软件的几个例子。还有许多其他技术,例如编写安全代码和加密数据,这些技术可以帮助提高嵌入式系统即使在不可预见的情况下也能继续运行的机会。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序员
    +关注

    关注

    4

    文章

    949

    浏览量

    29761
  • PCB打样
    +关注

    关注

    17

    文章

    2968

    浏览量

    21652
  • 华强PCB
    +关注

    关注

    8

    文章

    1831

    浏览量

    27720
  • 华强pcb线路板打样

    关注

    5

    文章

    14629

    浏览量

    42980
收藏 人收藏

    评论

    相关推荐

    成为优秀程序员的条件(下)

    (接“成为优秀程序员的条件(上))7 需求理解能力。程序员需要理解一模块的需求,评估该模块在系统运营中所处的环境8 复用,模块化思维能力
    发表于 08-22 11:52

    嵌入式开发中防御性编程的要求

    的检查十分弱小,需要程序员谨慎的考虑代码,在必要的时候增加判断;防御性编程的另一核心思想是假设代码运行在并不可靠的硬件上,外接干扰有可能会打乱程序执行顺序、更改RAM存储数据等等。1
    发表于 12-15 07:20

    程序员需要学什么,微软资深程序员学习手册面试宝典资料

    程序员是现在比较吃香的工作。程序员工资高还不需要和复杂的社会打交道。那么怎么成为一名程序员?当程序员需要学什么?
    发表于 03-22 11:54 30次下载

    成为优秀程序员的7方法

    程序员总是有很多的决定,不是吗?如果你的新年待办事项还是空白的话,那么可以考虑使用下面这些程序员的想法。即使是最聪明的人,也还有成长空间。以下内容摘录自 Kevlin Henney 的《程序员应该知道的97件事》。
    的头像 发表于 11-21 11:18 1326次阅读

    10倍效率程序员是否真的存在

    在编程神话中,一 10 倍效率的程序员可以完成一普通程序员 10 倍的工作量。「普通程序员」就是指,善于完成工作但没有 10 倍效率
    的头像 发表于 10-30 11:50 2005次阅读

    程序员如何定义

    当了几年的程序员了,一直都在想一问题,什么是程序员程序员应该做好那些事情,什么样的程序员是有素质的
    的头像 发表于 12-18 14:15 2597次阅读

    Java程序员学习的6小技巧

    知识改变命运,对于Java程序员来说,技术不断更新,只有及时充电,才能不被市场淘汰。今天为大家分享Java程序员学习的6小技巧。
    的头像 发表于 02-11 16:11 2472次阅读

    怎样成为合格的程序员

    偶尔的,我会被人问道:如何成为一名优秀的程序员,更或者,如何成为一名程序员。每次人们问起,我都力图给出不同的答案。因此,我的答案是各种各样的。下面就是我认为的
    的头像 发表于 04-15 16:32 1506次阅读

    菜鸟程序员和大神程序员的差距

    刚刚走出就业的程序员,技术是刚刚起步的基点。那下面我们就聊一聊有关技术的东西。首先请您先想想这几个问题。现在社会上有很多程序员,CSDN就是我们程序员的家,那您是否可想过程序员为什么会
    的头像 发表于 06-03 15:56 2509次阅读

    什么是程序员

    当了几年的程序员了,一直都在想一问题,什么是程序员程序员应该做好那些事情,什么样的程序员是有素质的
    的头像 发表于 06-04 16:21 8912次阅读

    为什么要成为高级程序员

    程序员到高级程序员的职业生涯要经历以下几个阶段:初级程序员、中级程序员、最后是高级程序员
    的头像 发表于 07-11 16:51 2411次阅读

    怎样成为优秀的程序员

    每次我曾经的同学打电话向我询问程序员这个行业怎么样,我都会很耐心的讲上一半小时,谈人生谈理想,并判断他是否适合程序员这个行业。
    的头像 发表于 10-23 16:26 2094次阅读

    怎样成为顶尖的程序员

    在IT行业飞速发展的时代,有过的程序员,有些成为程序员心中的大神,那么那些成为大神的程序员们是因为什么
    的头像 发表于 11-06 16:12 2959次阅读

    成为优秀程序员必须知道的7好习惯

    作为一从业快10年的程序员,我想给新入行的程序员们一些建议。这些建议是我希望自己可以在毕业时就读到的,也希望它们可以帮助你成为
    的头像 发表于 01-06 16:09 2948次阅读

    代码防御性编程不得不知的技巧

    1 什么是防御性编程?顾名思义,防御性编程是一种细致、谨慎的编程方法。为了开发可靠的软件,我们要设计系统中的每个组件,以使其尽可能的”保护”自己。我们通过明确地在代码中对设想进行检查,这是一种努力
    的头像 发表于 11-22 09:49 1384次阅读