我正在使用嵌入式 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
任何建议,将不胜感激。