【发布时间】:2018-09-27 00:16:20
【问题描述】:
我正在使用嵌入式 C 语言,最近为整个项目运行 MathWorks Polyspace Code Prover(动态分析)以检查关键的运行时错误。它在 While 循环中发现了一个错误(红色警告),我通过内存寄存器将一些 ROM 数据复制到 RAM 中。 该代码工作正常且符合预期,但我想问是否有任何解决方案可以安全地删除此警告。请在下面找到代码示例:
register int32 const *source;
uint32 i=0;
uint32 *dest;
source= (int32*)&ADDR_SWR4_BEGIN;
dest = (uint32*)&ADDR_ARAM_BEGIN;
if ( source != NULL )
{
while ( i < 2048 )
{
dest[i] = (uint32)source[i];
i++;
}
}
我的猜测是 ADDR_SWR4_BEGIN 和 ADDR_ARAM_BEGIN 是在链接描述文件中定义的,而 polyspace 没有编译和链接项目,这就是它抱怨可能的运行时错误或无限循环的原因。
ADDR_SWR4_BEGIN 和 ADDR_ARAM_BEGIN 在各自的头文件中定义为 extern。
extern uint32_t ADDR_SWR4_BEGIN;
extern uint32_t ADDR_ARAM_BEGIN;
警告为红色,具体警告如下:
Check: Non-terminating Loop Detail: The Loop is infinite or contains a run-time error Severity: Unset
任何建议将不胜感激。
【问题讨论】:
-
"它在 While 循环中发现了一个错误" 消息是什么?你怎么知道这是一个错误?
-
“无限循环或运行时错误”。没有编译器或链接器错误。
-
为了准确回答你,你能添加ADDR_SWR4_BEGIN和ADDR_ARAM_BEGIN的定义吗?顺便说一句,您看到的是红色检查还是橙色检查(您使用的是“警告”一词)?
-
@codetest :您需要在问题中提供准确的逐字诊断,而不是在 cmets 中解释它。编辑问题,复制并粘贴诊断。
-
@AlexDeba 我编辑我的帖子。我希望它能让问题更清楚。
标签: memory embedded runtime-error dynamic-analysis