我正在使用uVision Keil 4.71.0.0IDE为Cortex-M0控制器编写一个工业代码。我们的代码应该遵守MISRA规则,并定期向QA-C进行检查。
我的问题是,某些特定于控制器的函数(如__wfi()、__current_sp()等)似乎没有在任何地方定义,而QA-C正在抱怨它们:
340: __wfi();
^
Msg(5:3335) No function declaration.
Implicit declaration inserted: 'extern int __wfi();'.
CC Coding Rule 6 <next>右键单击Keil中的函数名并选择"Go to definition“,确认该函数未定义:
Source Browser: '__wfi' - undefined Definition/Reference!Keil是否提供带有此类功能原型的正式头文件?在我们项目的代码中硬编码这样的原型,或者创建QA-C异常,都需要一个正式的评审过程,我想避免。
发布于 2015-05-22 08:26:07
我不认为这些是常规函数,而是用汇编程序代码替换了生成的二进制函数中的非标准内置函数。看看这个。
这里有3条米斯拉规则需要考虑,它们不一定是相互协调的:
我要做的是将所有这些“函数调用”移动到一个单独的文件和文档中,该文件包含程序中所有内联程序集的调用。您可能需要这样一个文件来支持与内联程序集有关的其他MISRA规则。声明这些函数用于封装汇编程序。然后将其排除在静态代码分析之外,除非静态分析器支持给定的汇编程序和/或"ARM本质“。
如果你这样做,我认为你将符合米斯拉100%,而不需要提出一个偏差。简单地说,ARM本质是您封装内联程序集的方式。
发布于 2015-05-22 08:25:41
它们被称为编译器本质,我不确定它们是否需要声明。它们基本上是编译器提供的语言的扩展。
发布于 2015-05-22 09:05:16
正如所写的,bevor是编译器写的。我不认为你有他们的来源。您可以在Keil或ARM编译器指南中找到一些东西,这可以帮助您(我还没有安装KEIl,可以自己看看)。
可以使用一个特殊的Compiler命令(IAR编译器有类似的内容)来定义这个函数。
如果这一切都不起作用,您可以在QA-C (不知道)中设置一个例外,以忽略该函数,因为它来自编译器,或者为QA-C指定了一个虚拟函数。
把这个弄出来
CJADIFCI.htm
https://stackoverflow.com/questions/30391113
复制相似问题