第二个问题:任何可以自定义的工具建议(即允许禁止特定警告)并在自动构建环境中使用(即命令行界"/>

关于C#:嵌入式软件的Misra标准

关于C#:嵌入式软件的Misra标准

Misra standard for embedded software

我要求制作大量符合MISRA标准的代码。
第一个问题:有人可以根据经验对嵌入式系统编写良好的代码进行估算。 我理解"写得好"的定义很差,含糊不清,所以我要求进行原始估算。
第二个问题:任何可以自定义的工具建议(即允许禁止特定警告)并在自动构建环境中使用(即命令行界面)
任何其他有用的建议,可以帮助完成这项任务。
谢谢伊利亚。


我也强烈推荐PC-Lint。如果您正在使用Visual Studio编译代码,我建议使用Riverblade中的插件"Visual Lint"。如果无法在Visual Studio中编译代码,仍可以从命令行运行PC-Lint,效果很好。

一些嵌入式系统编译器提供MISRA一致性测试作为编译器警告。我使用IAR编译器进行Arm7 / Arm9开发。它在编译器设置中提供了易于配置的MISRA合规性检查表。

很难想出一个经验法则来估计你需要花时间编写符合MISRA标准的代码。很大程度上取决于程序员现有的编码习惯以及他们首先遵循MISRA规则的程度。

粗略估计:
2 - 3天熟练使用PC-Lint。
使现有代码符合MISRA标准的初步通过:首先编写代码所花费的时间为10%到25%。
保持代码MISRA兼容:代码开发增加了5%到10%。这笔费用的一半改变了你的程序员遵循"MISRA方式"做事的习惯。另一半是代码测试和检查的额外成本,以确保MISRA合规性。


如果您遵循相当好的编程习惯,那么使代码符合Misra并不是太多的苦差事。你可能会发现一些指针规则有点棘手,如果你试图遵守的代码有一些奇怪而精彩的指针算法。

我是第二个Greg对PC Lint的建议,但开源Splint也值得关注,虽然它们之间(和编译器的警告系统),我估计你仍然只能覆盖Misra规则的80% - 其余的可能需要手工检查代码。


我使用PC Lint进行C和C ++代码的静态分析。它可以配置为显示违反MISRA规则的内容,并且具有命令行界面。


我们有一个类似的改造米斯拉规则的问题。我们在一个大型项目中遇到了一些代码质量问题,并决定使用MISRA来提高代码质量。

我们使用支持MISRA C规则的Green Hills编译器。还有独立的跳棋可用。根据你想要做的事情,它可以在所有规则上切换。我们一次切换一条规则,让人们有时间修复有限数量的类似问题,否则你会被错误的数量完全淹没。

由于我们的警告是由编译器生成的,而不是由独立工具生成的,因此您在开发时会看到错误,而不仅仅是在运行检查程序时。随着我们不断发展,我们的代码符合标准而不是大爆炸。这也可以防止旧习惯破坏新代码,导致您不得不再次重新编写代码。

有时很难让旧代码兼容,因为没有人确切知道代码是如何工作的。我希望你有单元测试。


我使用了一种名为QAC的商业工具。该工具能够强制执行MISRA

它有一个命令行界面,因此您可以将其设置为从自动构建环境运行。要应用的规则是可配置的,但希望有人花一些时间来设置它。 MISRA执法非常简单,运作良好。我被告知(这只是第三手),这是一些代理商(如FDA)用来评估代码的工具之一。像大多数静态分析工具一样,有噪声(误报)需要处理。我最后一次使用它时,没有很好的方法来标记/阻止误报再次发生(不改变它所抱怨的代码)。

我怀疑一名初级工程师需要花费一周时间(4-5天)才能完成设置(假设他们决心让它按照您的意愿运行)。

另外,其他商业静态分析工具也可能具有MISRA执行功能。据报道(根据他们的销售代表),Klocwork确实如此。


我很欣赏这是一个古老的问题,但为了任何其他考古学家(或搜索者)的利益,重要的是要记住MISRA提供的指导方针不应该盲目地遵循。

我赞扬用MISRA编写新代码; 因此,保持合规将更容易。

但是,这并非总是可行 - 尤其是在尝试对代码进行逆向工程以满足指南时。 在这种情况下,我建议您关注所需的规则,并将Advisories视为奖励......此处也适用成本效益!

另外,请记住,有一个偏离过程 - 最好保持干净和可维护的代码有偏差,而不是设计一些兼容但难以辨认的意大利面条。


推荐阅读

    linux命令行输入汉字?

    linux命令行输入汉字?,系统,软件,发行,管理,终端,命令,模式,编辑,文件,文本,L

    linux开启终端命令行?

    linux开启终端命令行?,密码,系统,电脑,终端,首页,工具,软件,命令,权限,用户,l

    linux命令下载工具?

    linux命令下载工具?,工具,网络,代理,代码,简介,位置,系统,第一,下载工具,文

    linux命令行重命名?

    linux命令行重命名?,图片,名字,名称,软件,代码,文件,命令,文件名,批量,方面,L

    linux命令行3中文?

    linux命令行3中文?,工作,地址,系统,信息,标准,命令,目录,网上,功能,内核,linu

    linux命令行进入图文?

    linux命令行进入图文?,系统,密码,终端,电脑,网络,传播,情况,图形界面,命令,

    linux命令行交互界面?

    linux命令行交互界面?,系统,密码,状态,终端,信息,工具,环境,情况,首页,界面,l

    linux怎么调用命令行?

    linux怎么调用命令行?,系统,地址,工具,工作,首页,终端,命令,密码,信息,情况,l

    linux命令行权限不够?

    linux命令行权限不够?,档案,系统,权限,密码,文件,命令,终端,目录,文件名,用

    linux查看命令行进程?

    linux查看命令行进程?,系统,软件,信息,状态,进程,名称,实时,命令,数据,电脑,

    linux命令行大全软件?

    linux命令行大全软件?,系统,工作,软件,地址,信息,管理,官网,命令,工具,基础,l

    linux好用的命令工具?

    linux好用的命令工具?,系统,管理,工具,基础,服务,信息,工作,发行,公司,代码,L

    实现linux远程命令行?

    实现linux远程命令行?,软件,名称,地址,工具,密码,网络,服务,代码,系统,电脑,

    linux下命令行浏览器?

    linux下命令行浏览器?,地址,传播,工具,网站,软件,发行,网址,首次,官网,系统,l

    linux常用命令行工具?

    linux常用命令行工具?,系统,工作,工具,地址,管理,信息,命令,软件,目录,基础,l

    linux命令行写错了?

    linux命令行写错了?,系统,环境,位置,软件,名称,密码,状态,代码,预期,异常,十

    linux命令行如何复制?

    linux命令行如何复制?,位置,系统,文件,命令,目录,工作,源文件,目标,文件名,

    linux启动进去命令行?

    linux启动进去命令行?,系统,工具,首页,电脑,终端,材料,密码,命令,快捷键,窗

    linux命令行打印图标?

    linux命令行打印图标?,系统,信息,工具,服务,环境,地方,数字,网络,工作,命令,l

    linux获取ip命令行?

    linux获取ip命令行?,地址,系统,网络,信息,技术,设备,电脑,服务,手机,管理,配