我用的是下面的代码。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个字符之后的内容?
我找到答案了! IAR v7不能接受 "src "变量。IAR v7 不能使用"_RESTRICT",所以我把'cmsis_iccarm.h'改成了下面这个样子。
#ifndef __RESTRICT
#if __ICCARM_V8
#define __RESTRICT __restrict
#else
#define __RESTRICT
#endif
#endif