IAR不能做长线(第80期)

问题描述 投票:0回答:0

我用的是下面的代码。IAR代码画面中,第80位后有一行竖线。在下面的代码中,"src "变量前有一行竖线。

__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len)
{
  uint32_t i;
  for (i = 0U; i < len; ++i) 
  {
    dst[i] = src[i];
  }
}

然后,错误下面这个

Error[Pe018]: expected a ")"  
Error[Pe020]: identifier "len" is undefined  
Error[Pe020]: identifier "src" is undefined 

但如果我改变 "len "变量的设置位置,如下图所示,"len "变量位于垂直线的左侧

__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, uint32_t len, const uint32_t* __RESTRICT src)
{
  uint32_t i;
  for (i = 0U; i < len; ++i) 
  {
    dst[i] = src[i];
  }
}

然后,错误被改成下面这个样子。"len "已被定义。

Error[Pe018]: expected a ")"  
Error[Pe020]: identifier "src" is undefined 

为什么在这种情况下,IAR不能读取第80个字符之后的内容?

long-integer iar stm32f4
0
投票

我找到答案了! IAR v7不能接受 "src "变量。IAR v7 不能使用"_RESTRICT",所以我把'cmsis_iccarm.h'改成了下面这个样子。

#ifndef   __RESTRICT
  #if __ICCARM_V8
    #define __RESTRICT            __restrict
  #else
    #define __RESTRICT
  #endif
#endif
© www.soinside.com 2019 - 2024. All rights reserved.